This repository is old. It has been officially moved to https://git.tebibyte.media/arf/arf!
This repository has been archived on 2022-08-29. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
2022-08-11 04:25:56 -05:00
arfc Added stub arfc command 2022-08-08 03:09:16 -04:00
examples Initial commit 2022-08-03 11:09:00 -04:00
file Lexer can now tokenize 2022-08-10 14:18:28 -04:00
lexer Hexidecimal numbers are now properly read 2022-08-11 04:25:56 -05:00
tests/lexer Added number lexing unit test 2022-08-11 04:23:06 -05:00
types Fixed PermissionFrom() 2022-08-11 03:52:16 -05:00
.gitignore Added gitignore 2022-08-08 03:08:20 -04:00
go.mod Initial commit 2022-08-03 11:09:00 -04:00
LICENSE Added licesnse 2022-08-09 01:02:03 -04:00
main.go Added unit test for lexer 2022-08-10 11:28:29 -04:00
README.md Added more information about the language's design to readme 2022-08-09 21:15:49 -04: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.

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)
  • Data must be immutable by default
  • Memory not on the stack must be allocated and freed manually
  • Language syntax must have zero ambiguity

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