Создание языкового API-интерфейса
В настоящее время я работаю над дизайном для набора подсистем, и я хотел бы иметь возможность предложить API, предоставляемые данной подсистемой, для использования другими подсистемами.
В прошлом я использовал SWIG для демонстрации C api на множестве других языков. Это хорошо сработало для меня, но, в конечном счете, API определяется на языке C. Так что в основном одна сторона API не зависит от языка, а другая - нет.
Что мне действительно хотелось бы, так это иметь что-то похожее на SWIG, которое могло бы генерировать интерфейс между 2 произвольными языками на основе некоторого описания API.
Я не хочу использовать веб-сервисы.
Например, я хотел бы вызвать "функцию" из Java и реализовать "функцию" в Python. Я хотел бы иметь возможность генерировать взаимодействие языка с помощью генератора кода.
Есть ли что-нибудь, что может сделать это сегодня? По крайней мере, для простых вызовов "функции" - игнорирование более сложных случаев, таких как обратные вызовы и ситуации, когда вам нужно поддерживать ссылки вне самого вызова "функции".
2 ответа
Я нашел это после перехода по ссылке Голи на протокол буфера.
Это выглядит настолько убедительно, что я собираюсь предложить это как ответ на мой собственный вопрос.
http://incubator.apache.org/thrift/
Thrift - это программная структура для разработки масштабируемых кросс-языковых сервисов. Он объединяет программный стек с механизмом генерации кода для создания сервисов, которые эффективно и без проблем работают между C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk и OCaml.
Из документа:
... нам была поставлена задача построить прозрачный, высокопроизводительный мост между многими языками программирования. Мы обнаружили, что большинство доступных решений либо слишком ограничены, либо не предоставляют достаточной свободы типов данных, либо страдают от некачественной работы
Также из документа:
А. Подобные системы Ниже приведены программные системы, аналогичные Thrift. Каждый (очень!) Кратко описан:
МЫЛО. XML основе. Предназначен для веб-сервисов через HTTP, чрезмерные накладные расходы при разборе XML.
CORBA. Относительно всеобъемлющий, спорный и тяжеловесный запас прочности. Сравнительно громоздкая установка программного обеспечения.
COM. Принято в основном в клиентском программном обеспечении Windows. Не совсем открытое решение.
Столб. Легкий и высокопроизводительный, но отсутствует версия и абстракция.
Буферы протокола. Закрытый источник, принадлежащий Google. Описано в статье Sawzall.
Последняя часть о Protocol Buffer устарела - она была с открытым исходным кодом
COM (и в меньшей степени XPCOM Firefox) может быть то, что вы ищете. В COM вы определяете API, используя язык IDL, который затем может быть скомпилирован на разных языках. При использовании одного и того же языка вызовы обычно вырождаются в эффективные вызовы функций.
Тем не менее, COM - это очень сложная и умирающая технология, которую я бы никогда не использовал в новом проекте.