This repository is old. It has been officially moved to https://git.tebibyte.media/arf/arf!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
Sasha Koshka 0ac71fa1c3 Added progress heatmap 1 month ago
arfc Replaced all occurences of github.com with git.tebibyte.media 2 months ago
assets Added progress heatmap 1 month ago
examples Fixed parsing of interface section behaviors 1 month ago
file Error widths now work properly 1 month ago
infoerr Error widths now work properly 1 month ago
lexer Implemented thos bad boys 1 month ago
parser yeah 1 month ago
tests Implemented thos bad boys 1 month ago
types Changed permission codes to only determine private/public/readonly 1 month ago
.gitignore Added gitignore 2 months ago
LICENSE Added licesnse 2 months ago
README.md Added progress heatmap 1 month ago
face_test.go Split tests into multiple files 1 month ago
go.mod Replaced all occurences of github.com with git.tebibyte.media 2 months ago
main.go Replaced all occurences of github.com with git.tebibyte.media 2 months ago

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)
  • 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

Compiler Progress

Progress heatmap
  • Yellow: needs to be completed for the MVP
  • Lime: ongoing progress in this area
  • Green: Already completed