• FiM++: An Update


    You guys really make me proud.

    What started as a long, drawn-out joke has since then turned into a comparatively large project for several members of the community as they worked to formalize my (admittedly poor) language specification and turn it into something that could actually be implemented and used for real applications.

    Let me be clear on that- the current language specification is Turing-complete as far as I can tell. That's a major feat. You could actually use it for projects if you so desired once full-fledged interpreters have been written, and they're already well on their way to doing so.

    Thank you all for taking this seed of an idea, planting it, and making something awesome out of it. I'm floored. I've never been happier with our tech-oriented members of the community than I am right now. I could have never done any of this myself, and it shows me how incredibly talented some of you can be if given an idea. I can't take any credit for this. It's all on you guys. You rock.

    Click past the break for a breakdown on where everyone has headed with this. Trust me, you're not going to be disappointed. As always, if I missed anything major here, email me at [email protected] and I will include it.



    Just for reference, here's the original post I made.



    [Syntax Specification] by Digit Shine

    Firstly, as promised, there now exists a full, professional syntax specification pulling together all the work that's been done up to this point regarding formalizing the language and how it should appear. The designers have decided to go with a Java-style syntax, like my original spec. This massive document covers everything important: basic syntax, variable assignment, comparison operators, class declaration, interfaces, methods, and includes three example programs. Yes, it has Hello World!

    Though (slightly) incomplete, this document would be an invaluable tool to anyone writing an interpreter. It does a fantastic job of ironing out the kinks present in what I originally presented. If you look at nothing else in this compilation, look at this. It's amazing.



    [First Forray: 99 Jugs of Cider] by DeftCrow

    This was the first comprehensive example program written in the style of the original syntax I laid out, and the first time that some of the original problems were ironed out (excepting the comments section of the blog post) and where the beginnings of a formal BNF specification emerged.

    This was featured in the original post, but it was such a seminal document I had to include it.



    [FIM++ Interpreter] by Karol 'vytah' Stasiak

    Where's the beef? Here's the beef, baby. This is currently the larger of the two FiM++ interpreter projects I have seen thus far. It is available on GitHub and has been released under the GNU General Public License 3. It requires Scala to compile (although JARs are included, though they may be behind the actual source files - see the page for more information) and can do more advanced things like call Java classes within it to bring more power to the language. By itself, it supports integer arithmetic, console output, dynamically growing arrays, and subroutines.

    A simple GUI calculator and a Brainfuck interpreter have been written with this code. Remember when I said this stuff was getting real? It got real some time ago.



    [Simple Interpreter] by LambdaDusk

    This was the first interpreter I saw, and was shown to me on Twitter, though I am unsure as to its progress at this point. If you're there, @LambdaDusk, let me know and I'll update this entry with more information!

    As of this moment, though, it's a good example of how the language would be interpreted. It can certainly be extended with any of the above projects, and has the advantage of being web-based, so results are more immediate.