<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fddl Programming Language</title>
    <!-- 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">
    <!-- Google Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Roboto:400,700|Source+Code+Pro" rel="stylesheet">
    <!-- 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">
</head>
<body>
    <header>
        <h1>fddl Programming Language</h1>
    </header>
    <main>
        <section class="images">
            <img src="01.png" alt="Lexer Screenshot">           
            <img src="02.png" alt="Lexer Tests Screenshot">
            <img src="03.png" alt="REPL Screenshot">
            <img src="04.png" alt="Parsing 'hello, world'">
        </section>

        <h2>Overview</h2>
        <p>fddl is a small, experimental programming language, built in Rust, designed to explore language implementation concepts. It's a blend of ideas from various languages but remains unique, with its own syntax and quirks.</p>
        <p>For years, I’ve tried to learn various programming languages, and while I could master the basics, the real-world projects often eluded me. Rust, however, clicked for me, and fddl was born out of this journey.</p>

        <p>I like aspects of many programming languages, but I didn’t fully enjoy any of them, which made it difficult to commit to one. So, like many others, I decided to create my own hobby programming language.</p>

        <h2>Features</h2>
        <ul>
            <li>Custom syntax with unique operators and keywords</li>
            <li>Documentation comments using <code>#</code>, similar to Rust's style</li>
            <li>Lexer and parser built from scratch</li>
        </ul>

        <h2>Getting Started</h2>
        <p>To clone the repo:</p>
        <pre><code class="language-bash">git clone https://git.fddl.dev/fddl/fddl.git</code></pre>
        <p>To run the REPL:</p>
        <pre><code class="language-bash">cargo run</code></pre>
        <p>To run a fddl script:</p>
        <pre><code class="language-bash">cargo run path/to/script.fddl</code></pre>

        <h2>Examples</h2>
        <p>Your basic "hello, world":</p>
        <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

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)}`);
        </code></pre>
        <p>(At least for now.)</p>

        <h2>Notes and Next Steps</h2>
        <ul>
            <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>
            <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>
            <li class="task-list-item"><input type="checkbox" checked disabled> Made a basic website.</li>
        </ul>

        <h2>Running the Project</h2>
        <p>Make sure your project compiles and the tests pass:</p>
        <pre><code class="language-bash">cargo build
cargo test</code></pre>

        <div class="contact">
            <p><a href="mailto:email@example.com">Contact</a></p>
            <p><a href="https://git.fddl.dev/fddl/fddl">Git repo</a></p>
        </div>
    </main>
    <footer>
        &copy; 2024 fddl Programming Language
    </footer>
    <!-- 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>
</body>
</html>