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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
Sasha Koshka 2296765e81 Added recursive parsing of type nodes 10 months ago
arfc Replaced all occurences of github.com with git.tebibyte.media 10 months ago
assets Added logo to README 10 months ago
examples Initial commit 10 months ago
file Error widths now work properly 10 months ago
infoerr Error widths now work properly 10 months ago
lexer Changed permission codes to only determine private/public/readonly 10 months ago
parser Added recursive parsing of type nodes 10 months ago
tests Created test case for type section 10 months ago
types Changed permission codes to only determine private/public/readonly 10 months ago
.gitignore Added gitignore 10 months ago
LICENSE Added licesnse 10 months ago
README.md Remove line break at top of readme 10 months ago
go.mod Replaced all occurences of github.com with git.tebibyte.media 10 months ago
main.go Replaced all occurences of github.com with git.tebibyte.media 10 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