19个版本 (6个重大更新)
新 0.6.0 | 2024年8月22日 |
---|---|
0.5.3 | 2024年8月19日 |
0.4.2 | 2024年8月8日 |
0.4.1-rc.2 | 2024年7月28日 |
0.0.0-reserved | 2024年6月22日 |
#123 in 编程语言
每月 6,645 次下载
300KB
3K SLoC
mrLSD/llvm-lib-rs
以安全性和灵活性为设计理念,不基于LLVM-C
API的过度复杂性
概述
llvm-lib-rs
提供了对LLVM编译基础设施的强大且全面的接口,利用LLVM-C API
提供安全、灵活和可扩展性的结合。这个库旨在作为开发人员创建编译器后端的强大工具,使他们能够以安全且用户友好的方式充分利用LLVM的全部潜力。
安全性
安全性是设计本库时的首要考虑。通过基于LLVM-C API
构建,我们确保与LLVM基础设施的交互以类型安全的方式执行,并保证内存安全。库利用Rust的严格安全性保证来防止常见的错误,如空指针解引用、缓冲区溢出和内存泄漏。这种对安全性的承诺使得开发人员可以专注于编译器后端的功能,而无需担心潜在的安全漏洞。
灵活性
灵活性是llvm-lib-rs
的另一个核心特性。该库提供了一套丰富的API,涵盖了LLVM的各种功能,从模块管理到内联汇编,再到调试元数据和函数迭代。开发人员可以轻松访问和操作LLVM结构,从而创建高度定制和优化的编译器后端。库的设计确保它能够适应各种用例和需求,使其成为各种编译器开发项目的理想选择。
可扩展性
llvm-lib-rs
在构建时考虑了扩展性。它设计得易于扩展,允许开发者在需要时添加新的功能和对更多 LLVM 功能的支持。该库的模块化结构便于新组件的集成,确保它可以随着 LLVM 生态系统一起成长和演变。这种扩展性确保了随着 LLVM 不断发展和扩展其功能,该库仍然具有相关性和实用性。
为什么选择 LLVM?
LLVM(低级虚拟机)是一个强大且通用的编译器基础设施,提供了一套模块化和可重用的编译器和工具链技术。它在现代编译器开发中得到广泛应用,提供了一种框架来优化中间表示并为目标架构生成机器代码。LLVM 支持多种语言和平台的能力,以及其广泛的优化能力,使其成为编译器开发人员的重要工具。通过利用 LLVM,开发人员可以创建高效且可移植的编译器,以满足当今多样化的计算环境的需求。
设计
llvm-lib-rs
库遵循 LLVM C API 的结构,确保易于导航庞大的 LLVM 函数。逻辑元素被分组到模块中,提供清晰的组织结构。在这些模块中,引入 Rust 结构来封装 LLVM 类型,实现对应于封装的 LLVM 类型的函数。这种方法增强了灵活性和可用性,同时保持了原始的 LLVM 代码结构。该设计避免了代码和文档中的不必要的复杂性,并与 LLVM API 保持完全一致。这种一致性允许开发人员使用现有的 LLVM-C 文档轻松地导航 llvm-lib-rs
库。
安全性考虑
通过通过 FFI(外部函数接口)使用
LLVM-C API
实现函数时,所有不安全操作和数据类型都单独管理,并封装在新类型和结构中。这种分离确保不安全代码被隔离,不会暴露在最终的 API 中,保证了安全性而不引入过多的复杂性。通过在不安全抽象中封装不安全操作,该库保持了一个干净和易于理解的代码库,同时防止了不安全的内存交互。这种设计选择提供了一层强大的保护层,确保 llvm-lib-rs
库的用户可以安全、自信地使用 LLVM 功能。
状态
基于 llvm-sys rust crate。
支持 LLVM
- llvm-18
开发正在进行中,API 在完成之前可能是不稳定的。
LICENSE: MIT
依赖项
~280–560KB
~11K SLoC