4.0 KiB
The peon programming language
Peon is a simple, functional, async-first programming language with a focus on correctness and speed.
Project structure
src/
-> Contains the entirety of peon's toolchainsrc/memory/
-> Contains peon's memory allocator and GC (TODO)src/frontend/
-> Contains the tokenizer, parser and compilersrc/frontend/meta/
-> Contains shared error definitions, AST node and token declarations as well as the bytecode used by the compiler
src/backend/
-> Contains the peon VM and type systemsrc/util/
-> Contains utilities such as the bytecode debugger and serializer as well as procedures to handle multi-byte sequencessrc/config.nim
-> Contains compile-time configuration variablessrc/main.nim
-> Ties up the whole toolchain together by tokenizing, parsing, compiling, debugging, (de-)serializing and executing peon code
docs/
-> Contains documentation for various components of peon (bytecode, syntax, etc.)tests/
-> Contains tests (both in peon and Nim) for the toolchain
Credits
- Araq, for creating the amazing language that is Nim (as well as all of its contributors!)
- Guido Van Rossum, aka the chad who created Python and its awesome community and resources
- The Nim community and contributors, for making Nim what it is today
- Bob Nystrom, for his amazing book that inspired me and taught me how to actually make a programming language (kinda, I'm still very dumb)
- Njsmith, for his awesome articles on structured concurrency
- All the amazing people in the r/ProgrammingLanguages subreddit and its Discord server
- Art <3
- Everyone to listened (and still listens to) me ramble about compilers, programming languages and the likes (and for giving me ideas and testing peon!)
- ... More? (I'd thank the contributors but it's just me :P)
- Me! I guess
Project State
Disclaimer: The project is still in its very early days: lots of stuff is not implemented, a work in progress or otherwise outright broken. Feel free to report bugs!
Also, yes: peon is yet another programming language inspired by Bob's book, but it is also very different from Lox, which is an object-oriented, dynamically typed and very high level programming language, whereas peon is a statically-typed, functional language which aims to allow low-level interfacing with C and Nim code while being a breeze to use.
Also, peon will feature structured concurrency with coroutines (think Futures/Fibers but without callback hell). Since, unlike Lox, peon isn't a toy language, there's obviously plans to implement creature comforts like an import system, exception handling, a package manager, etc.
TODO List
In no particular order, here's a list of stuff that's done/to do (might be incomplete/out of date):
Toolchain:
- Tokenizer (with dynamic symbol table)
- Parser (with support for custom operators, even builtins)
- Compiler -> Being written
- VM -> Being written
- Bytecode (de-)serializer
- Static code debugger
- Runtime debugger/inspection tool
Type system:
- Custom types
- Intrinsics
- Generics -> WIP
- Functions
Misc:
- Pragmas -> WIP (Some pragmas implemented)
- Attribute resolution
- method-like call syntax without actual methods (dispatched at compile-time)
- ... More?
The name
The name for peon comes from my and Productive2's genius and is a result of shortening the name of the fastest animal on earth: the Peregrine Falcon. I guess I wanted this to mean peon will be blazing fast