为 JVM 实现 C#

2022-08-31 10:32:27

是否有人尝试为 JVM 实现 C#?作为一名Java开发人员,我一直羡慕C#,但我不愿意放弃JVM的可移植性和成熟度,更不用说它的各种工具了。

我知道JVM和CLR之间有一些重要的区别,但是有什么东西是一个障碍吗?


答案 1

CLR 和 JVM 之间存在非常显著的差异。

举几个例子:

  • Java 没有用户定义的值类型
  • Java 泛型与 .NET 泛型完全不同
  • C#的许多方面都依赖于框架的元素 - 委托等。您还需要移植库,即使是语言方面也是如此。
  • Java不支持JVM级别的属性和事件之类的东西。你可以伪造一些,但它不会是一样的。
  • 我不相信Java有任何等同于通过引用传递的参数,即使在JVM级别也是如此。
  • 与不同的内存模型有关的微妙之处很可能会受到影响,尽管我不确定C#规范中有多少。
  • 一般来说,不安全的代码在Java中可能是不可能的
  • JNI 和 P/Invoke 与本机代码的互操作性非常不同。这对你来说可能不是什么大问题。
  • 您必须伪造运算符重载和用户定义的转换

你可能会移植很多C#——但你会有一个非常不令人满意的体验,IMO。

反过来说,你知道IKVM吗?它允许您在.NET中运行Java代码。


答案 2

访问 http://code.google.com/p/stab-language

下面的代码,如果一个 Stab 语言代码为 JVM

using java.lang;
using stab.query;
public class Test {
   public static void main(String[] args) {
   // Sorts the arguments starting with "-" by length and then using the default   
        // string comparison
        var query = from s in Query.asIterable(args)
                    where s.startsWith("-")
                    orderby s.length(), s
                    select s;
        foreach (var s in query) {
            System.out.println(s);
        }
    }
}

推荐