近年来,内存安全成为编程语言发展的重要方向。特别是随着Rust语言的普及,内存安全已经成为避免高风险漏洞的一大关键。然而,对于大量依赖C和C++的开发者来说,学习Rust并迁移代码库并非易事。Epic Games的语言工程高级总监Filip Pizlo提出了另一种解决方案——Fil-C,一个实现内存安全的C语言变体。
Fil-C的起源与目标Filip Pizlo在介绍Fil-C时提到,他希望在保留C和C++语言特性的同时,通过优化编译器和运行时,提供一种直接编译现有C/C++代码即可实现内存安全的方法。Fil-C专注于以下几点:
100%兼容C和C++语法:开发者只需使用Fil-C编译器,无需重新学习即可获得内存安全的程序。避免Rust的学习成本:Fil-C为那些习惯使用C和C++的开发者提供了一种选择,无需全面掌握新的编程范式。性能优化的潜力:尽管目前运行效率略低,Fil-C计划通过进一步优化,使性能接近传统C语言的水平。Fil-C的技术特点内存安全的实现Fil-C采用了名为MonoCaps的指针编码方法,用于跟踪内存边界和类型。这种方法有效地避免了常见的内存问题,例如越界读写和非法指针操作。运行平台的局限性Fil-C目前仅支持Linux/x86_64平台,并且性能比传统C程序慢1.5到5倍。这是由于其独特的调用约定和动态链接方式引入的额外开销。不过,Pizlo计划通过深入优化垃圾回收和编译器技术,将性能影响控制在1.2倍左右。与传统C/C++的ABI不兼容Fil-C刻意与传统C/C++的应用二进制接口(ABI)不兼容,以避免开发者混合使用两种编译方式,导致部分代码失去内存安全的保障。开源和许可Fil-C的组件全部采用宽松的开源协议:编译器部分为Apache 2.0,运行时部分为BSD许可。这确保了社区可以广泛使用并贡献改进。Fil-C的适用场景与现状目前,Fil-C可以直接编译一些无需修改的现有C程序,如bzip2、zip、pcre和ncurses。而对于SQLite、Lua、OpenSSH等复杂程序,可能需要进行小幅修改。虽然功能尚未完全完善,但Fil-C已展示了其在实际项目中的潜力。
对比其他内存安全解决方案相较于Rust或CheckedC等内存安全语言,Fil-C提供了一条更加平滑的过渡路径。它保留了C和C++的语言特性和生态,同时提供内存安全保障。然而,与Rust的广泛支持和性能优势相比,Fil-C仍需解决平台兼容性和性能问题。
未来展望Filip Pizlo表示,Fil-C是其对C语言的热爱和技术探索的体现。他的最终目标是让开发者在不改变编程习惯的情况下实现内存安全,并减少对Rust的依赖。尽管目前性能和兼容性仍有提升空间,Fil-C已经为C语言的未来打开了新的可能性。
Fil-C的诞生表明,内存安全并非只有Rust一种选择。对于深耕C和C++的开发者,Fil-C提供了一种值得关注的替代方案。未来,随着技术的不断优化,Fil-C有望成为推动内存安全发展的重要力量。
更多阅读:https://github.com/pizlonator/llvm-project-deluge/blob/deluge/Manifesto.md