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

Обновлено: 03.07.2024

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

Языки программирования работают вместе, компилируясь или интерпретируясь. По сути, это означает использование какого-либо элемента для преобразования одного языка в другой или обеспечения его понимания другим языком. Обратите внимание, что только определенные языки обычно работают вместе. Языки низкого уровня работают вместе, а языки прикладного уровня могут работать вместе.

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

несколько языков программирования, работающих вместе

Не каждый язык программирования лучше всего подходит для того, что вам нужно создать (хотя это все же возможно, просто это занимает больше времени). Поэтому принято использовать разные языки программирования. Например, у вас есть скрипт Python, затем веб-сайт с JavaScript во внешнем интерфейсе и JAVA или PHP для серверной части и для связи с базой данных. Поэтому для совместной работы языков необходима компиляция.

Как языки программирования работают вместе?

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

Понимание языков программирования

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

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

После этого у вас есть так называемые языки ассемблера. Обычно это простая оболочка, помещаемая поверх двоичного кода для преобразования базового языка в машинный код. Примером этого может быть вместо написания двоичного кода; вы бы написали ДОБАВИТЬ R0, R3, R5.

Еще выше вы получаете языки программирования системного уровня. Этот тип языка используется для программирования самого компьютера, например, операционной системы его драйверов устройств. Примеры таких языков программирования включают C и C++.

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

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

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

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

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

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

При работе с разными языками важно отметить, что эти типы данных должны быть одинаковыми от языка к языку, а если это не так, то, по крайней мере, они должны быть правильно сопоставлены, и этот тип сопоставления данных известен. как сортировка.

Еще один простой для понимания пример языков программирования, которые могут взаимодействовать друг с другом, — это HTML, PHP и CSS, которые работают вместе для отображения веб-страниц.

Другие элементы, которые позволяют языкам программирования работать вместе

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

Разбирая это, мы должны понимать, что пользователь или система должны иметь возможность обмениваться данными с платформой или другими системами через внутреннюю память или через Интернет. Хранилище будет содержать исполняемый код и метод просеивания информации, а интерфейс будет своего рода аппаратным обеспечением, которое может быть посредником между пользователем, системой и самими языками.

Давайте воспользуемся нашим примером веб-сайтов, отображаемых с использованием HTML, PHP и CSS. Веб-сайт, написанный на PHP, будет использовать какую-либо базу данных, такую ​​как MySQL или Oracle, для хранения, извлечения и архивирования данных. Язык внутреннего программирования (PHP) позволит отображать веб-сайт в формате HTML, позволяя браузерам отображать его, а CSS детализирует, как должен выглядеть веб-сайт. Другой язык программирования, такой как Java, также может быть реализован, создавая своего рода интерактивность.

Несмотря на то, что эти элементы не предназначены для совместной работы языков, таких как компилятор или интерпретатор, они все же необходимы; в противном случае языки не смогут взаимодействовать друг с другом, так что на самом деле это еще один способ совместной работы языков программирования.

Заключение

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

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

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

Примеры совместной работы языков можно увидеть, просматривая веб-сайт или запуская приложение на своем телефоне. Нередко в одном проекте используется несколько языков, и веб-сайт является отличным примером использования PHP, HTML, JavaScript и CSS в одном. Все эти языки необходимы и работают слаженно, чтобы создавать веб-сайты, которые вы просматриваете. Обратите внимание, что это пример, и можно использовать другие языки, а не только эти.

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

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

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

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

12 ответов 12

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

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

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

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

(Это, конечно, отмахивание рукой от аргумента о том, считаются ли HTML и CSS языками программирования — я сторонник «они есть, но не полные по Тьюрингу языки», но другой поток.)

Несколько примеров того, как все это работает вместе:

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

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

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

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

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

Предположим, вы хотите разработать приложение и хотите, чтобы один сеанс кода был на Java, а другой на C. Как вы это сделаете?

Получите помощь в своем исследовании

Присоединяйтесь к ResearchGate, чтобы задавать вопросы, получать отзывы и продвигать свою работу.

Последний ответ


< /p>

Проще всего использовать стандартный ввод/вывод и JSON для параметров. Это не рекомендуется для больших параметров, таких как большие векторы и матрицы.

Все ответы (19)



< /p>

Для этого должны быть веские причины. Часто не сочетаются два языка, такие как java и C. В основном выбирается язык сценариев (например, Python) для тех частей, которые не имеют отношения к производительности, и тот, в котором критически важные для производительности части находятся на C/C++.


Общая проблема заключается в том, что процедура компиляции сильно отличается для C и JVM, поэтому вы не можете использовать их одновременно.

Если вы скомпилировали код C (.dll в Windows или .so в Linux), вы всегда можете использовать JNI или JNA для вызова скомпилированного кода C.

Другой способ — вызвать JVM из кода C так же, как вы вызываете любые консольные команды. Это хлопотный и не безопасный способ, и если есть выбор, я бы не рекомендовал его.


< /p>

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


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


Существует множество ситуаций, когда использование нескольких языков является оптимальным решением для интегрированного программного решения (см. ниже). ЧРЕЗВЫЧАЙНО важно иметь четкий автоматизированный процесс сборки, чтобы гарантировать, что все языковые компоненты находятся в надлежащей редакции, прежде чем объединять их все вместе. Без этого у проекта будет несколько ятрогенных провалов.

Простой пример. Существует код, который взаимодействует с нестандартным аппаратным устройством (например, новым типом USB или планшетом для рисования). Драйвер устройства должен быть написан на скомпилированном языке, таком как C или C++. Пользовательский интерфейс, управляющий устройством, вполне может быть написан на Java. Это позволяет выполнять проект двум небольшим командам с независимыми спецификациями вместо более крупной команды, требующей дополнительных знаний (например, устройств и пользовательского интерфейса).

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

