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