23 releases (5 breaking)

0.6.0-alpha.1 Mar 3, 2023
0.6.0-alpha Mar 2, 2023
0.5.2 Feb 21, 2023
0.4.9 Feb 19, 2023
0.1.0 Nov 5, 2022

#403 in Programming languages


Used in diatom-cli

Apache-2.0

335KB
9K SLoC

The Diatom Programming Language

Unit Tests doc Crates.io license

dependency status issue pr coverage

A dynamic typed scripting language for embedded use in applications. This project is yet another attempt of being a "better" lua.

Warning: Project is still in experimental stage and API is considered as unstable.

Features

  • Never panic*
  • High Performance**: Runs at most 2x speed of lua 5.4, 6x speed of python 3.10
  • Support for a tracing jit (Planned)
  • rustc style helpful error message
  • No global variable
  • No nil/None value
  • Has real integer type
  • Has 0-indexed real list type
  • Support tuple for multiple return
  • Support for string indexed table
  • Support for meta table and OOP style method call syntax
  • Support for gradual typing (Planned)
  • Support for macro system (Planned)

*: Panic may still be triggered by external functions
**: Results are from our benchmarks which may vary betweens different builds and test codes.

Quick Start

Try Diatom online

You can try diatom at the online playground.

Install with cargo

Make sure you have Rust and Cargo installed.

cargo install diatom-cli
diatom-cli --help # show help for diatom CLI
diatom-cli # Enter diatom REPL console

Build from source

Run the following script:

git clone https://github.com/diatom-lang/diatom.git
cd diatom
cargo run --release # Run interactive console

Syntax highlight

Reference & Grammar

The Reference Book

The Diatom Reference (with examples) is available at here.

Examples

For standard library function and built-in types and methods checks examples. These examples are checked by unit tests.

Embedding in Application

Embedding in Rust Application

Diatom is available at crates.io with detailed examples.

To use latest build, add this repo to your Cargo.toml. Latest build documentation is available here.

Use C bindings

Work in progress.

Feature Showcase

Functional style std-lib

Screenshot 2023-02-19 at 10 23 38 PM

Pretty error reporting and trace-back

Screenshot 2023-02-19 at 10 00 53 PM

Expression based syntax

Screenshot 2023-02-19 at 10 25 16 PM

Interactive REPL console with syntax highlight

Screenshot 2023-02-19 at 10 26 39 PM

Dependencies

~5–13MB
~149K SLoC