Ruby 2.6.0功能预览增加JIT编译器,官方还预告将支援Visual Studio

Ruby释出2.6.0版本第二预览版,官方提到,这次的第二预览版释出的时程比过去都还早,因为包含了重要的功能更新JIT(Just-In-Time)编译器,另外,除了部分语法更新外,在效能上也有提升。
Ruby在2.6版本将首次实作JIT编译器,但这个版本目前仅为测试用,没有太多最佳化,在程式语言方面,也只初步为JIT基础架构做准备。官方表示,提供JIT编译器的目的,在于提高Ruby应用程序的执行效能,而与其他语言的JIT编译器不同,Ruby会先输出C语言程式码,再由常用的C语言编译器来生成原生程式码,这是比较特殊的JIT编译方法。
官方表示,现在这个JIT编译器功能还处在非常早期的阶段,仅是提供一个测试的版本,让开发者检查在自家环境是否适用,并发现可能存在的安全性风险,而且目前也仅在Ruby以Gcc或是Clang建置,并且编译器在Runtime可用时才支援JIT编译器。
在Ruby 2.6.0第二预览版仅在就JIT编译器基础架构做准备,并没有做太多的最佳化,开发者可以对这个版本做一些效能测试,但不要将其做为最终的效能表现,尤其是像Rails应用程序。未来还会在JIT编译器中实现iniling方法,预期将会增加Ruby应用程序效能。
在效能方面,Proc#call效率获得提升,官方提到他们不再需要在意$SAFE,效能因此提升约略1.4倍,另外,block.call也执行的更快了,除了在Ruby 2.5时提升了block传递参数的速度,更在2.6中改进了block calling的传递效能,因此官方表示,block.call整体效能改进约为之前的2.6倍。
这个版本增加了实验性功能RubyVM::AST,这个模组具有解析的功能,能将给定的Ruby程式码字串转为抽象语法树(Abstract Syntax Tree,AST)节点,而parse_file方法将能解析给定的Ruby程式码档案,同样回传AST节点。由于这功能是实验性质,官方不保证AST节点结构的相容性。
官方也预告,Ruby持续增加平台支援,而下一个计划将会支援Visual Studio。
