73个发布版本
新版本 0.17.0 | 2024年8月22日 |
---|---|
0.16.1 | 2024年5月22日 |
0.15.44 | 2024年4月22日 |
0.15.41 | 2024年2月29日 |
0.6.1 | 2022年11月8日 |
#142 in Unix APIs
703 每月下载量
用于 5 个crate (2 个直接使用)
640KB
18K SLoC
c-gull 是一个libc实现。它是libc crate中描述的ABI的实现。
它使用Rust编写的crate实现,例如 c-scape、rustix、origin、libm、realpath-ext、tz-rs、printf-compat、num-complex 和 posix-regex。
目前它仅支持 *-*-linux-gnu
ABIs,尽管将来可以添加其他ABIs。目前主要关注Rust程序所需的功能,因此还没有像 qsort
这样的C风格特性,但将来可能会添加。
目标是使 c-gull 中的代码量尽可能少,通过将所有重要的功能分解为具有更多Rust风格的API的独立crate,c-gull 仅通过包装这些API来实现C ABIs。
目前这是高度实验性的、不完整的,一些东西还没有优化。
c-gull的两种模式
c-gull有两个主要的Cargo功能:“take-charge”和“coexist-with-libc”。必须启用其中一个。
在“take-charge”模式下,c-gull负责进程,处理程序启动(通过Origin),提供 malloc
(通过c-scape),以及其他事情。这需要一些额外的设置;有关详细信息,请参阅c-gull-example 示例crate。
在“coexist-with-libc”模式下,如果使用nightly Rust,可以将c-gull用作(部分)libc的替代品。要使用它,只需将Cargo.toml中的典型libc依赖项更改为以下内容
libc = { version = "<c-gull version>", package = "c-gull", features = ["coexist-with-libc"] }
and c-gull 会在尽可能多的地方用其自己的实现替换系统 libc 实现。特别是,它不能替换 malloc
或此配置中的任何 pthread 函数,但它可以替换许多其他东西。有关更多详细信息,请参阅 libc-replacement 示例。
依赖关系
~11–21MB
~375K SLoC