C#能否被编译成Java字节码?

软件工程师、主攻高级编程语言虚拟机的设计与实现

268 👍 / 25 💬

问题描述

如题。假如不能,有哪些关于Java字节码规范的阻碍了这种实现的原因?

能啊。作为图灵完备的语言,Java字节码有啥不能描述的?不能就模拟呗。

Java连x86都可以模拟(参考

JPC

),区区C#不在话下。

请看Grasshopper,这是一个把MSIL编译到Java字节码,并提供.NET类库对应在Java平台上的实现,而且还做了很棒的Visual Studio整合的神奇的东西。

它由Mainsoft开发,可惜Mainsoft现在已经挂了所以官网看不到了,用另外几个链接解馋吧:

Wikipedia词条:

Grasshopper (software)

The Server Side新闻稿:

Grasshopper 2.5 released

InfoQ新闻稿:

Mainsoft: Running .NET on the JVM While Maintaining Performance

当然,既然都扯到“模拟”(emulate)了,C#的需求跟JVM所提供的功能肯定还是有不直接匹配的地方。这方面话题请参考我在

SDCC 2012

做的一个演讲:

JVM: A Platform For Multiple Languages

话说俺以前在同样的话题里跟老赵谈笑风生的时候也提到过Grasshopper。请跳这俩传送门:

RednaxelaFX 2010-02-23 09:38:00
...
不过有没有人会愿意用一种80%样子和功能跟Java一样、但速度慢10x的JVM语言就不好说了orz

===========================================

简单的几个例子:

===========================================

能直接在JVM上跑、样子长得像C#的,还有这么个语言:

Stab Language

。题主有兴趣参考不?