This repository has been archived on 2022-08-30. You can view files and clone it, but cannot push or open issues or pull requests.
arf/README.md

52 lines
1.7 KiB
Markdown
Raw Normal View History

2022-08-09 05:51:56 +00:00
# ARF
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](https://github.com/sashakoshka/arf-old).
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)
2022-08-13 00:32:58 +00:00
- 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
2022-08-13 00:32:58 +00:00
- The compiler should not generate new functions or complex logic that the user
has not written
2022-08-15 21:21:34 +00:00
- 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)
2022-08-09 05:51:56 +00:00
## Checklist
- [X] File reader
2022-08-11 23:37:00 +00:00
- [X] File -> tokens
2022-08-09 05:51:56 +00:00
- [ ] Tokens -> syntax tree
- [ ] Syntax tree -> semantic tree
- [ ] Semantic tree -> C -> object file
- [ ] Figure out HOW to implement generics
- [ ] Create a standard library