Компилирование нескольких языков вместе - PullRequest
3 голосов
/ 16 декабря 2009

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

Ответы [ 7 ]

6 голосов
/ 16 декабря 2009

Определенно возможно связать их вместе (если они запрограммированы соответствующим образом) после компиляции их отдельно, если компиляторы и компоновщики все совместимы. Например:

g77 -c one.f
gcc -c two.c
gcc -o together one.o two.o

это компилирует файл Fortran, затем файл C, а затем связывает их вместе в один исполняемый файл с именем together (при условии, что они вызывают друг друга правильно ;-) с помощью набора инструментов GCC.

Microsoft .NET - это популярный способ совместного использования нескольких языков - C #, F #, IronPython, IronRuby и так далее. Visual Studio будет обрабатывать компиляции в совместимые коды и объединять их в сборки, но вы также можете делать это «вручную», если хотите.

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

3 голосов
/ 16 декабря 2009

Да, это возможно, но многое зависит от конкретных языков. Например, вызов функций C или классов C ++ из Python выполняется регулярно.

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

Если вы используете .net, вы можете скомпилировать свои проекты на разных языках в сетевые модули и затем связать их в один dll / exe. Visual Studio не поддерживает это, но msbuild поддерживает. Самый простой способ получить компиляцию - отредактировать КОПИЮ вашего файла .csproj, изменить тип вывода на «модуль» и просто запустить msbuild для него. Затем используйте команду "link", чтобы связать ваши модули с вашим последним exe / dll.

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

Другим хорошим примером объединения языков является платформа Java. Вы можете смешивать Groovy, Jython, JRuby, Scala, Clojure и другие языки с Java. Разные языки требуют разных компиляторов, но обычно вы можете звонить с одного языка на другой. Groovy и Scala особенно хорошо подходят для взаимодействия.

Да, и собственный интерфейс Java (JNI) позволяет вам вызывать C, C ++, ассемблер и другие языки из Java.

(Платформа .NET разделяет те же атрибуты, как отмечали другие авторы.)

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

.Net платформа многоязычная. Parrot отлично подходит для смешивания Perl, Python, Ruby. Что ты пытаешься сделать?

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

Действительно трудно справиться с громадинами Алгол-68 в C. Выполнимо, но я не думаю, что хочу делать это каждый день,

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

Взгляните на Swig . Он оборачивает ваш код C/C++, чтобы вы могли вызывать его практически с любого другого языка.

...