Какие методы мы можем использовать для взаимодействия языков программирования? - PullRequest
0 голосов
/ 19 марта 2009

Что мы можем сделать, чтобы объединить код, написанный на языке, с кодом, написанным на любом другом языке? Какие методы более / менее известны? Я знаю, что некоторые / большинство языков могут быть скомпилированы в байт-код Java, но что мы будем делать с остальными?

Ответы [ 8 ]

5 голосов
/ 19 марта 2009

Вы упомянули подход «компиляция в Java», а также подход «использование языка .NET», поэтому давайте рассмотрим другие случаи. Есть несколько способов взаимодействия, и это зависит от того, чего вы пытаетесь достичь, это в каждом конкретном случае. Вещи, которые приходят на ум,

  • Веб-сервисы (SOAP или REST) ​​
  • Текстовый (или другой) файл в файловой системе
  • Использование базы данных для передачи состояния или других данных
  • Среда обмена сообщениями, такая как MSMQ или MQSeries
  • TCP-сокеты или UDP-сообщения
  • Почтовые ящики и именованные каналы
3 голосов
/ 19 марта 2009

Это зависит от желаемого уровня интеграции.

  • Вам нужен код для обмена данными? Используйте независимый от платформы формат данных, такой как JSON, XML, протокол буфера, Thrift и т. Д.
  • Вам нужно уметь запрашивать код, написанный на одном языке, для выполнения какой-то задачи для кода на другом? Используйте веб-сервис или аналогичный уровень межпроцессного взаимодействия.
  • Нужно ли иметь возможность вызывать код в рамках одного процесса? Ответ на этот вопрос будет полностью зависеть от того, на каких языках вы говорите.
2 голосов
/ 19 марта 2009

Прямые вызовы:

  • Прямые вызовы (если компиляторы понимают стек вызовов друг друга)
  • Удаленный вызов процедур (начало 90-х)
  • CORBA (конец 90-х)
  • Удаленный вызов метода (Java, со стеком / библиотекой RMI в целевой среде)
  • .Net Remoting

Менее плотно интегрирован:

  • Веб-сервисы / SOAP
  • 1020 * ОТДЫХ *
1 голос
/ 03 апреля 2009

Почти каждый язык, который претендует на то, чтобы использовать какой-то тип разработки системы, способен связывать внешние процедуры с помощью стандартного интерфейса ОС или интерфейса функций C. Это то, что я склонен использовать.

1 голос
/ 03 апреля 2009

В Интернете куки могут быть установлены для передачи переменных между ASP / PHP / JavaScript. В предыдущем проекте, над которым я работал, мы использовали его для создания PHP-файла для загрузки PDF-файлов без указания их расположения в файловой системе из приложения ASP.

1 голос
/ 03 апреля 2009

К сожалению, ваш вопрос довольно расплывчатый.

Существуют способы использования разных языков в одном и том же процессе, обычно путем встраивания виртуальной машины или интерпретатора в исполняемый файл. Если вам необходимо общаться через границы процесса, снова есть несколько возможностей, многие из которых уже упоминались в других ответах.

Я бы предложил вам уточнить свой вопрос, чтобы получить более полезные ответы.

1 голос
/ 19 марта 2009

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

Там разделяет среду выполнения (например, C # и Visual Basic) и компилируется в одно и то же приложение / процесс ...

Там один вызывает другой (например, скрипт perl, который вызывает программу на C) ...

Там разговаривает друг с другом через IPC на коробке или по сети (например, каналы и веб-сервисы) ...

1 голос
/ 19 марта 2009

Чаще всего я вижу два SWIG и Thrift . Основное отличие состоит в том, что (IIRC) Thrift открывает порт и помещает туда сервер для распределения данных между различными языками, тогда как SWIG создает файлы интерфейса библиотеки и использует их для вызова указанных методов.

...