expr
chalk
Our great sponsors
expr | chalk | |
---|---|---|
4 | 25 | |
5,443 | 1,752 | |
4.7% | 1.2% | |
9.4 | 7.1 | |
8 days ago | about 1 month ago | |
Go | Rust | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
expr
-
SQL as API
You're basically creating an expression language: https://github.com/expr-lang/expr
chalk
-
Why did Prolog lose steam? (2010)
The Rust compiler uses a Prolog-like query language internally for type checking generic requirements and traits: https://github.com/rust-lang/chalk
-
Why doesn't rust-analyzer reuse infrastructures of rustc?
rust-analyzer already uses chalk (https://github.com/rust-lang/chalk) which should replace the current trait resolver.
-
Why use Rust on the backend? by Adam Chalmers
Well it's quite easy to come to that conclusion: The code compiles with rustc, which is currently the reference implementation. If rust-analyzer does not match rustc's behavior it's an issue in their implementation. That written it's not that easy to fix as it's related to how rust-analyzer resolves types/traits. rust-analyzer uses chalk for this, which is known to be incomplete/diverging from the RFC'ed behavior. Now one could argue that we can simplify diesel to the point where it works will with rust-analyzer/chalk, but that would result in basically removing core diesel features that exist way longer than rust-analyzer.
-
General mathematical expression analysis system
Maybe something in the prolog/datalog direction could be useful? Notably Rust has Chalk to help with trait resolution ("Chalk is a library that implements the Rust trait system, based on Prolog-ish logic rules.")
-
Useful lesser-used languages?
There has been work to implement part of the Rust typing logic in the Chalk Engine which uses a prolog-ish syntax to describe its rules.
-
Can you have a function return different types known at compile time
That's something Chalk is trying to tackle.
-
Compile time wins today
We probably will see all of them at some point -- polonius is a current effort to make the borrow checker accept more valid programs, in a way that also simplifies the logic and is probably a bit faster than the current NLL system, chalk is an attempt to do a similar thing for the trait system, and cranelift is a project that seeks to replace the LLVM codegen backend. But obviously, these are very large and complex projects that are gonna take some time.
-
Question about Trait Bounds (from Rust for Rustaceans)
For me an attempt to write where HashMap: FromIterator and then use new and insert was totally bizzare because currently rustc is pretty primitive and doesn't do super-complex machinery needed to do what you want. Chalk may fix that one day, but it's nowhere near to being ready for inclusion into rustc thus I wouldn't even attempt to do what you tried to do… but that's not something you are supposed to know before reading this book!
-
Why doesn't Rust see that there is no lifetime overlap?
Similarly, there is chalk (https://github.com/rust-lang/chalk) which is intended to replace Rust trait system. Both crates are part of an effort to split compiler into reusable crates (for example, rust-analyzer is using chalk already).
-
An embeddable Prolog scripting language for Go
Some of them do, for type resolution. Rust has Chalk: https://github.com/rust-lang/chalk, Haskell has something that can be used too: https://aphyr.com/posts/342-typing-the-technical-interview.
What are some alternatives?
polonius - Defines the Rust borrow checker.
govaluate - Arbitrary expression evaluation for golang
miri - An interpreter for Rust's mid-level intermediate representation
cel-go - Fast, portable, non-Turing complete expression evaluation with gradual typing (Go)
prolog - The only reasonable scripting engine for Go.
grule-rule-engine - Rule engine implementation in Golang
lccc - Lightning Creations Compiler Frontend for various languages
pny1-assignment - College assignment writing in which I ramble about type classes and dependent types.
unsafe-code-guidelines - Forum for discussion about what unsafe code can and can't do
expr - Expression language and expression evaluation for Go [Moved to: https://github.com/expr-lang/expr]
intellij-lsp-server - Exposes IntelliJ IDEA features through the Language Server Protocol.
tyrade - A pure functional language for type-level programming in Rust