Julia语言每次编译脚本,我们不能用julia编译二进制文件吗?我尝试了一个带有println函数的小helloworld脚本,julia花了2,3秒来显示输出!如果我们可以制作二进制文件而不是每次编译都会更好
更新:朱莉娅有一些变化,因为我问过这个问题.虽然我不再关注julia的更新,因为我已经问过这个问题,如果你正在寻找类似的东西,请查看以下答案和关注julia的人的评论.
此外,很高兴知道现在加载脚本大约需要150毫秒.
Ste*_*ski 98
基诺的答案很明显,但也许我可以更详细地说明正在发生的事情以及我们打算如何处理它.
目前只有LLVM JIT模式:
这就是Julia即使在没有类型注释的情况下编写代码时也能获得良好性能的方法:如果你打电话给f(1)你,那么你可以获得专门的代码Int64- 164位系统的类型; 如果你打电话f(1.0)你得到一个新的即时编译版本,是专门为Float64-类型1.0上的所有系统.由于函数的每个编译版本都知道它将获得什么类型,因此它可以以类似C的速度运行.您可以通过编写和使用"类型不稳定"函数来破坏它,其函数的返回类型取决于运行时数据,而不仅仅是类型,但我们在设计核心语言和标准库时非常注意不要这样做.
Julia的大部分都是自己编写的,然后进行解析,类型推断和jitted,因此从头开始整个系统的启动大约需要15-20秒.为了加快速度,我们有一个分阶段系统,我们在其中解析,输入类型,然后在文件中缓存类型推断AST的序列化版本sys.ji.然后加载此文件并在运行时用于运行系统julia.sys.ji但是,没有缓存LLVM代码或机器代码,因此每次julia启动时仍需要完成所有LLVM jitting ,因此大约需要2秒钟.
这2秒的启动延迟非常烦人,我们有一个修复它的计划.基本计划是能够编译整个朱莉娅方案,以二进制文件:可以运行或任何可执行文件.so/ .dylib可以从其他程序调用,好像他们只是共享C库的共享库.二进制文件的启动时间与任何其他C程序一样,因此2秒启动延迟将消失.
附录1:自2013年11月起,Julia的开发版本不再具有2秒的启动延迟,因为它将标准库预编译为二进制代码.启动时间仍然比Python和Ruby慢10倍,所以还有改进的余地,但速度非常快.下一步将允许预编译包和脚本,以便那些可以像Julia本身一样快地启动.
附录2:自2015年6月起,Julia的开发版本会自动预编译许多软件包,从而可以快速加载.下一步是整个Julia程序的静态编译.
Ken*_*her 41
目前,Julia JIT在启动时编译其整个标准库.我们知道这种情况,目前正在努力缓存LLVM JIT输出以纠正这种情况,但在此之前,没有办法绕过它(除了使用REPL).