#любой_язык
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются. Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он был сосредоточен только на одной проблеме, отредактировав его. Закрыт 3 года назад. Понятно, что большинство (если не все) крупные энтерпрайз сервисы, приложения и тд. (не только веб) написаны с использованием не одного языка программирования, а нескольких. И эти составные части, написанные на разных языках, как-то взаимодействуют между собой (фронт, бизнес-логика, еще что-то). Опыта разработки подобных систем у меня нет, поэтому не совсем могу представить, как это происходит. Подозреваю, что взаимодействие идет через независимые от языков средства. Например, нечто написанное на одном языке, шлет через TCP-IP пакет, который ловится и обрабатывается чем-то написанным на другом языке. Либо через HTTP запросы. Либо через запись/чтение из БД. Либо через файловый обмен, XML например. Хотелось бы, чтобы знающие люди привели пару примеров, как это обычно происходит. Не просто в двух словах, мол "фронт на яваскрипте, бэк на яве", а с техническими нюансами. Заранее спасибо.
Ответы
Ответ 1
Несколько языков могут сосуществовать как в рамках одного процесса, так и в рамках нескольких. Проще всего сосуществовать в рамках нескольких процессов: если процессы обмениваются данными, то совершенно всё равно (ну, в известных рамках), на каком языке эти данные были созданы, и какой язык их читает. Например, вы можете генерировать данные в виде 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, перегнать в данные в формате, ожидаемом нативным кодом.)Ответ 2
Если вам нужны именно технические нюансы, то смотрите соглашение о вызове (calling convention). Именно эти соглашения позволяют разным языкам вызывать функции из библиотек, написанных на других языках.Ответ 3
а с техническими нюансами Технические нюансы определяются отдельными стандартами, спецификациями, API, соглашениями. В процессе разработки сложных систем - их может набраться несколько десятков, а порой и сотен. Простой пример "Создание почтового сервера" Использование языка запросов SQL - куча документов ISO/IEC 9075* Кодирование серверной части на С++ - например, ISO/IEC 14882:2011 Использование протокола IMAP4 - rfc1730 + ... много всего для кодировок и прочего Использование разделяемых библиотек при разработке - читаем соглашение о вызовах и компоновке для целевой операционной системы etc... etc... etc... На самом деле, вопрос - очень очень обширный, нюансов тут и не близко не видать. Подход простой, заметили интересующий вас термин, технологию, сразу ищем чем стандартизируется. Далее, в процессе чтения, соберется еще снежный ком ссылок на смежные спецификации и стандарты.
Комментариев нет:
Отправить комментарий