什么是 lib.rs?
lib.rs 是一个 Rust 编程语言的程序和库的目录。它包含 156,234 个包,包括来自 crates.io 注册表的所有 155,617 个 crate(除了一些垃圾邮件、域名抢注等例外),以及一些只在 GitHub 或 GitLab 上发布的知名项目。该网站是非官方的,并且与 Rust 基金会无关。
为什么使用 lib.rs?
- lib.rs 是 快速 的。没有任何 JavaScript。
- 它具有具有高级排名算法的搜索功能,该算法促进稳定、定期更新、流行的 crate,并隐藏垃圾邮件和废弃的 crate。
- 它 结合多个数据源 来修复缺失或低质量的元数据
- 找到缺失的 README 文件,并从
src/lib.rs
中拉入文档 - 自动分类 crate 并添加缺失的关键词,以改进按分类和关键词的浏览。
- 准确显示哪些依赖项已过时或已弃用。
- 突出显示需要夜间编译器或使用非 Rust 代码的 crate。
- 拥有详细的反向依赖关系页面,包括版本碎片化和随时间的变化的流行度。
- 显示每个 crate 及其依赖项的大小。
- 与 RustSec 咨询数据库、cargo-vet 和 cargo-crev 审查集成。
- 根据 Git 历史自动查找并认可共同作者。
- 找到缺失的 README 文件,并从
- 它具有简短的 URL,用于打开 crate 页面
lib.rs/crate-name
和搜索lib.rs?keyword
。 - 在每个 crate 页面上显示类似/相关的 crate,这有助于发现更好的替代方案。
- 具有深色主题(它是自动的,需要通过您的浏览器或操作系统进行选择)。
排名算法
仅按下载量对 crate 进行排序有一些缺点
- 它倾向于青睐旧 crate 和既得利益者,使得新的高质量 crate 获得用户更加困难。
- crates.io 下载计数器没有节流或反垃圾邮件措施,因此该指标可以很容易地膨胀(不仅恶意,而且还有未缓存的 CI 构建)。
- 内部和不太知名的 crate 发生在流行的 crate 的依赖项中,尽管它们本身并不有趣。
为了解决这些问题,lib.rs 使用一个结合了许多质量信号的算法。该算法是基于对 RFC 1824 的研究、Rust 用户反馈以及 Open Hub 分析、SourceRank、CocoaPods 的 QualityIndex 和 npm 搜索的启发而设计的。
crate 是根据其整体质量分数进行排序的,这是一个加权组合
- crate 的流行度通过下载量来衡量,但只占分数的一小部分,并且对噪声和显然是垃圾邮件的 crate 进行了一些过滤
- 直接和间接反向依赖项的数量。这些数字已针对影响应用程序 crate 和依赖项的依赖项的偏差进行了校正。
- crate 的使用趋势——是增加还是减少用户。
- crate 的文档、示例的可用性,以及 README 的长度和质量。
- 从发布历史记录中估计的稳定性,包括破坏性版本的数量、补丁版本和使用夜间功能。
- 存在测试、CI、代码注释。
- crate 的元数据的准确性和完整性。
- 作者和贡献者的数量。
- crate 的独特依赖项的权重(考虑到某些 crate 非常常见且在项目之间共享)。
- 根据发布频率、年龄、维护状态、弃用/过时依赖的使用、非0.x版本等因素,判断crate是否处于积极维护状态或至少稳定且完成。
- crate维护者的声誉,基于共同拥有关系计算,类似于页面排名。
- 加上特殊案例因素和不希望或不相关的crate的黑名单。
得分与crate的关键词与特定类别或搜索查询的相关性相结合。总体而言,该算法在发现高质量crate方面表现非常好。然而,始终存在边缘情况。如果您发现结果不佳,请报告它们。
依赖项新鲜度
当crate的用户中有超过一半使用较新版本时,版本被视为过时,而不仅仅是当它们低于最新版本。这样,lib.rs只警告真正落后的crate,而不会对依赖项的次要/无关/实验性/不可升级版本提出异议。
crate页面突出显示过时的依赖项版本
- 如果没有版本号,crate将使用依赖项的最新、最流行版本。
- 如果版本号是黑色的,crate将使用依赖项的最新版本,该版本比依赖项的最流行版本更新。
- 如果版本号是橙色的,crate将使用稍微过时的依赖项版本。
- 如果版本号是加粗深红色,crate将使用过时或弃用的依赖项版本。
政策
lib.rs本身不是包注册库,只是对其他地方发布的crate的视图。大多数crate来自crates-io,因此受其政策的约束。所有crate都受Rust的行为准则约束。
虽然lib.rs显示了crates-io的几乎所有crate,但它保留了对被认为不适当或受到下架请求的crate省略/隐藏的权利。该网站反对加密货币,此类crate可能会被降低排名或隐藏。crate在lib.rs上的存在并不意味着认可(它们默认允许)。有关数据处理政策。
域名抢注
lib.rs不赞成域名抢注(为了保留/阻止域名而注册crate名称,而不是为了发布实际的crate)。该网站将降低或隐藏抢注的crate,并禁止主要用于抢注域名的账户。抢注很难定义,但这里有一些例外
- 如果您拥有前缀crate(例如
foo-something
)所对应的crate,则可以保留crate名称前缀。 - 如果您在其他地方已经建立了项目或商标,则可以保留相应的crate名称(例如,如果您是Aperture Labs,则可以注册
glados
)。 - 如果您真正计划不久后发布一些crate,则可以保留几个crate。在这种情况下,请使用
0.0.0-reserved
版本,并包含一种长期有效的联系方式。