Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为JVM实现C#_C#_Java_Clr_Jvm - Fatal编程技术网

为JVM实现C#

为JVM实现C#,c#,java,clr,jvm,C#,Java,Clr,Jvm,有人试图为JVM实现C#吗?作为一名Java开发人员,我一直羡慕C#,但我不愿意放弃JVM的可移植性和成熟度,更不用说它的各种工具了 我知道JVM和CLR之间有一些重要的区别,但是是否有什么可以说明问题呢 看看。它是一个基于Visual Studio的SDK和获得专利的.NET-to-Java转换器,使您能够在Linux®和其他支持Java的平台上运行.NET Web和服务器应用程序。CLR和JVM之间存在非常显著的差异 举几个例子: Java没有用户定义的值类型 Java泛型与.NET泛型完

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


我知道JVM和CLR之间有一些重要的区别,但是是否有什么可以说明问题呢

看看。它是一个基于Visual Studio的SDK和获得专利的.NET-to-Java转换器,使您能够在Linux®和其他支持Java的平台上运行.NET Web和服务器应用程序。

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

举几个例子:

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


走另一条路,你知道吗?它允许您在.NET中运行Java代码。

编写从IL到字节码的转换器可能更简单。这样,您就可以在JVM上自动获得对任何.NET语言的支持

然而,这是一个非常明显的想法,如果还没有做到这一点,可能会非常困难,或者很难做好/有效地完成。请访问

下面的代码是JVM的Stab语言代码

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);
        }
    }
}

C#中跨平台开发的一个选项可以是mono:

字节码传输程序 可以获取CLR字节码并将其传输到JVM。它主要用于web应用程序,不提供Windows窗体类的JVM实现。但似乎有些过时了。web讨论了ASP.NET2.0、VisualStudio2008等。首先由@alex提到

可以将CLR或JVM字节码作为输入,并将其作为输出。此外,它还可以输出Javascript或Objective-C。目前还没有发布,只有Subversion。“不在生产环境中使用的实验开发版本。”

与OP想要的方向相反。它提供了一个在CLR上运行的JVM实现、一个JVM到CLR字节码的transpiler和一个用于Java的CLR库方法存根生成器。由@Jon Skeet提及

RPC 为什么不让CLR和JVM同时运行,使通信尽可能无摩擦?这并不是OP想要的,但是其他一些答案在不同的方面已经偏离主题了,所以让我们来讨论一下

,有一个免费选项,它是一个用Erlang编写的RPC服务器,带有用于C#、Java等的API库

,许可证对某些潜在用户来说可能过于昂贵

,以及类似的现代RPC库提供了广泛的语言支持、用这些语言为客户端库生成代码、数据的独立于语言的有线格式、级联调用取消等高级功能

程序设计语言 写一次,到处跑;)

,编译为C#/CLR、Java/JVM、Javascript、Flash、Python等,为每种目标语言提供互操作机制。在某种程度上可以被认为是ActionScript3的继承者。看起来很可靠,至少有一家公司真的依赖它。比Stab更值得信赖,下面提到

带来了一些C#特性和Java互操作性。不是很有用,您可以获得一些C#特性,但您与之交互的是不使用它们的Java代码。这种语言相对晦涩难懂,可能被抛弃,几乎没有希望变得更好。这里首先提到的是@Vns

JVM平台的一阵风新鲜空气;)

还有一些是运行在JVM之上的相当不错的语言,这些语言带来了C#程序员在Java中可能会错过的特性。尤其是在JVM世界中,Kotlin感觉像是C#的合理替代品。Scala对于程序员来说可能有点太大了,在短时间内难以适应

单声道 这当然也是一种选择。如果Mono可以按原样运行,为什么要传输到JVM。首先由@ferhrosa提到

纽约-2014年11月12日周三,微软公司通过开源完整的服务器端.NET堆栈和扩展.NET以在Linux和Mac OS平台上运行,加强了其对跨平台开发者体验的承诺

根据报价来源,VisualStudio2015将添加Linux/Mono作为受支持的平台

这是一个由Mono项目人员撰写的博客,来自另一边:(2014年11月)

.NET核心 由Microsoft管理的(部分).Net)的Windows/Linux多平台版本努夫说

结论 现在有必要尝试一下这些工具/框架,看看有多少摩擦。OP希望用C语言为JVM编写代码,使用Grasshopper实际上可以很好地工作

这样做的目的是在一个代码库中混合使用C#和Java世界库,但效果可能不太好

来源


这个答案对你来说可能太晚了,但这只是一个新答案。您可能希望签出编程语言。它提供了C#所具有的语法优势,也是最接近C#语法的,而不是任何非Java JVM语言。这是因为。

我可以看出这没有得到多少热情的两个原因