pperl 0.6.12+ - "我们玩个游戏吗?"
内容提要
pperl项目以高速开发著称,每两周代码变更量相当于Perl一年。在基准测试中,其JIT使mandelbrot程序比perl5快36倍,接近node.js。为此,项目暂停发布,从头重构JIT架构,目标超越所有脚本语言,同时保持通用性以加速真实程序。
延伸解读
开发速度的量化对比
文章用Perl官方发布说明的统计口径来衡量pperl的开发速度,显示每两周的代码变更量约等于Perl一年的量。这种对比虽然直观,但需注意pperl是全新项目,代码变更多为新增功能,而Perl是成熟项目的维护更新,两者性质不同。读者在理解“高速开发”时,应结合项目阶段来看,避免简单类比。
基准测试的局限与意义
pperl在mandelbrot基准上比perl5快36倍,接近node.js,但作者强调这是单一程序的结果,且测试规则严格限制算法一致。基准测试虽能反映JIT的潜力,但真实程序性能可能受多种因素影响。文章也指出,新JIT设计以真实程序为优先,基准性能只是副产品,这提醒读者不应过度依赖单一基准来评判语言性能。
重构JIT的决策逻辑
由于基准测试显示与node.js的差距,pperl决定从头重构JIT架构,目标从超越perl5转向超越所有脚本语言。这一决策体现了项目对性能的追求,但也意味着发布暂停,开发周期延长。读者需注意,重构可能带来不确定性,且“超越所有脚本语言”是宏大目标,实际效果有待后续验证。
Q&A
pperl项目的开发速度有多快?
pperl项目开发速度极高,每两周的代码变更量相当于Perl一年的变更量。例如,从0.6.0到0.6.8的16天内,代码变更量约为270,000行,与Perl 5.44.0十二个月的总变更量相当。
在计算机语言基准游戏中,pperl的JIT使mandelbrot程序比perl5快多少倍?
在计算机语言基准游戏中,pperl的JIT使mandelbrot程序比perl5快36倍,并且接近node.js的性能(差距在1.5倍以内)。
为什么pperl项目暂停发布?
因为基准测试结果显示了pperl的巨大潜力,项目决定暂停发布,从头重构JIT架构,目标是超越所有脚本语言,而不仅仅是追赶perl5。
pperl的新JIT设计优先考虑什么?
新JIT设计以真实程序为优先,基准性能被视为加速真实程序的副产品。这意味着JIT的优化重点在于提升实际应用性能,而非专门针对基准测试程序。
pperl在基准测试中如何保证公平性?
pperl在基准测试中遵循严格规则:使用与发布程序相同的算法,代码能在perl5上运行,并且输出与perl5逐字节一致。此外,JIT的优化必须针对通用构造,而非专门针对基准程序。
pperl如何处理基准游戏中的线程问题?
基准游戏允许手写线程,但pperl本身不支持线程,其并行性通过运行时内部的Rayon实现。因此,pperl将mandelbrot的线程池替换为简单的循环,保持输出像素一致,同时符合游戏规则。
pperl的JIT与perl5相比性能如何?
在mandelbrot基准测试中,pperl的JIT比perl5快36倍,而关闭JIT时性能与perl5相当,说明性能提升主要来自JIT编译器。
pperl的最终目标是什么?
pperl的最终目标是超越所有脚本语言,在基准游戏中与最好的脚本语言竞争,并通过通用JIT实现,而非专门针对基准代码优化。