将scala(或字节码)转换为本机二进制文件以提高性能的最佳方法是什么
2 回答
目前,我看到了两种将 jvm 字节码转换为自包含本机二进制文件的解决方案:
- Avian - 具有 AOT 功能的轻量级可嵌入 JVM
- Excelsior JET - 商业 Java 原生编译器
两者都应该与 Scala 兼容。
据我所知,scala 没有直接的本地编译器。有一些像Scala LLVM这样的项目,但它们更多的是关于研究和概念证明,而不是准备使用的工具
虽然还不是一个功能齐全的工具,但 scala-native 项目开始变得可用,虽然它仍处于早期阶段,但它正在积极开发中,并且每个月都会变得更加强大。它基于 LLVM 和 clang,如果您所依赖的库属于早期实现的库,它会将您的 scala 源代码编译为二进制文件。(它还不能在 Windows 或 cygwin 中工作,尽管它确实在 WSL 环境中工作)。 更新:Windows 支持最近一直在改进(2021 年秋季)。
性能是否提高是一个单独的问题,尽管大多数程序可能启动得更快。
这是用户指南的链接
创建自己的项目:Minimal sbt project
最大的限制是到目前为止只实现了 java 和 scala 标准库的一个子集,因此您需要将自己限制在当前可用的范围内,而且并非每个项目都只有在您将自己限制为 100% scala 时才可行。此外,该文档正在进行中。
作为测试,我创建了一个用于处理文本文件的命令行工具,我终于能够让它工作,尽管我确实花了一些时间来弄清楚如何完成各种事情,主要是如何使用可用的图书馆。如有必要,您也可以链接到 C/C++ 库,尽管我的小项目不需要。
截至 2019 年 6 月的脚注:我对 graalvm native-image 很满意。这是链接:
https://www.graalvm.org/docs/reference-manual/aot-compilation/