6 releases (3 breaking)

0.4.0 Jul 2, 2023
0.3.1 Mar 14, 2023
0.2.0 Mar 5, 2023
0.0.1 Feb 24, 2023

#540 in Programming languages

35 downloads per month

MIT/Apache

455KB
16K SLoC

A snake inside of a gear shape

Hebi

This repository hosts a dynamically typed language, its compiler, and VM.

🚧 This branch contains a rewrite of the language. It is currently heavily WIP! 🚧

Usage

Install the library (currently only available via git):

$ cargo add --git https://github.com/jprochazk/hebi.git --branch v2

Import it, and run some code:

use hebi::Hebi;

fn main() {
  let mut hebi = Hebi::new();

  println!("1 + 1 = {}", hebi.eval("1 + 1").unwrap());
}

Hebi can do much more than this, though! Here are some of its features:

  • Syntax similar to Python, including significant indentation
  • First-class functions
  • Classes with single inheritance
  • Easy Rust function and struct binding
  • Async support

Visit the examples directory to see Hebi in action.

You can run an example using cargo run --example <name>:

$ cargo run --example basic

Development

The first step is to install Rust and Cargo via rustup.

xtask

This repository uses cargo-xtask for various utilities, scripts, and tasks. That means you don't need anything other than Rust and Cargo. No makefiles, Python, or Bash.

To see all available tasks, run:

$ cargo xtask

To run one of them, use:

$ cargo xtask <task>

Or the slightly shorter:

$ cargo x <task>

For example:

# Run all tests and examples
$ cargo xtask test

Some tasks use tools which you'll have to install, though these are kept to just a select few, and ideally always installed through either rustup or cargo.

  • Miri (rustup +nightly component add miri)
  • Insta (cargo install --locked cargo-insta)
  • mdBook (cargo install --locked mdbook)

Why Hebi?

I thought it was appropriate, because the language is in the Python family, and Hebi (蛇) means snake in Japanese.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~5MB
~75K SLoC