Подтвердить что ты не робот

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

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

Я имею в виду, что нет Java-метода, такого как

myProgram.callCfunction(parameters);

никогда не бывает, или я ошибаюсь?

4b9b3361

Ответ 1

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

В простом случае разные языки скомпилированы в один и тот же код. Например, код C и С++ обычно компилируется в машинный ассемблер или С#, а VB.Net скомпилирован в IL (язык, понятный средой выполнения .NET).

Сложнее, если языки/компиляторы используют систему различного типа. Могут быть много разных способов, основные типы данных, такие как integer, float и double, представлены внутри, и есть еще больше способов представления строк. При передаче типов между разными языками он должен быть уверен, что обе стороны интерпретируют тип один и тот же или, если нет, типы правильно отображаются. Такое сопоставление типов также известно как marshalling.

Классические примеры совместимости между различными языками программы (в основном из мира Windows):

  • Различные языки, доступные для .NET platfrom. Это включает в себя С#, VB.Net, J #, IronRuby, F #, XSLT и многие другие менее популярные языки.
  • Собственные COM-компоненты, написанные на С++ или VB, могут использоваться с огромным разнообразием языков: VBScript, VB, все языки .NET, Java
  • Функции Win32 api можно вызывать из .NET или VB
  • IPC (связь между процессами)
  • Corba, возможно, наиболее полный (и наиболее сложный) подход
  • Веб-сервисы и другие сервисно-ориентированные архитектуры, возможно, самый современный подход

Ответ 2

Как правило, любой веб-проект с приличным размером будет использовать около пяти языков: HTML, CSS, Javascript, какой-то серверный язык "делающий вещи" (ASP, JSP, скрипты CGI с Perl, PHP и т.д.), и некоторый вариант подключения SQL для базы данных.

(Это, разумеется, размахивает аргументом о том, считаются ли HTML и CSS как языки программирования - Im, они являются, а не языковыми языками, а не только Turing-complete languages, но это целая другая нить.)

Некоторые примеры того, как все они работают вместе:

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

Принимая все это на шаг, любые скрипты javascript на этой странице могут изменять любой из HTML/CSS, который присутствует (изменять содержимое объектов HTML, заменять один класс CSS для другого, изменять поведение CSS и и т.д.) Это делается с помощью так называемой Document Object Model, которая по существу является языком и независимым от платформы API для манипулирования HTML-страницами в виде объекта (в этот момент Ill отходит медленно и просто предоставляет ссылку на соответствующая статья wiki.)

Но тогда, откуда все HTML/CSS/Javascript? Это то, что делает серверный язык. В простейшей форме язык на стороне Serer - это программа, которая возвращает гигантскую строку, содержащую HTML-страницу в качестве вывода. Это, очевидно, может быть намного сложнее: HTML-формы и параметры строки запроса могут использоваться как входные данные для нашей серверной программы, а затем у вас есть вся AJAX, где javascript получает возможность отправлять данные непосредственно на язык сервера. Вы также можете получить фантазию, когда язык сервера может настроить HTML, CSS и Javascript, которые выплевываются - по существу, у вас есть программа на одном языке, пишущая программу на другом языке.

Соединение на стороне сервера для SQL работает одинаково. Существует множество способов сделать его более сложным и безопасным, но самым простым способом является то, что ваш серверный язык динамически строит строку с помощью команды SQL, передавая ее в базу данных через какой-то коннектор и возвращаясь обратно набор результатов. (Это случай, когда у вас действительно есть функция, сводящаяся к someValue = database.executeThisSQLCommand(SQLString).)

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

Ответ 3

Несколько используемых языков называются "интероперабельность" или "interop" для краткости.

Ваш пример неверен. Java может вызывать функции C.

Язык обеспечивает механизм взаимодействия.

В случае .NET языки скомпилированы в IL как часть CLI. Таким образом, любой язык .NET может взаимодействовать (вызывать методы, определенные модулями), определенные на любом другом языке .NET.

В качестве примера:

Я могу определить метод в С#

static void Hello(){ Console.WriteLine("Hello World");}

И я могу назвать это из Python (IronPython)

 Hello()