Пример из реальной жизни. В настоящее время я работаю в компании, где мы взаимодействуем с микроинверторами: устройствами, преобразующими фотоэлектрическую энергию постоянного тока в переменный ток. Они работают на прошивке и взаимодействуют с контроллером, который служит мини-веб-сервером. Лучше осуществлять прямую связь с использованием компиляторного языка, такого как C или C++, чем на чем-либо «более высокого уровня», поскольку мы имеем дело с связью в реальном времени, а возможная задержка, связанная с Java, PHP или python, может вызвать ненужное состояние тайм-аута в системе. Последние языки, однако, используются чаще и не требуют компиляции и связывания каждого изменения, а также относительно гибкая типизация переменных делают их лучшим выбором для общего программирования, особенно в решении SaaS.

значки различных языков программирования

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

Это была забавная демонстрация того, как много вариантов существует сегодня в сложном мире языков программирования. Но по крайней мере для одного из языков это также превратилось в демонстрацию силы сообщества.

Большое событие произошло на code_report, канале YouTube, посвященном спортивному программированию. Это работа Конора Хекстры, старшего инженера по библиотечному программному обеспечению в NVIDIA (работающего над пакетом RAPIDS для конвейеров обработки данных и аналитики), который также занимал должности в Amazon и Moody’s Analytics. Хекстра также ведет подкаст о языках программирования, ориентированных на массивы, и еще один подкаст о темах, связанных с программированием, таких как алгоритмы и структуры данных.

Но для этого канала YouTube он просматривает решения с конкурсов по программированию, таких как LeetCode, HackerRank, Topcoder и Codeforces, а также создает видеоролики о связанных темах программирования, таких как структуры данных, алгоритмы и сложность (которые, вероятно, пригодятся на этих соревнованиях). ).

У Фортрана есть поклонники

Чтобы изучить 16 языков программирования, Хекстра выбрал относительно простую задачу из конкурса программирования LeetCode: по заданному списку чисел определите наименьшее и наибольшее число, а затем найдите наибольшее число, которое можно разделить на оба из них (без остаток).

Языки, выбранные для решения:

  • С++
  • Ржавчина
  • Д
  • Кложур
  • Рубин
  • Эликсир
  • Раку [Perl 6]
  • Хаскелл
  • Рэкет
  • Юлия
  • Питон
  • АПЛ
  • J
  • БКН
  • Pharo Smalltalk
  • Фортран

(В видео поясняется, что последние два языка были добавлены онлайн-аудиторией Хекстры в последнюю минуту. «Я опубликовал это в Твиттере и спросил своих подписчиков», — сказал Хекстра, и Fortran получил «колоссальные 27 «сердец» на одном сингле. твит!")

Не могу не заметить, что этот ответ получил наибольшее количество лайков. По законам Интернета вы должны включить Fortran. 😋

— Джефф Хаммонд асуу нит Суомесса 🇫🇮 (@science_dot) 25 августа 2021 г.

Существенные различия

Хекстра назвал это "довольно простой проблемой, но вы скоро увидите, особенно когда мы перейдем к языкам массивов, что вы можете решать их совершенно иначе, чем в таких языках, как Python или Ruby".

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

Решение Python GCD для проблемы LeetCode от Code_Report на YouTube (скриншот из видео)

Но все действительно стало выглядеть по-другому, когда Хекстра добрался до функционального языка Haskell. Его функция liftM2 в основном отображает значения из минимума и максимума во входные данные для функции gcd — все в одна строка.

И самое главное, поскольку Haskell использовал так называемый неявный или бесточечный стиль программирования, который не указывает аргументы в определениях своих функций, решение Haskell даже не нуждалось в упоминании массива чисел…

Решение Haskell GCD для проблемы LeetCode от Code_Report на YouTube (скриншот из видео)

Низкоуровневый язык программирования D требует, чтобы функции были импортированы, но, по крайней мере, этот язык использует универсальный синтаксис функционального вызова, который позволяет вызывать функции, используя привычный стиль объектно-ориентированного программирования "метод". Хозяин сказал: "На мой взгляд, это очень, очень мило".

Решение GCD языка программирования D для проблемы LeetCode от Code_Report на YouTube (скриншот из видео)

Хокстра пожаловался, что в Rust, как и в C++, «здесь много церемоний» — в данном случае потому, что функции min и max требуют как iter() для фактического перебора каждого значения в списке чисел, а также метод unwrap() для извлечения только значения из более сложного перечисляемого Result< Rust /em> тип (который включает информацию об обработке ошибок).

Кроме того, Хекстра отметил: «Кроме того, в пространстве имен num::integer:: много шума, чтобы получить доступ к функции gcd. Но в остальном это очень хорошее решение».

Решение GCD языка программирования Rust для проблемы LeetCode от Code_Report на YouTube (скриншот из видео)

Но были и более существенные различия, в основном потому, что Хекстра является поклонником языков программирования массивов. Суть решения APL (справа от розовой стрелки) состоит всего из пяти символов. (Первые два символа находят максимальное значение, последние два символа находят минимальное значение, а зеленый v в середине находит их наибольший общий делитель.)

Решение GCD языка программирования APL для проблемы LeetCode от Code_Report на YouTube (скриншот из видео)

Похожая структура есть в языке программирования J – это также язык программирования массивов – но "J – это усовершенствованная версия APL, в которой используются диаграммы ASCII, а не символы Unicode", – отмечает Хекстра. Таким образом, функция нахождения максимума представлена ​​​​символом >. а функция поиска минимума

Читайте также: