Сборка нескольких языков вместе, чтобы они работали на разных платформах - PullRequest
0 голосов
/ 17 декабря 2009

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

Ответы [ 4 ]

2 голосов
/ 20 декабря 2009

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

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

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

1 голос
/ 17 декабря 2009

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

0 голосов
/ 14 апреля 2011

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

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

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

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

0 голосов
/ 20 декабря 2009

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

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

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

Жирные файлы

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

...