我正在寻找可能让我定义某种“事实”和“依赖”的东西。事实之间,并定义将尝试解决这些依赖关系的函数。
类似于包管理器解析包之间的依赖关系的方式,而是一个抽象该依赖关系解析过程的库。
因为我希望能够宣称我希望事实A是真的,并且事实A也要求事实B是真的,并给出一些允许的输入要确定A和B是否为真,该系统将尽一切努力使A和B都成立。
答案 0 :(得分:1)
我知道问题已经过了很长时间但是我有完全相同的问题而我在Google上找不到任何有用的内容......
TL; DR:根据this帖子,我开始研究多版本依赖项解析算法,您可以找到here。我无法保证它是正确的,但似乎完成。它更像是一个实验,但它可以通过受控数据集成功运行,并使用随机数据生成结果。
现在,我从这个过程中学到的是,很容易实现一个简单的依赖关系解析算法,该算法处理已知数据的大多数情况,并在" flat"图形。但是,如果考虑多个版本,基于范围的依赖关系(即version > 2.0 and !2.2
)而不是绝对关系,多个正确的解决方案,不完整或不正确的数据,这会变得更加复杂。
在复杂情况下,最明显的问题是循环依赖关系(请参阅here和here)。这些肯定存在于软件/包管理器上。我尝试用基于回合的方法来解决它,这会导致解决方案,失败或经过多次尝试后(检测到的)循环。
最后,我试图概括问题并创建一个可重用的库。您会注意到我的主要逻辑(_resolve()
)比satisfy_criteria()
更直接,这是依赖性接受的问题/区域特定功能。此外,循环依赖"解决方案"完全基于包管理/版本控制,很可能不适用于任何其他案例/区域。
以上让我相信,尽管大多数解决方案都涉及图形,但在某个阶段或另一个阶段,依赖解析问题不可能有高级通用解决方案。
我的下一步(给定时间)将开始阅读apt-get
,rpm
或aptitude
来源并了解其他人如何解决此问题......