Другие языки программирования и технологии

Какие преимущества сохранил Ассемблер к Си?

Какие преимущества сохранил язык Ассемблер к языку Си? Ведь сейчас Си умеет очень много того за что раньше ценился язык машиных кодов. В чем Ассемблер выигрывает у Си и правильно ли я понимаю что Си ближайший конкурент, все остальные позади прилично?
Андрей Буравов
Андрей Буравов
14 075
В чистом виде не сохранил. При программировании драйверов удобен для явного указания адресов, регистров и прерываний. Но в конечном итоге, код драйвера - это, зачастую, смесь Cи и Asm-а.

Кроме того, бывают ситуации, когда сгенерированный сишный код, хоть и маленький в абсолютом размере, оказывается большим для данного микроконтроллера (например, для контроллеров светофоров) прежде всего, по объему занимаемой памяти.

С другой стороны, я слышал о ситуациях, когда организации было дешевле покупать более дорогие кристаллы, которые "тянули" бы код, сгенерированный Cи, чем обеспечивать зарплатой высококлассного специалиста на Asm-е.

Да, Cи часто называют макроассемблер по той причине, что многие конструкции языка довольно однозначно преобразуется в ассемблерный код. Это удобно и исходник куда понятнее ассемблерной лапши. С другой стороны, работая с асмом напрямую легче использовать определенные фишки конкретного контроллера и это даст более компактный код.

О ближайших конкурентах говорить сложно. Изначально C++ (как впрочем и D) имел несколько иную цель, отличную от Cи. Тот же Objective-C будет ближе к исходному Cи. Golang и Rust пока недостаточно развиты и распространены. Я пока затрудняюсь дать комментарии на их счет.
Николай Семенов
Николай Семенов
2 152
Лучший ответ
не то вы сравниваете, не то!
Андрей Буравов Оно то понятно, я к тому что сейчас Си умеет делать очень многое что и Ассемблер, в добавко так сказать к своему функционалу, вот я и спрашиваю что Си еще не добавил к своей мощи из арсенала Ассемблера. Повнимательнее ;)
а ничего что это языки абсолютно разного уровня? какие нафиг конкуренты.. .
новый форд фокус конкурент кроссовкам адидас? в чем он выигрывает?
Андрей Буравов Оно то понятно, я к тому что сейчас Си умеет делать очень многое что и Ассемблер, в добавко так сказать к своему функционалу, вот я и спрашиваю что Си еще не добавил к своей мощи из арсенала Ассемблера. Повнимательнее ;)
Ассемблер при наличии умения позволит писать самый эффективный код. Ключевая фраза - при наличии умения. А еще ассемблер - архитектуро-зависимый язык. Так что написанное под x86 нигде кроме x86 не запустится.

С - позволяет писать почти такой-же по эффективности код с меньшим количеством геммороя, так как это высокоуровневый язык.

Вы, часом, не микроконтроллеры программировать собрались?
Андрей Буравов Вот как раз вопрос и был навеян тем что микроконтролеры сейчас проще на Си программировать. Что ж получаеться Ассемблер уже ничем не привлекателен?
Прога грамотно написанная на Ассемблере будет занимать меньше места и работать быстрее, чем если бы была написана на любом другом языке, деже С. Но, так как писать на Ассемблере большие программы нелегко, то используют ассемблерные вставки в местах кода, где нужно проделать громоздкие вычисления, используя как можно меньше ресурсов железа, а остальную часть, например, интерфейс, пишут на языках высокого уровня.
Места мало занимает прога написанная на ассемблере. других не знаю, не прогер ))