@sudoInsane

Почему прошивки пишут на С?

Почему весь низкоуровневый софт пишут на С/С++? Дело в скорости? В отсутствие GC? В отсутствии возможности аллоцировать память руками? Чисто технически подобное можно написать на скриптовом языке по типу Python используя стандартную реализацию языка?
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 5
@Mercury13
Программист на «си с крестами» и не только
Потому что низкоуровневый софт должен…
• Быстро выполняться. Потому что его выполняют или в глубоких циклах (например, ОС), или на слабом железе.
• Расходовать мало памяти и не «течь». Потому что его часто выполняют на слабом железе. Или в чужих стеках, как драйвер.
• Содержать мало зависимостей. Если мы зависим от большой библиотеки вроде Qt, а её реализации на данной машине нет — выкуси. Точно так же интерпретатор Питона может оказаться лишней зависимостью. И многопоточка, которая часто требуется для «мусорщика».
• Быть совместимым с кодом на других языках. Это касается системного и драйверного кода, который вызывают из прикладного ПО (или, наоборот, прикладной кода из системной проги) — и даже с кодом на разных версиях .NET в расширениях оболочки Windows есть вопрос.
• И в то же время требуется некая доля переносимости и абстракции. Например, мы пишем джойстик на AtMega и не хотим мучиться с длинными числами — ЯВУ лучше будет, чем ассемблер. 10 бит АЦП на 8-битном процессоре уже длинное число!!

Почему Си? У него есть две фишки: большое поле для ручной оптимизации (ключевое слово register, op++), и он полагается на две ассемблерных утилиты — линкер и библиотекарь (tlink и tlib, например). Из-за этого компилятор Си довольно просто написать под новую машину, и на НЕоптимизирующем компиляторе можно писать довольно быстрый код.
Ответ написан
@bacon
Встречный вопрос, а зачем писать прошивку на скриптовом языке?
Ответ написан
firedragon
@firedragon
Senior .NET developer
Допустим у меня attiny85 там даже arduino studio кажется тяжеловесной.
На асме меня ломает писать. С самое то.
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
Потому что С компилируется в машинный код, который исполняется процессором, а твой питон использует посредника (интерпретатор), чтоб выполнять код.

Потому что низкоуровневый язык позволяет более точно выделять память, что позволяет её экономить. Т.е. писать менее требовательный код. В то время как ты выделишь под число (int) кхм... 2 байта, а надо всего 1 байт (Byte), то ты теряешь где-то навсегда 1 байт. Если посмотреть в масштабе, то код на С уже экономичнее в два раза. А мы ещё говорим только об одном типе.
Ответ написан
Qubc
@Qubc
Для самостоятельного ответа на этот вопрос достаточно прочитать Петцольда и потом Дейтлов. Иные ответы будут либо долгими, и фактически являться пересказом выше упомянутого, и иметь сомнительную ценность с точки зрения как профессионального роста, так и просто развития кругозора.
Почему пишут на С - потому что удобно для низкоуровневой работы с железом, потому что есть стандарты. В любом случае, любой язык, будь компилируемый или интерпретируемый, в итоге превращается в машинные коды. Другой вопрос, что уровень абстракций бывает разный в зависимости от поставленных задача. Где-то нужно на вывод подать напряжение через десять секунд, а где-то нужно вывести на экран целую игровую модельку. Поэтому в одном случае вы будете вручную помещать в регистр значение, а вдругом случае писать метод.
Сможете написать программу на питоне так, что задача будет решена, то есть программный комплекс будет выполнять то, что нужно, быстро, хорошо, недорого и легковесно - ну, будет писать прошивки на питоне. Не сможете - не будете)))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы