Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Как происходит взаимодействие нескольких языков программирования? [закрыт]

#любой_язык


        
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 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... На самом деле, вопрос - очень очень обширный, нюансов тут и не близко не видать. Подход простой, заметили интересующий вас термин, технологию, сразу ищем чем стандартизируется. Далее, в процессе чтения, соберется еще снежный ком ссылок на смежные спецификации и стандарты.

Комментариев нет:

Отправить комментарий