2024-09-15 03:58:54 +01:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
2024-09-15 06:48:28 +01:00
< title > fddl Programming Language< / title >
2024-09-15 07:19:32 +01:00
<!-- Meta Tags for SEO -->
< meta name = "description" content = "fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in Rust." >
< meta name = "keywords" content = "fddl programming language, Rust, hobby language, lexer, parser, interpreter, custom syntax, language implementation" >
< meta name = "author" content = "Tristan" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
<!-- Open Graph Meta Tags for Social Sharing -->
< meta property = "og:title" content = "Fiddle Programming Language" >
< meta property = "og:description" content = "A small programming language designed to help learn language implementation concepts in Rust." >
< meta property = "og:url" content = "https://fddl.dev/" >
< meta property = "og:type" content = "website" >
<!-- Twitter Card Meta Tags -->
< meta name = "twitter:title" content = "Fiddle Programming Language" >
< meta name = "twitter:description" content = "A Rust-based hobby programming language with custom syntax and unique features." >
< meta name = "twitter:card" content = "summary_large_image" >
2024-09-15 03:58:54 +01:00
<!-- Google Fonts -->
< link href = "https://fonts.googleapis.com/css?family=Roboto:400,700|Source+Code+Pro" rel = "stylesheet" >
2024-09-15 06:48:28 +01:00
<!-- Highlight.js Styles -->
< link rel = "stylesheet" href = "//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/default.min.css" >
<!-- Custom Stylesheet -->
< link rel = "stylesheet" href = "styles.css" >
2024-09-15 03:58:54 +01:00
< / head >
< body >
< header >
2024-09-15 06:48:28 +01:00
< h1 > fddl Programming Language< / h1 >
2024-09-15 03:58:54 +01:00
< / header >
< main >
< section class = "images" >
2024-09-15 06:48:28 +01:00
< img src = "01.png" alt = "Lexer Screenshot" >
2024-09-15 03:58:54 +01:00
< img src = "02.png" alt = "Lexer Tests Screenshot" >
2024-09-15 04:17:31 +01:00
< img src = "03.png" alt = "REPL Screenshot" >
2024-09-15 06:48:28 +01:00
< img src = "04.png" alt = "Parsing 'hello, world'" >
2024-09-15 03:58:54 +01:00
< / section >
< h2 > Overview< / h2 >
2024-09-15 04:17:31 +01:00
< p > fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in < a href = "https://rust-lang.org" > Rust< / a > .< / p >
2024-09-15 03:58:54 +01:00
< p > 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.< / p >
< p > So I started learning Rust and really like it. I've been following some tutorials and the < a href = "http://craftinginterpreters.com/" > Crafting Interpreters< / a > site as guides for this very problematic programming language.< / p >
< p > 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.< / p >
2024-09-15 06:48:28 +01:00
< p > 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.< / p >
2024-09-15 04:17:31 +01:00
< p > The fact that I have a REPL working in this language is nothing short of amazing to me. It's fucking magic.< / p >
2024-09-15 03:58:54 +01:00
< h2 > Features< / h2 >
< ul >
2024-09-15 06:48:28 +01:00
< li > Custom syntax with unique (and arguably deranged) operators and keywords< / li >
2024-09-15 03:58:54 +01:00
< li > Documentation comments using < code > #< / code > , similar to Rust's style< / li >
2024-09-15 06:48:28 +01:00
< li > Lexer and parser built from scratch< / li >
2024-09-15 03:58:54 +01:00
< / ul >
< h2 > Getting Started< / h2 >
2024-09-15 20:59:42 +01:00
< p > Keep in mind, this is only at the lexer stage currently. It'll read your inputs and that's it.< / p >
2024-09-15 06:48:28 +01:00
< p > To clone the repo:< / p >
2024-09-15 21:03:38 +01:00
< pre > < code class = "language-bash" > git clone https://git.fddl.dev/fddl/fddl.git< / code > < / pre >
2024-09-15 03:58:54 +01:00
< p > To run the REPL:< / p >
2024-09-15 06:48:28 +01:00
< pre > < code class = "language-bash" > cargo run< / code > < / pre >
2024-09-15 04:17:31 +01:00
< p > To run a fddl script:< / p >
2024-09-15 06:48:28 +01:00
< pre > < code class = "language-bash" > cargo run path/to/script.fddl< / code > < / pre >
2024-09-15 03:58:54 +01:00
< h2 > Examples< / h2 >
2024-09-15 20:59:42 +01:00
< p > Your basic "hello, world":< / p >
2024-09-15 06:48:28 +01:00
< pre > < code class = "language-rust" >
func main() {
print(`hello, world in fddl`);
}
< / code > < / pre >
< p > Defining a function inside a module, squaring a number:< / p >
< pre > < code class = "language-rust" > ##! This is a sample module
2024-09-15 03:58:54 +01:00
module math {
### Computes the square of a number
func square(x) => x ^ 2;
}
define $number := 5;
2024-09-15 06:48:28 +01:00
print(`The square of $number is ${math.square($number)}`);< / code > < / pre >
2024-09-15 03:58:54 +01:00
< p > (At least for right now.)< / p >
< h2 > License< / h2 >
< p > This project is licensed under the MIT License.< / p >
< div class = "notes" >
< h2 > Notes and Next Steps< / h2 >
< ul >
2024-09-15 20:59:42 +01:00
< li class = "task-list-item" > < input type = "checkbox" checked disabled > Added first new set of tokens and features, added the first < code > lexer< / code > tests.< / li >
2024-09-15 03:58:54 +01:00
< li class = "task-list-item" > < input type = "checkbox" disabled > < code > parser< / code > module is a placeholder.< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > < code > interpreter< / code > module is a placeholder.< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > Implement a more robust error handling mechanism instead of using < code > stderr< / code > .< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > Implement string interpolation (backticks with < code > $variable< / code > )< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > Continue to expand tests to cover all new syntax and features.< / li >
2024-09-15 04:17:31 +01:00
< li class = "task-list-item" > < input type = "checkbox" checked disabled > Made a crappy website.< / li >
2024-09-15 03:58:54 +01:00
< / ul >
< / div >
< h2 > Running the Project< / h2 >
< p > Make sure your project compiles and the tests pass:< / p >
2024-09-15 06:48:28 +01:00
< pre > < code class = "language-bash" > cargo build
cargo test< / code > < / pre >
2024-09-15 03:58:54 +01:00
< div class = "contact" >
2024-09-15 06:48:28 +01:00
< p > < a href = "/cdn-cgi/l/email-protection#cabeb8a3b9beaba48aacaeaea6e4aeafbc" > Contact< / a > < / p >
2024-09-15 21:03:38 +01:00
< p > < a href = "https://git.fddl.dev/fddl/fddl" > Git repo< / a > < / p >
2024-09-15 03:58:54 +01:00
< / div >
< / main >
< footer >
2024-09-15 06:48:28 +01:00
© 2024 fddl Programming Language
2024-09-15 03:58:54 +01:00
< / footer >
2024-09-15 06:48:28 +01:00
<!-- Highlight.js Scripts -->
< script src = "//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js" > < / script >
< script > hljs . highlightAll ( ) ; < / script >
<!-- Cloudflare Email Protection Script -->
< script data-cfasync = "false" src = "/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js" > < / script >
2024-09-15 03:58:54 +01:00
< / body >
2024-09-15 06:48:28 +01:00
< / html >