3个不稳定版本

0.2.1 2021年6月30日
0.2.0 2020年11月19日
0.1.0 2020年10月1日

#588 in 算法

Download history 993/week @ 2024-03-14 759/week @ 2024-03-21 625/week @ 2024-03-28 701/week @ 2024-04-04 650/week @ 2024-04-11 673/week @ 2024-04-18 597/week @ 2024-04-25 805/week @ 2024-05-02 419/week @ 2024-05-09 506/week @ 2024-05-16 719/week @ 2024-05-23 626/week @ 2024-05-30 421/week @ 2024-06-06 657/week @ 2024-06-13 680/week @ 2024-06-20 350/week @ 2024-06-27

2,166 每月下载量
12 个crate(7个直接使用) 中使用

MPL-2.0 许可证

140KB
2.5K SLoC

PubGrub版本求解算法

license crates.io docs.rs guide

版本求解在于高效地找到满足给定项目依赖约束的包和版本集合。此外,当无法实现时,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)实现了提供的PackageVersion特性,就可以用于任何类型的依赖系统。

使用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