I'm also a third year PhD student at MIT ProbComp.
- ๐ซ How to reach me: [email protected]
- ๐ Pronouns: he/him
Pull your compiler up with abstract bootstraps.
License: MIT License
I'm also a third year PhD student at MIT ProbComp.
Discussion tracking: egraphs-good/egg#145
curious about this. Depends on scope of project, etc โ but would certainly be interesting to look at
ariadne provides beautiful, contextual error messages (and so does things like codespan-reporting) -- I'd like to understand the right way to expose these error messages as part of a diagnostic infrastructure.
Mostly, ariadne
has been used when you have a parser combinator, and the original String
-- so you know the spans of objects after parsing. In the IR framework here, we actually have the IR first -- so this may require a novel Formatter
implementation (e.g. a struct implement fmt::Write
) which somehow tracks the spans for IR objects when being formatted into a string.
Re -- it's also not clear what parts of the infra should support these pretty error messages. Passes would be a good starting place to work on.
Closed by #1.
Completely changes the IR structure to reflect MLIR design choices. Ultimately, after carefully reading the MLIR documentation, I'm convinced that the MLIR design is a good optimum for extensibility -- clearly well thought out and designed, and supports the interfaces which I'd like to use to interact with extensible lattice interpreters.
This change has introduced many advanced things into the codebase. It's likely less clear to someone observing how things actually work here, because I had to introduce concepts like trait objects
, casting
, and dynamic dispatch
from Rust into the implementation to support the ability for my IR containers (e.g. Operation
) to hold containers with intrinsics that are user-defined. The common solution in Rust for this is to use trait objects -- which is great and works (!), but trait objects prevents you from customizing behavior (e.g. by using Rust traits
) on the thing that you just turned into Box<dyn SatisfiesTrait>
(e.g. that you just introduced dynamic dispatch for). This thus requires designing an entirely new mechanism for enforcing traits (again, just like MLIR traits on these intrinsic-agnostic containers. The mechanism which I've implemented here relies on casting of trait objects, which is advanced usage of Rust's type system (specifically, std::Any
and downcasting).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.