Ruby虚拟机窥孔优化:添加opt_respond_to指令

2024-12-31

本文是关于优化Ruby虚拟机(VM)的系列文章的第四部分,作者深入探讨了在CRuby中添加`opt_respond_to`指令以优化`respond_to?`方法调用的过程。文章详细描述了利用调试器跟踪代码执行流程,找到窥孔优化器`iseq_peephole_optimize`,并通过分析现有数组冻结优化的实现,尝试匹配`respond_to?`方法调用的模式,为后续添加新的优化指令奠定基础。作者用简洁的代码示例和调试步骤,清晰地展现了窥孔优化的机制以及在CRuby源码中进行调试的方法。

阅读更多
开发 窥孔优化

通过用Ruby重写C代码来加速Ruby

2024-12-04

本文探讨了如何通过用Ruby重写C代码来提高Ruby的性能。作者首先介绍了一个语言性能比较测试,其中CRuby表现不佳。然后,作者分析了基准测试代码,发现YJIT对C代码的优化效果有限。通过将Range#each、Integer#times和Array#each等C代码转换为Ruby代码,并利用YJIT的优化特性,Ruby的性能得到了显著提升。作者还介绍了YJIT的工作原理以及如何通过查看机器码来理解YJIT的优化过程。最后,作者展望了CRuby未来优化的方向,即更多地使用Ruby代码来实现核心功能,从而更容易进行YJIT优化。

阅读更多
未分类 YJIT

用 Ruby 计算已知最大质数

2024-11-30

本文讲述了作者尝试用 Ruby 计算已知最大质数 2^136279841-1 的经历。在 Ruby 3.4.0-preview2 及更早版本中,这个计算会返回 Infinity。Ruby 3.4 解决了这个问题,但实际计算需要很长时间。作者发现,需要安装 GMP(GNU 多精度算术库)才能加速计算。最终,在安装 GMP 后,作者成功在 5 秒内计算出了这个拥有 41,024,320 位数字的巨大质数。

阅读更多
未分类 GMP

Ruby 方法是无色的

2024-07-23

本文探讨了 Ruby 方法的“无色”特性,即异步和同步方法在调用方式上没有区别,这得益于 Ruby 嵌套并发模型中的线程和纤程。文章解释了 Ruby 如何利用线程和纤程实现并发,并通过代码示例和图表展示了线程和纤程如何协同工作来并行处理阻塞操作,从而实现高效的异步编程。

阅读更多
未分类