Skip to content

Latest commit

 

History

History
98 lines (83 loc) · 4.62 KB

index.md

File metadata and controls

98 lines (83 loc) · 4.62 KB
layout default

{% assign egg = 'egg' %}

The {{egg}} project uses e-graphs to provide a new way to build program optimizers and synthesizers.

An e-graph compactly represents many equivalent programs. These four e-graphs represent more and more (even infinite!) ways to write (a × 2) / 2. {{egg}} makes e-graphs fast and flexible enough for use in program optimization and synthesis.

The {{egg}} project maintains two systems that offer different ways to use e-graphs:

  • The original high-performance, flexible e-graph library implemented in Rust.
  • Simpler design, a bit more "hackable" if you are looking to understand or poke at the underlying e-graph data structure.
  • See the docs.rs, or the tutorial.
  • BibTeX for citation information.
  • A newer, more powerful system based on Datalog.
  • More sophisticated database-oriented implementation, offering faster pattern matching, incremental execution, and composable e-class analyses.
  • Usable from Rust, a built-in s-exp language, or Python bindings.
  • See the docs.rs, the tutorial, or the web demo.
  • BibTeX for citation information.

EGRAPHS Community

The {{egg}} project is part of the larger EGRAPHS Community, which aims to bring together researchers and practitioners interested in e-graphs and related techniques. Check out the EGRAPHS Community resources, including:

News

For updates on {{egg}} itself, see the changelog.

Projects using {{egg}} and e-graphs

Check out Philip Zucker's page on Awesome E-graphs for a list of {{egg}} and e-graph related projects. PRs are welcome to add your project to the list!

You can also see who's using {{egg}} on GitHub and Google Scholar.