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

Rim*_*med 3 scala native gcj

将scala(或字节码)转换为本机二进制文件以提高性能的最佳方法是什么

phi*_*alk 6

尽管还不是一个功能齐全的工具,但 scala-native 项目已开始变得可用,尽管它仍处于早期阶段,但它正在积极开发中,并且每个月都会变得更加强大。它基于 LLVM 和 clang,如果您依赖的库属于早期阶段实现的库,它会将您的 scala 源代码编译为二进制文件。(它还不能在 Windows 或 cygwin 中工作,尽管它可以在 WSL 环境中工作)。 更新:Windows 支持最近一直在改进(2021 年秋季)。

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

这是用户指南的链接

创建自己的项目:Minimal sbt 项目

最大的限制是到目前为止仅实现了 java 和 scala 标准库的子集,因此您需要将自己限制在当前可用的范围内,并且并非每个项目只有在将自己限制为 100% scala 时才可行。此外,该文档仍在进行中。

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

截至 2019 年 6 月的脚注:我在 graalvm 本机映像方面运气不错。这是链接:

https://www.graalvm.org/docs/reference-manual/aot-compilation/


Ник*_*кий 5

此时我看到两种解决方案将jvm字节码转换为自包含的本机二进制文件:

  • Avian - 具有AOT功能的轻量级嵌入式JVM
  • Excelsior JET - 商业Java本机编译器

两者都应该与Scala兼容.

据我所知,scala没有直接的本地编译器.有一些像Scala LLVM这样的项目,但它们更多的是研究和概念证明,而不是现成的工具

  • 我没有任何基准测试,但我认为这些解决方案与Oracle JDK相比只能减少启动时间,但是运行代码不会带来任何显着的性能提升.这些解决方案可能比预热的Oracle Hotspot更慢.如果scala/java存在性能问题 - 请使用profiler查找根本原因.编译为本机代码不会"神奇地"提高性能. (2认同)