为JVM实现C#
有人试图为JVM实现C#吗?作为一名Java开发人员,我一直羡慕C#,但我不愿意放弃JVM的可移植性和成熟度,更不用说它的各种工具了为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和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与本机代码的互操作性非常不同。这对你来说可能不是什么大问题
- 您必须伪造运算符重载和用户定义的转换
走另一条路,你知道吗?它允许您在.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语言。这是因为。我可以看出这没有得到多少热情的两个原因