4个版本 (稳定)
2.0.1 | 2019年1月2日 |
---|---|
2.0.0 | 2018年12月27日 |
1.0.0 | 2018年12月5日 |
0.1.0 | 2018年5月24日 |
#288 in 嵌入式开发
62,141 每月下载量
用于 11 个crate(4个直接使用)
59KB
1K SLoC
datafrog
Datafrog是一个轻量级Datalog引擎,旨在嵌入到其他Rust程序中。
Datafrog没有运行时,依赖于您构建并重复应用更新规则。它试图帮助您正确完成此操作。以下是一个使用Datafrog编写可达性查询的示例(省略了填充初始关系 nodes
和 edges
的部分)。
extern crate datafrog;
use datafrog::Iteration;
fn main() {
// Create a new iteration context, ...
let mut iteration = Iteration::new();
// .. some variables, ..
let nodes_var = iteration.variable::<(u32,u32)>("nodes");
let edges_var = iteration.variable::<(u32,u32)>("edges");
// .. load them with some initial values, ..
nodes_var.insert(nodes.into());
edges_var.insert(edges.into());
// .. and then start iterating rules!
while iteration.changed() {
// nodes(a,c) <- nodes(a,b), edges(b,c)
nodes_var.from_join(&nodes_var, &edges_var, |_b, &a, &c| (c,a));
}
// extract the final results.
let reachable: Vec<(u32,u32)> = variable.complete();
}
如果您想了解更多关于它是如何工作的,请查看这篇博客文章。
作者
Datafrog最初由Frank McSherry开发,后来转移到rust-lang-nursery组织。感谢Frank!