Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
efef7a7
Pluggable Backend interface + FlowLog backend
oflatt Jul 7, 2026
6a8f576
Register user primitives on the term-encoding typechecker
oflatt Jul 7, 2026
fd48fae
Check FlowLog against egglog's own golden snapshots
oflatt Jul 7, 2026
ce78a30
Support FlowLog proof backend parity
saulshanabrook Jul 8, 2026
30003eb
Revert "Support FlowLog proof backend parity"
saulshanabrook Jul 8, 2026
5fd8184
Reapply FlowLog proof parity fixes
saulshanabrook Jul 8, 2026
d3edda1
Merge main and clean FlowLog backend
saulshanabrook Jul 9, 2026
6f7a665
Keep no-merge proof support out of FlowLog PR
saulshanabrook Jul 9, 2026
230bf52
Add backend benchmarks and profile cache
saulshanabrook Jul 10, 2026
ae73ade
Add markdown benchmark report output
saulshanabrook Jul 10, 2026
a9767dc
Add backend-aware benchmark profiling
saulshanabrook Jul 11, 2026
e82c5e7
Batch FlowLog merge reconciliation
saulshanabrook Jul 11, 2026
0d9ed33
Share FlowLog DD arrangements
saulshanabrook Jul 11, 2026
49ac33a
Rename FlowLog backend to DD
saulshanabrook Jul 11, 2026
7e53fe5
Document DD backend design decisions
saulshanabrook Jul 11, 2026
9990f68
Address backend interface review findings
saulshanabrook Jul 13, 2026
fe770df
Make scheduler rule construction transactional
saulshanabrook Jul 13, 2026
405fa4d
Simplify backend interface implementation
saulshanabrook Jul 13, 2026
b86f496
Handle backend registration rollback failures
saulshanabrook Jul 13, 2026
efd5b70
Address backend interface review feedback
saulshanabrook Jul 13, 2026
74d3bb0
Harden DD backend capability contracts
saulshanabrook Jul 13, 2026
47c469c
Reduce backend integration diff noise
saulshanabrook Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
189 changes: 189 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ members = [
"egglog/concurrency",
"egglog/core-relations",
"egglog/egglog-ast",
"egglog/egglog-backend-trait",
"egglog/egglog-bridge",
"egglog/egglog-reports",
"egglog/numeric-id",
"egglog/union-find",
"egglog/src/sort/add_primitive",
"egglog/wasm-example",
"egglog-experimental",
"egglog-experimental/flowlog",
]

[workspace.package]
Expand Down Expand Up @@ -81,6 +83,7 @@ egglog-numeric-id = { path = "egglog/numeric-id", version = "2.0.0" }
egglog-union-find = { path = "egglog/union-find", version = "2.0.0" }
egglog-add-primitive = { path = "egglog/src/sort/add_primitive", version = "2.0.0" }
egglog-reports = { path = "egglog/egglog-reports", version = "2.0.0" }
egglog-backend-trait = { path = "egglog/egglog-backend-trait", version = "2.0.0" }
egglog = { path = "egglog", default-features = false, version = "2.0.0" }

######################
Expand All @@ -89,6 +92,14 @@ egglog = { path = "egglog", default-features = false, version = "2.0.0" }
wasm-bindgen = "0.2"


# The FlowLog backend (egglog-experimental/flowlog) uses a `differential-dogs3`
# (dogsdogsdogs) that path-deps its own differential-dataflow; redirect the
# crates.io differential-dataflow to the same git source so the workspace shares
# a single dd 0.24.0. Only FlowLog pulls these in. A `[patch]` is only honored at
# the workspace root, so it lives here rather than in the FlowLog crate.
[patch.crates-io]
differential-dataflow = { git = "https://github.com/oflatt/differential-dataflow", rev = "f8d47afb6996942358d36f0ca5796412caf3fe94" }

[profile.dev]
opt-level = 3
debug = "line-tables-only"
Expand Down
2 changes: 2 additions & 0 deletions egglog-experimental/flowlog/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/target
/output.*.log
50 changes: 50 additions & 0 deletions egglog-experimental/flowlog/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# A FlowLog (differential-dataflow) backend for egglog — it depends only on the
# public `egglog-backend-trait` SPI plus the neutral `egglog-core-relations`.
# This is the worked example that a third party can implement their own egglog
# backend against the `Backend` trait.
#
# It stays on edition 2021 (its differential-dataflow / timely dependency tree is
# edition 2021); the workspace `resolver = "3"` supports the mixed edition. The
# `[patch.crates-io]` that pins differential-dataflow lives in the workspace-root
# Cargo.toml (a patch is only honored there).
[package]
name = "egglog-experimental-flowlog"
version = "0.1.0"
edition = "2021"
description = "A FlowLog (differential-dataflow)-backed egglog Backend, as an out-of-tree example of the egglog-backend-trait SPI."
license = "MIT"
publish = false

[dependencies]
anyhow = "1"
egglog-backend-trait = { path = "../../egglog/egglog-backend-trait" }
egglog-core-relations = { path = "../../egglog/core-relations" }
egglog-numeric-id = { path = "../../egglog/numeric-id" }
hashbrown = "0.16"
log = "0.4"
dyn-clone = "1.0.17"
# Raw differential-dataflow + timely, used in-process by `dd_native.rs`.
differential-dataflow = "=0.24.0"
timely = "=0.30.0"
# `--wcoj` worst-case-optimal join operators. `differential-dogs3` is the
# crates.io name of `dogsdogsdogs`, which lives in the differential-dataflow
# repo. We track the branch carrying the upstreamable `lookup_map` index-oob
# fix (TimelyDataflow/differential-dataflow#765). Because that crate path-deps
# the repo's own differential-dataflow, the `[patch]` below redirects our
# crates.io differential-dataflow to the same source so there is a single dd.
differential-dogs3 = { git = "https://github.com/oflatt/differential-dataflow", rev = "f8d47afb6996942358d36f0ca5796412caf3fe94" }
serde = { version = "1", features = ["derive", "rc"] }

[[test]]
# Parity harness over egglog's .egg corpus: checks FlowLog's output against
# egglog's OWN shared snapshots (`egglog/tests/snapshots/files__shared_snapshot_
# *.snap`), so egglog is the single source of truth. Custom libtest-mimic main.
name = "files"
harness = false

[dev-dependencies]
# The frontend, so the integration tests can run real `.egg` files on the
# FlowLog backend via `egglog::EGraph::with_backend(..)`.
egglog = { path = "../../egglog", default-features = false }
egglog-experimental = { path = "..", default-features = false }
libtest-mimic = "0.8"
Loading
Loading