Чем меньше прослоек, тем выше скорость и меньше затраты памяти, поэтому по возможности нужно обходиться без них. В этом плане Винда с её Вин32 АПИ, реализованном с помощью кучи ДЛЛ на базе НТ НативАПИ, сделана откровенно плохо. Поэтому моя кочка зрения по поводу АПИ для оси в общем такова: АПИ, реализуемый "низкоуровневой" частью системы (ядром и драйверами), должен быть достаточен для подавляющего большинства прикладных задач, а значит, должен включать и средства синхронизации и посылки сообщений, и файловый ввод-вывод, и другие подобные функции, причём вызываемые без всяких прослоек и обёрток.
А вот сравнительно редко используемые или громоздкие по сути функции (вроде оконной системы) могут быть уже надстройкой-прослойкой: во-первых, они нужны не всем и не всегда, а во-вторых, лишнее время на вызов прослойки будет незначительным по сравнению с общим временем выполнения таких функций. Собственно, такой подход предоставляет, например, ДиректХ: понятно ведь, что прямое обращение к "низкоуровневому" драйверу видюхи в теории обеспечивает более высокую скорость работы, чем то же самое через ДиректХ, однако плюсы (несколько более высокая скорость) незначительны по сравнению с минусами (необходимостью самостоятельно учитывать особенности видюхи и её драйвера, выполнять кучу рутинных вспомогательных операций и т.п.).
Что касается компиляторов и АПИ, то, по идее, компилятор от АПИ не зависит вовсе, зависит лишь библиотека времени выполнения в той части, где она соприкасается с системой. Хотя утверждать не буду: возможно, современные компиляторы учитывают какие-то особо тонкие особенности систем (в частности, связанные с SEH -- как сей механизм реализован в Линухе, лично я понятия не имею). Ну а саму идею -- использовать готовые компиляторы, а не изобретать свои -- в целом поддерживаю.
Наконец, API Posix в качестве системного АПИ. ИМХО, вполне разумный выбор. Идеалом сей АПИ не является -- сказывается тяжкое прошлое в лице Униха, и некоторые вещи при проектировании с нуля без цели добиться совместимости можно было бы сделать лучше, да только это лишний геморрой, оправданный далеко не всегда :) Ну а на качестве самой оси АПИ вообще практически не сказывается: та же QNX использует как раз API POSIX (точнее, его версию для систем реального времени), однако по надежности оставляет далеко позади всякие линухи и прочие винды.
|