zydeco-lang / zydeco

a proof-of-concept programming language based on Call-by-push-value
Other
49 stars 2 forks source link

Zydeco 🪗

Zydeco is a proof-of-concept programming language based on Call-by-push-value.

Running Zydeco

Create a file hello-world.zydeco:

main
  ! write_line "hello, world!"
  { ! exit 0 }
end

Then run

$ cargo run -- run hello-world.zydeco
hello, world!

Alternatively, run

cargo build --release

to build the executable which will be stored at target/release/zydeco.

Then run

./target/release/zydeco run hello-world.zydeco

and see

hello, world!

Run zydeco --help for further usage information.

Intro to Zydeco

We now have a toy "literate zydeco" written in zydeco! Try it out by running

cd docs/spell && make build

and the product will show up right in the folder - which is also a series of guide to programming in zydeco. Maybe we should call it "co-literate zydeco" because it turns commented zydeco into markdown.

A legacy version of the tutorial lies here. With system-F_ω and type alias shipped in, we'll update the tutorial shortly the tutorial is briefly updated. If the previous spell guide goes too fast, then the short tutorial might be easier to understand.

We will develop more introductory material on zydeco when we have implemented more features. For now, you can also choose to browse lang/lib/ for some example programs.

To run all tests

cargo test --all

Repository Structure

.
├── Cargo.toml
├── lang
│  ├── derive
│  ├── driver
│  ├── dynamics
│  ├── lib
│  ├── src
│  ├── statics
│  ├── surface
│  ├── syntax
│  ├── tests
│  └── utils
├── cli
├── web
└── ...

Related Literature

Zydeco is based on the Call-by-push-value calculus introduced by Paul Blain Levy: https://dl.acm.org/doi/10.1145/3537668.3537670

Related Language Implementations