尾调用解释器:性能提升的四年历程

2025-02-20

四年前,一篇关于利用尾调用和musttail属性编写高速解释器的文章引发了广泛关注。如今,这一技术在Python 3.14、LuaJIT Remake等项目中得到应用,并取得了显著的性能提升。文章还探讨了GCC和Clang对musttail的支持,以及C标准中“return goto”提案对尾调用解释器的潜在影响。此外,文章详细介绍了preserve_none和preserve_most属性在优化尾调用解释器方面的作用,并总结了在编译器和编程语言解释器领域取得的令人振奋的进展。

阅读更多
开发 尾调用

无恐慌Rust:能否用Rust替代C语言编写底层系统库?

2025-02-03

本文探讨了使用Rust替代C语言进行底层系统编程的可行性,特别是针对一个名为upb的Protocol Buffers库。作者起初怀疑Rust能否在性能和代码大小方面与C语言匹敌,但发现了一种名为“无恐慌Rust”的技术,它通过避免使用panic!()来实现。这篇文章深入探讨了“无恐慌Rust”的原理、优势和挑战,包括代码大小、不可恢复的退出以及运行时开销等问题。作者展示了如何通过巧妙运用libc库、优化选项以及`std::hint::assert_unchecked`等技术来编写“无恐慌Rust”代码,并强调了在debug模式下保留溢出检查以进行额外的一致性检查。虽然该技术需要细致的工作,并可能需要避免使用大部分标准库,但它有望在保证Rust安全性的同时,获得与C语言库相同的性能和代码大小。

阅读更多
开发

以超过 2GB/s 的速度解析 Protobuf:我如何在 C 语言中学会喜爱尾调用

2024-08-19

本文介绍了如何使用 C 语言中的尾调用优化来提高 Protobuf 解析性能。作者发现,传统的 Protobuf 解析器通常使用循环和分支结构,这会导致代码膨胀和编译器难以优化。为了解决这个问题,他们采用了一种基于尾调用的设计,将解析过程分解成多个小函数,每个函数通过尾调用下一个函数来实现状态转换。这种方法使得代码更易于编译器优化,并最终实现了超过 2GB/s 的 Protobuf 解析速度。

阅读更多
未分类