3个不稳定版本
0.2.1 | 2021年6月30日 |
---|---|
0.2.0 | 2020年11月19日 |
0.1.0 | 2020年10月1日 |
#588 in 算法
2,166 每月下载量
在 12 个crate(7个直接使用) 中使用
140KB
2.5K SLoC
PubGrub版本求解算法
版本求解在于高效地找到满足给定项目依赖约束的包和版本集合。此外,当无法实现时,PubGrub会尝试提供一个非常易于阅读且清晰的解释,说明失败的原因。关于PubGrub的介绍博客文章发布在Medium上,展示了这种失败解释的一个例子。
Because dropdown >=2.0.0 depends on icons >=2.0.0 and
root depends on icons <2.0.0, dropdown >=2.0.0 is forbidden.
And because menu >=1.1.0 depends on dropdown >=2.0.0,
menu >=1.1.0 is forbidden.
And because menu <1.1.0 depends on dropdown >=1.0.0 <2.0.0
which depends on intl <4.0.0, every version of menu
requires intl <4.0.0.
So, because root depends on both menu >=1.0.0 and intl >=5.0.0,
version solving failed.
此pubgrub crate提供PubGrub的Rust实现。它是泛型的,只要包(P)和版本(V)实现了提供的Package
和Version
特性,就可以用于任何类型的依赖系统。
使用pubgrub crate
一份包含高级解释和深入算法细节的指南在网上可用。API文档可在docs.rs上找到。从dev
分支未发布功能的API文档也便于访问。
贡献
讨论和开发发生在GitHub上以及我们的Zulip流上。请加入我们!
请始终考虑到其他人可能具有不同的母语、文化和经验。我们希望每个人都感到受欢迎,如果您感觉不到这一点,请通过Zulip上的私信告诉我们。
PubGrub
PubGrub是一种版本求解算法,由Natalie Weizenbaum于2018年编写,用于Dart包管理器。它应该非常快,并且比其他方法更能清晰地解释错误。该算法的介绍博客文章由其作者发布在Medium上。
算法的详细解释可在GitHub上找到,链接为这里,并在我们指南的“内部结构”部分进行了补充。该算法的基础是基于ASP(答案集编程),由Martin Gebser、Roland Kaminski、Benjamin Kaufmann和Torsten Schaub合著的《Answer Set Solving in Practice》一书中进行了详细阐述。
依赖项
~0.3–0.8MB
~19K SLoC