И получите ожидаемый результат.

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

Ответ 4

Несколько языков могут взаимодействовать с:

  • Ввод/вывод труб (любой язык может это сделать потому что вход и выход по необходимости должны быть реализованы в каждой не игрушке язык)
  • Наличие кода на одном языке для компиляции в родную библиотеку в то время как другой поддерживает вызов собственного кода.
  • Общение по сетевому соединению с петлей. Ты можешь таким образом, возникают проблемы с помехами межсетевого экрана.
  • Базы данных. Их можно рассматривать как "универсальные" данные формат хранения и, следовательно, доступ к ним может быть предоставлен большинством языков с расширениями базы данных. Это в целом требует, чтобы одна программа завершила работу до следующей программы может получить доступ к базе данных. Кроме того, все "коммуникации" обычно записывается на диск.
  • Если задействованные языки выполняются в одной и той же среде выполнения (т.е..NET, JVM), то вы, как правило, можете передавать данные объекта с одного языка непосредственно к другому с небольшим сопротивлением.

Почти в каждом случае вам нужно преобразовать любое сообщение в общую перед тем, как его можно обменять (исключением являются языки на то же время выполнения). Вот почему несколько языков редко используются в одном проект.

Ответ 5

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

Ответ 6

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

  • Использование разных языков для создания одного приложения. Например, используя Java для создания графического интерфейса и использования JNI для доступа к C API (поэтому, отвечая на ваш вопрос, вы можете вызывать функции C из Java;))
  • Использование разных языков в одном проекте, но они не являются частью одного и того же приложения. Например. В настоящее время я работаю над приложением iphone, которое использует большой объем текста. В настоящее время я использую три языка Python (для работы с исходными источниками текста), SQL (для вывода результатов приложения python в формате, легко доступном из iphone sqlite3 api) и Objectiv C для создания реального приложения. Хотя конечный продукт будет только Objective C, я использовал два других языка, чтобы добраться до конечного продукта.

Ответ 7

Существуют различные способы использования нескольких языков в одном проекте. Некоторые примеры:

  • Вы можете написать DLL, скажем, C, а затем использовать эту библиотеку, например, из программы VB.
  • Вы можете написать серверную программу, например, С++, и иметь множество разных языковых реализаций клиента.
  • Веб-проект часто использует множество языков; например, серверная программа, написанная, скажем, Java (язык программирования), которая извлекает данные из базы данных с использованием SQL (языка запросов), отправляет результат браузеру в HTML (язык разметки), который пользователь может взаимодействовать с использованием Javascript (скриптовый язык)...

Ответ 8

Я работаю над крупным проектом предприятия, состоящим из (на последнем счете) около 8 языков. Большая часть сообщения осуществляется через шину сообщений уровня предприятия, которая содержит привязки для нескольких языков для ввода и передачи данных взад и вперед. Он назывался tibco.

Ответ 9

Это зависит от типа проекта. Если вы хотите поэкспериментировать, вы можете настроить веб-проект в .NET и изменить язык на странице за страницей. Это не работает, поскольку вы показываете в своем псевдокоде, но это несколько языков. Конечно, фактический каталог кода должен быть одним языком.

Ответ 10

Существует несколько способов, которыми код на языках может взаимодействовать напрямую. Пока данные, передаваемые между кодом, находятся в правильном формате, на уровне бит и байтов, тогда нет причин, по которым разные языки не могут взаимодействовать. Этот подход используется в традиционной разработке DLL Windows. Даже на разных платформах, если вы можете получить формат правильно (посмотрите на большой/маленький endian, если он заинтересован), он будет работать до тех пор, пока ваш компоновщик (а не компилятор) знает, как объединить код вместе.

Помимо этого существует множество других способов, которыми языки могут разговаривать друг с другом. В мире .Net код мира скомпилирован до кода IL, что одинаково для каждого языка, таким образом, С#, VB.Net все равно находятся под капотом и могут беспрепятственно звонить/работать друг с другом.

Ответ 11

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

Ответ 12

Просто чтобы добавить к списку примеров, довольно распространено оптимизировать код Python на C или С++ или написать библиотеку C для связывания другой библиотеки с Python.