是否有任何托管编程语言可以编译为机器代码?

Luc*_*eis 0 managed-code machine-code

托管语言是为您处理内存清理的语言.

编辑我不是在谈论垃圾收集.我只是想知道那些会free()自动记忆的语言,并且仍然可以编译成机器代码.

Jus*_*tin 9

您似乎混淆了"托管"和"垃圾收集",而通常托管语言(例如C#和Java)具有自动垃圾收集,"托管"实际上指的是有一个"虚拟机"执行您的代码(见http://en.wikipedia.org/wiki/Managed_code).

因此,例如CLR(公共语言运行时)是执行.Net代码的虚拟机,而JVM(Java虚拟机)是执行java代码的虚拟机.

事实上,您可以为非托管语言(例如C++)提供垃圾收集,反之亦然,托管语言没有垃圾收集(编辑:我正在寻找一些,但我似乎找不到任何除非Objective C计数,我是不确定在没有垃圾收集的情况下创建托管语言会有很大的意义)

实际上Java和C#都可以直接编译成机器代码,所以它们直接执行而不是使用虚拟机 - 对于.Net代码,这是使用NGEN完成的(实际上CLR将.Net程序集编译成机器代码)执行它,所谓的"及时"编译)

编辑:作为对您的问题更新的更新,实际上在完全手动内存管理和垃圾收集的极端之间的频谱中有许多垃圾收集的替代方案,并且许多编译为机器代码的语言包含不同的内存管理的形式,不要求你明确释放内存.

我可以问一下 - 这是一个"不感兴趣"的问题,还是你试图为一个项目选择一种语言 - 如果是后者那么为什么你对你的语言编译成机器代码如此感兴趣?当然在.Net的情况下,你的代码JIT编译提供了许多性能优势(在大多数情况下),同样NGENing你的代码不会消除对.Net框架的依赖.


Jav*_*ier 8

地段:

LISP(和变体),Erlang,C#(Mono下),Haskell,Java(带gcj)