Интеграция плагинов разных языков в каркас - PullRequest
0 голосов
/ 26 июля 2010

У меня есть вопрос: предположим, я создаю расширяемое программное приложение с подключаемой архитектурой, чтобы новые приложения могли быть интегрированы в этот инструмент.Если новое приложение написано на другом языке и должно быть интегрировано в мое приложение, нужно ли мне использовать такие инструменты, как SWIG и собственный интерфейс Java (в зависимости от используемых языков, конечно)?Если нет, то что мне нужно?

1 Ответ

4 голосов
/ 26 июля 2010

предположим, я создаю расширяемое программное приложение с подключаемой архитектурой

Хорошо.Вы написали некоторый код.Я притворюсь, что это на Java, потому что вы упоминаете SWIG и JNI.

Если новое приложение написано на другом языке

Как это произошло?

  1. Вы запланировали это.В этом случае ваше приложение имело API, который поддерживал хотя бы один дополнительный язык.«другой язык» не имеет большого значения, потому что вы, как разработчик, должны решить, какие языки вы допустите.Новые языки не случайное событие.Это то, что вы разработали.

  2. Вы не планировали этого.В этом случае кто-то другой - вопреки вашему замыслу - требует другого языка.Язык, который вы не разработали.

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

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

Вариант 2 менее распространен.Либо вы не планировали, либо у вас есть кто-то, кто настаивает на написании своей собственной библиотеки API на основе своего выбора языка.

Вы, вероятно, не используете такие инструменты, как SWIG и собственный интерфейс Java, чтобы создать этоAPI.Если кто-то еще хочет поддерживать Python, он будет использовать кучу инструментов Python для использования вашего приложения.


Реальный вопрос не в том, «нужно ли мне использовать такие инструменты, как SWIG и Java Native».Интерфейс (в зависимости от используемых языков, конечно)? "Или что-то в этом роде.

Реальные вопросы:

  1. Как выбрать дополнительный язык для поддержки, помимо языка реализации?Вы, кажется, используете Java.Вы хотите поддерживать больше языков, чем Java.[Просто угадай - твой вопрос не завершен.]

    Ответ: Брось монетку.Какие языки вы считаете нужными для рынка.С популярен.Так же и C #.Так же как и Python.Паскаль не так популярен.

  2. Как мне написать свою структуру, чтобы разрешить "иностранные" языки?

    Ответ: Это сложно.

Чтобы написать приложение, которое поддерживает несколько языковых интерфейсов, вы должны сделать кучу вещей.

  1. Знать достаточно много языков, чтобы знать их ограничения.

  2. Напишите ваше приложение, чтобы API можно было успешно использовать на всех ваших языках.

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

  4. Избегайте языковых функций.Избегайте аппаратных функций.Это означает, что нужно избегать всех «нативных» или «примитивных» типов данных в API и использовать реальные стандартные типы.Часто строки Unicode представлены в UTF-8.Такие вещи универсальны и вездесущи.

  5. Избегайте необычных нестандартных протоколов.HTTP, FTP и т. Д. Настолько широко распространены, что их нельзя слишком сильно использовать в качестве интерфейса.Они могут быть медленными.Для большей скорости вы можете создавать именованные каналы между «чужим» кодом и вашим приложением.Если вы хотите, чтобы иностранный код имел «прямой» доступ к вашей среде, подумайте дважды.

  6. Или сделайте то, что делают многие API, и примите C как "lingua franca" интерфейсов.Дизайн все, чтобы быть вызываемым из C программ.Используйте соглашения C и дружественные C-типы данных.Это имеет ограничения, но многие люди делают это.

...