fddl Programming Language

Lexer Screenshot Lexer Tests Screenshot REPL Screenshot Parsing 'hello, world'

Overview

fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in Rust.

I have, off and on throughout the last 15 or so years attempted to learn a programming language of some sort. I could always get through the basics, but would get stuck with any real-world projects. And I wouldn't know who to turn to even if I knew where to start.

So I started learning Rust and really like it. I've been following some tutorials and the Crafting Interpreters site as guides for this very problematic programming language.

I like aspects of so many programming languages, but I don't really like any of them, so I always found it hard to pick one and stick with it. But I had the same problem playing World of Warcraft, too.

So I, like many of you, decided to make a hobby programming language to see what may be able to be done with it. This is a brand new project as of September 2024 and I am one person.

The fact that I have a REPL working in this language is nothing short of amazing to me. It's fucking magic.

Features

Getting Started

Keep in mind, this is only at the lexer stage currently. It'll read your inputs and that's it.

To clone the repo:

git clone https://git.fddl.dev/fddl/fddl.git

To run the REPL:

cargo run

To run a fddl script:

cargo run path/to/script.fddl

Examples

Your basic "hello, world":


func main() {
    print(`hello, world in fddl`);
}                    
        

Defining a function inside a module, squaring a number:

##! This is a sample module

module math {

    ### Computes the square of a number
    func square(x) => x ^ 2;
}

define $number := 5;
print(`The square of $number is ${math.square($number)}`);

(At least for right now.)

License

This project is licensed under the MIT License.

Notes and Next Steps

Running the Project

Make sure your project compiles and the tests pass:

cargo build
cargo test

Contact

Git repo