Недавно я прочитал интервью с соавторами Луи Луисом Х. де Фигеродо и Роберто Иерусульским, где они обсудили дизайн и реализацию Lua. Это было очень интригующе, если не сказать больше. Однако одна часть обсуждения вызвала у меня что-то. Роберто говорил о Lua как о "автономном приложении" (т.е. Чистом ANSI C, который ничего не использует для ОС). Он сказал, что ядро Lua полностью переносимо и благодаря своей чистоте удалось значительно портировать более легко и на платформах, которые даже не рассматриваются (например, роботы и встроенные устройства).
Теперь это заставляет меня задуматься. C в целом - очень портативный язык. Итак, какие части C (а именно те, что содержатся в стандартной библиотеке) являются самыми неуязвимыми? и каковы те, которые можно ожидать для работы на большинстве платформ? Следует использовать только ограниченный набор типов данных (например, избегая short
и, возможно, float
)? Как насчет системы FILE
и stdio
? malloc
и free
? Кажется, что Луа избегает всех этих. Это что-то до крайности? Или они являются корнем проблем переносимости? Помимо этого, что еще можно сделать, чтобы сделать код чрезвычайно портативным?
Причина, по которой я все это прошу, заключается в том, что я пишу приложение в чистом C89, и это оптимально, насколько это возможно. Я готов пойти на средний путь в его реализации (достаточно переносимый, но не так много, что я должен писать все с нуля.) В любом случае, я просто хотел узнать, что вообще является ключом к написанию лучшего кода на языке C.
Как последнее замечание, все это обсуждение связано только с C89.