GitHub Repo: github.com/ArcadeMakerSources/ArcadeMaker
(first of all, i want to say that I made this project for fun and challenge. I always wanted to create my own language. This has no business goal or something.)
So the project is a 2D game engine (MonoGame backend) inspired by GameMaker 8. It includes its own IDE (built with WinForms) and an interpreted programming language that I wrote myself.
The language - definitely the biggest challenge in the project - is a simple dynamically typed language. When I started, I had zero knowledge of how to build something like this. I didn’t even know I was making an interpreter; at first I called it a compiler. It was a personal challenge, and I wanted to figure everything out without using any resources or tutorials. My mindset was basically: "I need to write software that takes a text file containing code and just does what it says."
Somehow, I made it work. In the beginning, running an empty loop counting to 1M took 7 seconds. After a lot of performance work and rebuilding parts of the system, the same machine can now run a 30M loop in 2–3 seconds. Pretty nice improvement.
The language itself is a bit unusual, and I want to share one small feature I really like: loop counters.
foreach item in ['a', 'b', 'c'] : counter c
{
println(c + ": " + item)
}
// Output:
// 0: a
// 1: b
// 2: cNot a complicated feature, but pretty useful.
Anyway, these days I barely have time to work on the project, so I decided to open-source it. I’m hoping people here will find it interesting and help turn it into something real. If you're looking for cool projects to contribute to, that's it.
Would love to get some feedback.🙂
Tuhin PaulPosted Aug 22, 2026, 5:25 PM
Building a custom programming language and interpreter from scratch especially without prior knowledge or tutorials is no small feat. The performance improvement you achieved (from 7 seconds for 1M iterations down to 2-3 seconds for 30M) shows serious dedication to optimization.
Can you share the grammar/specification? Contributors need to understand:
Variable scoping rules
Type coercion behavior
Error handling semantics
Memory management (GC?)
Add a
CONTRIBUTING.mdsection with:"Where to start" guide (e.g., "Fix bug #X" or "Implement drawCircle()")
Code style guidelines
Testing strategy (unit tests for language features? integration tests for engine?)
Sam HobbsPosted Aug 21, 2026, 6:38 PM
About 40 years ago I wrote a program using COBOL that processed aircraft manufacturing instructions (written for only people to use) to get the tools and materials from the instructions.
C# is a better tool for that but if I were to do something like that now I would use tools that generate a lexer (syntax processor) and a parser (semantic processor). The Gardens Point Lexer Generator and Gardens Point Parser Generator are written in C# and generate C#. They are designed based on technology that have existed for a long time, primarily Lex and YACC (Yet Another Compiler Compiler) that generate C or C++ code. You can learn about all that from searching and asking AI.
Typically a lexer is used initially to process the characters syntactically and the output tokens of that is used by a parser to recognize semantics.
My nephew is a professional game developer and he uses Lex and YACC to create scripting tools for games.
A little bit of background that is not directly relevant is that there is a public-domain version of YACC called Bison and a public-domain version of Lex called Flex. The PHP compiler uses something similar called RE2C for syntactic processing.