0

Я хотел бы начать с СПАСИБО всем тем, кто ответил на мой предыдущий вопрос, на Compiling multiple languages together. Теперь я хочу знать, возможно ли скомпилировать несколько языков, чтобы они работали на разных платформах.Компиляция нескольких языков вместе для их запуска на разных платформах

ответ

1

Я думаю, что если вы компилируете один или несколько языков, ответ на то, будет ли ваш скомпилированный код работать на разных платформах, зависит от существования виртуальной машины, такой как JVM (виртуальная машина Java) или CLR (Common Language Runtime), которые могут интерпретировать инструкции и выполнять их на разных платформах. Поскольку различные архитектуры машин поддерживают разные наборы инструкций (здесь набор инструкций относится к сборке), невозможно компилировать свой код на машинный язык таким образом, чтобы он работал на разных платформах. Как указано в ответе на ваш последний вопрос, несколько языков будут скомпилированы для байт-кода Java (например), которые могут быть связаны друг с другом и запускаться на любой машине с JVM. Поскольку существуют реализации JVM для разных архитектур машин, ваш байт-код Java может работать на любой из этих архитектур.

2

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

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

Apple попробовала это с «живыми бинарниками», в те дни, когда PowerPC Macs и 68K Macs должны были мирно сосуществовать. Это сработало, но это был не совсем воющий успех.

0

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

Виртуальная машина

Scala и Java как компилировать в JVM, которая работает на многих платформах. Другим примером является .NET, который включает в себя множество языков и может быть запущен в Windows или Linux через Mono Project.

Жир бинарники

Некоторые форматы файлов fat binaries, которые работают на нескольких платформах. Apple дважды использовала их для передачи между аппаратными реализациями.

0

Есть еще один подход, о котором я слышал совсем недавно.

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

MacOberon использовал этот подход для одновременной установки аппаратуры 680x0 и PowerPC MAC. Они называли «тонкие двоичные файлы». Точно такой же «бинарный» был распределен либо с использованием вкуса машины, и задний конец по существу заканчивал компиляцию, генерируя соответствующий код.

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