This repository is old. It has been officially moved to https://git.tebibyte.media/arf/arf!
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.
Go to file
Sasha Koshka 18bd681082 Parser now understands the separation between files
This needs to be done because each file has a metadata section at the top.
2022-08-12 12:02:20 -05:00
arfc Replaced all occurences of github.com with git.tebibyte.media 2022-08-12 10:21:36 -05:00
examples Initial commit 2022-08-03 11:09:00 -04:00
file Colored error line/column numbers as well 2022-08-11 13:16:59 -05:00
lexer Lexer now eats :arf symbol at file beginning 2022-08-12 10:38:23 -05:00
parser Parser now understands the separation between files 2022-08-12 12:02:20 -05:00
tests Created basic test for parser 2022-08-12 11:55:17 -05:00
types Fixed PermissionFrom() 2022-08-11 03:52:16 -05:00
.gitignore Added gitignore 2022-08-08 03:08:20 -04:00
LICENSE Added licesnse 2022-08-09 01:02:03 -04:00
README.md Check off lexer in readme 2022-08-11 18:37:00 -05:00
go.mod Replaced all occurences of github.com with git.tebibyte.media 2022-08-12 10:21:36 -05:00
main.go Replaced all occurences of github.com with git.tebibyte.media 2022-08-12 10:21:36 -05:00

README.md

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