Ask HN: In which programming language is it better to make your own language?
7 Forgret 16 8/9/2025, 2:36:05 PM
I decided to create my own programming language but I don't know which one to use, some say Python, others say C.
Please help me decide.
Thus, I vote Python: it has this amazing parser library, it's garbage-collected (no need to fiddle with memory allocations, like in C), it's dynamically typed (so you basically don't need to think about types at all), it now has a `match` statement (!) that makes it super easy to dissect your parse trees and abstract syntax trees.
I'd recommend selecting a language you already know well, a language you also want to learn, or a language with libraries (or good bindings to libraries) that you want to take advantage of. If you want to make a compiler but don't want to do code generation (to machine code) yourself you may want to use a language with good LLVM bindings to get support for a lot of target platforms. If you're interested in making an interpreter, you may want to consider the libraries available to the host language. An interpreter implemented in Python gives you a chance to use Python libraries in your new language (same argument for other languages, the decision would be based on what libraries you might want to use).
Also I found it useful to compare other people's implementations to get a feel for different approaches. See this suggestion: https://news.ycombinator.com/item?id=28479120
Boost.Spirit https://www.boost.org/library/latest/spirit/ Boost.Parser https://www.boost.org/library/latest/parser/ (which I think succeeds Boost.Spirit Boost.Metaparse: https://www.boost.org/doc/libs/latest/doc/html/metaparse.htm...
All of these allow you to build a parser using C++ syntax and then add semantic or composed actions.
If you're doing an interpreted language, things get a lot looser. If you've done any programming in the past, it's likely the language you're most familiar with will work ok.
After you know what you want to build, you could convert it to C, C++, or Rust to make it fast.
I then used python match syntax to convert my ast to C.
So then you could say it was programmed in english*
*Or whatever human language you want.
[0] https://www.antlr.org/
[1] https://en.wikipedia.org/wiki/OMeta
[2] https://github.com/pczarn/panini
[3] https://github.com/topics/parser
Thanks for posting.