Технология описания интерфейса библиотек

Cразу предупреждаю, возможно я еще не совсем проникся всеми тонкостями искусства программирования, и возможно все уже давно придумано, просто подругому называется, но я так и не нашел ничего подобного.


А смысл вот в чем. Всем известно, что большинство системного (и не только) ПО написано на языке Си. Это связанно с тем, что язык Си является как бы стандартом. Практически любая библиотека, рассчитанная на широкое использование имеет заголовочные фалы, написанные именно на языке Си (тем более в никсовых системах, где этот язык является основным). Позже пишут заголовочные файлы и для других языков, однако это уже делает не разработчик библиотеки, а разработчик языка (или сообщество) . Даже если язык является 100% совместим с Си или с интерфейсом библиотеки, заголовочный файл придется писать все равно вручную. Можно конечно придумывать различные трансляторы, но до сих пор я не встречал ни одного вменяемого, да и написать его — это все равно что написать половину Си-шного компилятора.
Вот тут и получается, что молодые языки, сколь бы они не были перспективны, тормозят свое развитие в связи с тем, что не могут сразу работать с многими библиотеками. Пускай даже и будут написаны какие либо заголовочные файлы к нему, но с выпуском новой версии библиотеки придется снова его дописывать. Тут и получается, что поддерживать все многообразие библиотек в рамках одного сообщества (тем более молодого) становится нереальной задачей.
Так почему тогда не использовать не Си код для описания интерфейса, а некий абстрагированный язык, предназначенный специально для этого. Структуру языка можно сделать таким, чтобы его можно было легко распарсить и сгенерировать код под определенный язык. Так же, неплохо было бы сделать возможность документирования содержимого, ведь в заголовочных файлах практически нет комментариев, и для этого надо искать отдельно документацию к библиотеке, а ведь это две неотъемлемые части, так почему бы не использовать их вместе.
Если же разработчик библиотеки будет использовать такой формат описания интерфейса, то он не потеряет совместимости с языком Си, а только расширит область применения своего продукта. Если грамотно разработать спецификацию такого языка, то не составит большого труда написать трансляторы под разные языки программирования. А если идея понравится, то я думаю, подобные трансляторы будут встраиваться в сам компилятор, избавляя программиста от лишней работы.

Скорее всего я не первый, кому в голову пришла такая идея, и возможно были подобные проекты, если кто знает о них, отпишитесь в комментах, почему они не приобрели популярность. А пока, для того,чтобы использовать все «свежее» и малоизвестное, приходится использовать все тот же Си.

Технология описания интерфейса библиотек: 2 комментария

  1. Для привязок из C и C++ в другие языки есть SWIG. Сделать универсальный формат для всех языков, IMO, практически невозможно: для необходимых вещей в одном языке может просто не быть аналогов в другом.

  2. > Сделать универсальный формат для всех языков
    нет, я имел ввиду немного другое, я хотел сказать что фомат не напрямую должен быть связан с языком, а лиш давал общее описание, который можно было бы легко преобразовать в заголовочный файл к конкретному языку. Согласен, некоторые вещи напрямую невозможно перенести из одного языка в другой, но в таких случаях можно генерить допутим код библиотеки-переходника (к примеру из си в питон). Мне кажется подобное вполне реализуемо, даже если какую нибудь конструкцию вообще нереально перенести, то хотябы те же функции да константы можно перенести, а остальное уже руками, ведь уже куда меньше работы будет.
    На счет SWIG, если я правильно понял, он служит для портирования самого Си-шного кода, а писать интрефейсные файлы — это практически то же самое, что и писать заголовочные (по трудоемкости), а я прделагаю сами заголовочные файлы портировать, не трогая код самих библиотек.

Добавить комментарий