Генерация языкового Agnostic API - PullRequest
2 голосов
/ 12 ноября 2009

В настоящее время я работаю над проектом для набора подсистем, и я хотел бы иметь возможность предложить API, предоставляемые данной подсистемой, для использования другими подсистемами.

Раньше я использовал SWIG для демонстрации C api на множестве других языков. Это хорошо сработало для меня, но, в конечном счете, API определяется на языке C. Так что в основном одна сторона API не зависит от языка, а другая - нет.

Что мне действительно хотелось бы, так это иметь нечто похожее на SWIG, которое могло бы генерировать интерфейс между 2 произвольными языками на основе некоторого описания API.

Я не хочу пользоваться веб-сервисами.

Например, я хотел бы вызвать «функцию» из Java и реализовать «функцию» в Python. Я хотел бы иметь возможность генерировать взаимодействие языка с помощью генератора кода.

Есть ли что-нибудь, что может сделать это сегодня? По крайней мере, для простых вызовов функции - игнорирование более сложных случаев, таких как обратные вызовы и ситуации, когда вам нужно поддерживать ссылки вне самого вызова функции.

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Я нашел это после перехода по ссылке gooli на Протокол буфера .

Это выглядит настолько убедительно, что я собираюсь предложить это как ответ на мой собственный вопрос.

http://incubator.apache.org/thrift/

Thrift - это программная среда для разработки масштабируемых кросс-языковых сервисов. Он объединяет программный стек с механизмом генерации кода для создания сервисов, которые работают эффективно и без проблем между C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, Smalltalk и OCaml.

Из документа :

... нам была поставлена ​​задача построить прозрачный, высокопроизводительный мост через многие языки программирования. Мы нашли это большинство доступных решений были либо слишком ограниченный, не предлагать достаточно свобода типа данных, или пострадал от неудовлетворительное исполнение

Также из статьи :

A. Подобные системы Ниже приведены программные системы, аналогичные Thrift. Каждый (очень!) Кратко описан:

  • SOAP. XML основе. Предназначен для веб-сервисов через HTTP, избыточный XML разбор накладных расходов.

  • CORBA. Относительно всеобъемлющих, и спорный запас прочности тяжеловес. Сравнительно громоздкий установка программного обеспечения.

  • COM. Принято в основном в клиентском программном обеспечении Windows. Не совсем открытый решение.

  • Pillar. Легкий и высокопроизводительный, но отсутствует управление версиями и абстракция.

  • Буферы протокола. Закрытый источник, принадлежащий Google. Описано в Sawzall бумага.

Последняя часть о Protocol Buffer устарела - он был с открытым исходным кодом

1 голос
/ 13 ноября 2009

COM (и в меньшей степени Firefox XPCOM ) может быть тем, что вы ищете В COM вы определяете API, используя язык IDL, который затем может быть скомпилирован на разных языках. При использовании одного и того же языка вызовы обычно вырождаются в эффективные вызовы функций.

Однако COM - это очень сложная и умирающая технология, которую я бы никогда не использовал в новом проекте.

...