Compiler construction 同时编译多种语言

Compiler construction 同时编译多种语言,compiler-construction,compilation,multiple-languages,Compiler Construction,Compilation,Multiple Languages,为了充分利用不同的语言,是否可以同时编译多种语言。是的,这是可能的,但很大程度上取决于特定的语言。例如,从Python调用C函数或C++类是常规的。 编译后,如果编译器和链接器都兼容,则可以将它们链接在一起(如果适当编程)。例如: g77 -c one.f gcc -c two.c gcc -o together one.o two.o 这将编译一个Fortran文件,然后是一个C文件,然后使用GCC工具套件将它们链接到一个名为的可执行文件中(假设它们正确地相互调用;-) 微软的.NET是一种

为了充分利用不同的语言,是否可以同时编译多种语言。

是的,这是可能的,但很大程度上取决于特定的语言。例如,从Python调用C函数或C++类是常规的。

编译后,如果编译器和链接器都兼容,则可以将它们链接在一起(如果适当编程)。例如:

g77 -c one.f
gcc -c two.c
gcc -o together one.o two.o
这将编译一个Fortran文件,然后是一个C文件,然后使用GCC工具套件将它们链接到一个名为
的可执行文件中(假设它们正确地相互调用;-)

微软的.NET是一种将多种语言结合使用的流行方式——C#、F#、IronPython、IronRuby等等。VisualStudio将把编译处理成兼容的代码,并在程序集中连接在一起,但如果您愿意,也可以“手工”完成


如果“一起编译”是指在同一个文件中有多种不同的语言,这也是可能的,但更为罕见——例如,一些C编译器有扩展名,可以让您在同一个文件中表达“内联”汇编语言。

在C中很难清晰地处理Algol-68 thunks,但我想我不会每天都这么做,

.Net平台是多语言的。Parrot非常适合混合Perl、Python和Ruby。您想做什么?

另一个结合语言的好例子是Java平台。您可以将Groovy、Jython、JRuby、Scala、Clojure和其他语言与Java混合使用。不同的语言需要不同的编译器,但通常可以从一种语言调用另一种语言。Groovy和Scala特别适合于互操作

.java,原生接口(jnI)允许C++调用C、C++、汇编和其他语言。
(正如其他海报所指出的那样,.NET平台具有这些相同的属性。)

看看。它包装您的
C/C++
代码,以便您可以从几乎任何其他语言调用它

如果您使用的是.net,您可以将不同语言的项目编译到NetModule,然后将它们链接到单个dll/exe中。Visual Studio不支持此功能,但msbuild支持。获取编译的最简单方法是编辑.csproj文件的副本,将输出类型更改为“module”,然后对其运行msbuild。然后使用“link”命令将模块链接到最终的exe/dll。

为什么交叉编译一个标记?不是批评,只是想知道?真的。。我们可以创建组合语言/编译器吗?也许将来这是可能的。。因为所有语言都会创建一个独立于语言的机器代码。。是什么阻止我们创建这样的东西呢?通常是代码的复杂性,因为您必须在一个编译器中编写两个编译器,再加上一些额外的代码才能使其正常工作。但如何使其独立于语言呢。我知道.NET允许通过IL实现语言互操作性,但为什么我们不能将可以本地编译的不同语言组合起来呢。Alex Martelli给出的解决方案之一是将它们分离到不同的文件中并分别编译,但是否可以创建一个编译器,利用所有编译器编译同一文件中的不同语言源代码xinus:编写一个理解多种语言混合在一起的编译器当然是可能的,如果您能够解决互操作性模糊和其他问题。但是,要为一种语言编写一个出色的编译器来完成所有您想做的事情已经够难了,更不用说解决这些额外的问题了。再加上语言设计师总是借用他们认为有用的特点,从其他语言,几乎可以总是把他们的语言比它更容易尝试支持整个许多不同的语言。Algol68具有数组/字符串/矩阵切片。。。这将需要Algol68运行时的C-API。其他考虑因素包括嵌套函数、格式类型和线程。对于大多数代码来说,这些可能只是旁敲侧击。