This repository is old. It has been officially moved to https://git.tebibyte.media/arf/arf!
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
![]() |
10 months ago | |
---|---|---|
arfc | 10 months ago | |
assets | 10 months ago | |
examples | 10 months ago | |
file | 10 months ago | |
infoerr | 10 months ago | |
lexer | 10 months ago | |
parser | 10 months ago | |
tests | 10 months ago | |
types | 10 months ago | |
.gitignore | 10 months ago | |
LICENSE | 10 months ago | |
README.md | 10 months ago | |
go.mod | 10 months ago | |
main.go | 10 months ago |
README.md
The ARF programming language.
This is still under development and does not compile things yet. Once complete, it will serve as a temporary compiler that will be used to write a new one using the language itself.
The old repository can be found here.
ARF is a low level language with a focus on organization, modularization, and code clarity. Behind it's avant-garde syntax, its basically just a more refined version of C.
A directory of ARF files is called a module, and modules will compile to object files (one per module) using C as an intermediate language (maybe LLVM IR in the future).
Design aspects
These are some design goals that I have followed/am following:
- The standard library will be fully optional, and decoupled from the language
- The language itself must be extremely simple
- Language features must be immutable (no reflection or operator overloading)
- Prefer static over dynamic
- Data must be immutable by default
- Memory not on the stack must be allocated and freed manually
- Language syntax must have zero ambiguity
- The compiler should not generate new functions or complex logic that the user has not written
- One line at a time - the language's syntax should encourage writing code that flows vertically and not horizontally, with minimal nesting
Planned features
- Type definition through inheritence
- Struct member functions
- Go-style interfaces
- Generics
- A standard library (that can be dynamically linked)
Checklist
- File reader
- File -> tokens
- Tokens -> syntax tree
- Syntax tree -> semantic tree
- Semantic tree -> C -> object file
- Figure out HOW to implement generics
- Create a standard library