5

Понятно, что большинство (если не все) крупные энтерпрайз сервисы, приложения и тд. (не только веб) написаны с использованием не одного языка программирования, а нескольких. И эти составные части, написанные на разных языках, как-то взаимодействуют между собой (фронт, бизнес-логика, еще что-то).

Опыта разработки подобных систем у меня нет, поэтому не совсем могу представить, как это происходит. Подозреваю, что взаимодействие идет через независимые от языков средства. Например, нечто написанное на одном языке, шлет через TCP-IP пакет, который ловится и обрабатывается чем-то написанным на другом языке. Либо через HTTP запросы. Либо через запись/чтение из БД. Либо через файловый обмен, XML например.

Хотелось бы, чтобы знающие люди привели пару примеров, как это обычно происходит. Не просто в двух словах, мол "фронт на яваскрипте, бэк на яве", а с техническими нюансами. Заранее спасибо.

  • А какие вам нюансы нужны. Вы сами перечислили большинство средств общения. Технические нюансы - это уже например функции для работы с http в выбранном языке. смотрится в доке на язык. Остальное - дело фантазии – Mike Nov 29 '16 at 20:50
  • Самые распространённые варианты вы уже сами привели, не очень понятно, что ещё вы хотите в качестве ответа. Добавлю ещё, что в некоторых языках есть возможность запускать код, написанный на других языках - например, скрипт на Python может напрямую использовать процедуры, написанные на C++ или Golang. – Xander Nov 29 '16 at 20:54

3 Answers3

7

Несколько языков могут сосуществовать как в рамках одного процесса, так и в рамках нескольких.

Проще всего сосуществовать в рамках нескольких процессов: если процессы обмениваются данными, то совершенно всё равно (ну, в известных рамках), на каком языке эти данные были созданы, и какой язык их читает. Например, вы можете генерировать данные в виде HTML сервером на ASP.NET, а читать браузером, написанным на C++. (Да, пара из сервера и клиента — тоже взаимодействие языков.)

Теперь, если мы хотим взаимодействие в рамках одного процесса, нам нужно уметь вызывать друг друга. Для этого нужен общий стандарт вызова. Часто таким общим стандартом являются бинарные соглашения C (extern "C", экспорт из DLL в Windows).

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

Отдельная возможность, популярная сейчас — языки, компилирующиеся в общий промежуточный код. Например, Java и Scala компилируются в один и тот же код для JVM, поэтому объекты, созданные в Java, просто доступны для Scala-программ (так как доступность определяется не на уровне исходного языка, а на уровне JVM-метаданных). То же касается .NET-языков.

Ну и ещё есть набор glue-технологий. Например, для вызова в .NET нативный функций есть P/Invoke, который создаёт автоматический маршаллирующий stub для нативных функций. (Маршаллирование нужно, чтобы данные в формате, «понятном» .NET, перегнать в данные в формате, ожидаемом нативным кодом.)

VladD
  • 206,799
  • А еще бывает скрипт PHP, в котором HTML, JS, CSS и какой-нибудь JSX, не к ночи будь помянут. – rjhdby Nov 30 '16 at 10:11
  • @rjhdby: Ага, так и есть. – VladD Nov 30 '16 at 11:43
1

Если вам нужны именно технические нюансы, то смотрите соглашение о вызове (calling convention). Именно эти соглашения позволяют разным языкам вызывать функции из библиотек, написанных на других языках.

0

а с техническими нюансами

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

Простой пример "Создание почтового сервера"

  • Использование языка запросов SQL - куча документов ISO/IEC 9075*
  • Кодирование серверной части на С++ - например, ISO/IEC 14882:2011
  • Использование протокола IMAP4 - rfc1730 + ... много всего для кодировок и прочего
  • Использование разделяемых библиотек при разработке - читаем соглашение о вызовах и компоновке для целевой операционной системы
  • etc...
  • etc...
  • etc...

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

Majestio
  • 5,050