Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
将scala转换为本机二进制文件_Scala_Native_Gcj - Fatal编程技术网

将scala转换为本机二进制文件

将scala转换为本机二进制文件,scala,native,gcj,Scala,Native,Gcj,为了提高性能,将scala(或字节码)转换为本机二进制的最佳方法是什么?目前,我看到两种将jvm字节码转换为某种自包含的本机二进制的解决方案: -具有AOT功能的轻量级可嵌入JVM -商用Java本机编译器 两者都应该与Scala兼容 据我所知,scala没有直接的本机编译器。有一些项目像,但更多的是关于研究和概念验证,而不是现成的工具尽管还不是一个完全可用的工具,scala原生项目已经开始变得可用,尽管它仍处于早期阶段,正在积极开发中,到了本月它的功能将变得更加强大。它基于LLVM和cla

为了提高性能,将scala(或字节码)转换为本机二进制的最佳方法是什么?目前,我看到两种将jvm字节码转换为某种自包含的本机二进制的解决方案:

  • -具有AOT功能的轻量级可嵌入JVM
  • -商用Java本机编译器
两者都应该与Scala兼容


据我所知,scala没有直接的本机编译器。有一些项目像,但更多的是关于研究和概念验证,而不是现成的工具

尽管还不是一个完全可用的工具,scala原生项目已经开始变得可用,尽管它仍处于早期阶段,正在积极开发中,到了本月它的功能将变得更加强大。它基于LLVM和clang,并且将把scala源代码编译成二进制文件,如果您所依赖的库是在早期实现的库之一的话。(虽然它在WSL环境中可以工作,但它在Windows或cygwin中还不能工作)

性能是否提高是一个单独的问题,尽管大多数程序可能启动得更快

这里有一个链接到

要创建自己的项目,请执行以下操作:

最大的限制是到目前为止只实现了java和scala标准库的一个子集,因此您需要将自己限制在当前可用的范围内,并且不是每个项目都只有在您将自己限制在100%scala的情况下才可行。此外,文件编制工作正在进行中

作为一个测试,我创建了一个用于处理文本文件的命令行工具,我最终能够让它工作起来,尽管我确实花了一些时间研究如何完成各种事情,主要是如何使用可用的库。如果需要,您还可以链接到C/C++库,尽管我的小项目不需要这样做

截至2019年6月的脚注:我对graalvm native image运气不错。以下是链接:


Gcj似乎已经死了。显然,只有一个是最新的。上一次我尝试了
gcj
,它没有任何回退。这是很久以前的事了,比如2010年,我想我在java1.7代码中使用了它。要评论内容(毫无疑问?)删除了答案:在这方面正在取得一些进展。字节码到本机的转换是为了提高性能,关于以上两种解决方案的性能有什么想法吗?我还没有任何基准测试,但我认为这些解决方案与Oracle JDK相比只能减少启动时间,但运行代码不会获得任何显著的性能提升。这些解决方案甚至可能比预热Oracle Hotspot还要慢。如果scala/java存在性能问题,请使用探查器查找根本原因。编译到本机代码不会“神奇地”提高性能。新的64位Excelsior JET编译器的一部分是用Scala编写的,并且是本机编译的,因此兼容性已经到位。就性能而言,没有任何基准测试会告诉您,如果您切换到另一种Java实现,您的特定代码是更快还是更慢。最近,Scala Native发布了,但它要稳定下来还需要很长时间:他们的网站称Excelsior JET已经停产。