4 releases (breaking)

0.3.0 Nov 5, 2024
0.2.0 Oct 29, 2024
0.1.0 Jul 8, 2024
0.0.0-release Jul 8, 2024

#504 in Encoding

Download history 7/week @ 2024-08-19 6/week @ 2024-08-26 34/week @ 2024-09-16 25/week @ 2024-09-23 5/week @ 2024-09-30 2/week @ 2024-10-07 24/week @ 2024-10-14 121/week @ 2024-10-28 141/week @ 2024-11-04 62/week @ 2024-11-11

326 downloads per month
Used in 2 crates (via pint-pkg)

Apache-2.0

15KB
278 lines

The Pint Programming Language

build

Pint is a Declarative constraint-based Domain Specific Language (DSL) for intent expression. An introduction to the Pint language can be found in The Book of Pint.

Dependencies

Rust

Pint is built in Rust. To begin, install the Rust toolchain following instructions at https://www.rust-lang.org/tools/install. Then configure your Rust toolchain to use Rust stable:

rustup default stable

If not already done, add the Cargo bin directory to your PATH by adding the following line to ~/.profile and restarting the shell session.

export PATH="${HOME}/.cargo/bin:${PATH}"

Building

Clone the repository and build the Pint compiler and tooling:

git clone git@github.com:essential-contributions/pint.git
cd pint
cargo build

Confirm that pint built successfully:

cargo run --bin pint -- --help

Testing

Running Unit Tests

Unit tests can be run using cargo test in the pint directory. However, it is recommended that the tests are run using the cargo-nextest package instead. To install cargo-nextest:

cargo install cargo-nextest

To run all unit tests using cargo-nextest:

cargo nextest run
cargo nestest run --all-features

Updating Unit Tests

Most unit tests are written with the help of the expect_test crate. The following command can be used to automatically update all unit tests that use the expect_test::expect! macro such that they all pass.

env UPDATE_EXPECT=1 cargo nextest run
env UPDATE_EXPECT=1 cargo nestest run --all-features

For compiler changes that affect many unit tests, the command above allows updating all affected tests in one go. The command also helps with writing new tests: simply write your test by passing an empty string argument to the expect! macro (i.e. expect![""]) and then run the command above.


lib.rs:

The manifest type and its implementations.

Dependencies

~0.6–1.2MB
~26K SLoC