Jordan Dehmel, jdehmel@outlook.com
github.com/jorbDehmel/oak
Oak
is a modern low-level functional programming language with
compile-time modifiable syntax. Its usecase is in low-level
language and compiler design (see the later section on
dialects). Oak
also aims to have an integrated build system,
necessitating only one call to the compiler per executable.
This git
repository contains the source code for the acorn
Oak
compiler, as well as some standard packages (extra
,
std
, stl
, and turtle
) and tests suites.
Oak
is most closely related to C
, but also has strong
macro support, modern typing, generics, compile-time syntax
modification and integrated package management. An interesting
consequence of Oak
's compile-time modifiable syntax is that
Oak
can be a high or low level language, depending on the
rules / dialect applied.
Oak
has compile-time-modifiable syntax (see the section on
preprocessor rules), making it highly customizable and flexible
in a way that no other mainstream languages are. In Oak
, if
you think the language should have a certain shorthand, you can
create it. Oak
can similarly be a testing ground for new
language syntaxes. It supports the creation of "dialects", which
are Oak
variants which use preprocessor rules to support
independent syntactical structures.
Note: Oak
has a default syntax, called canonical Oak
.
It also has the std
dialect, provided by the std
package.
The later is more commonly used. Syntax modifications must be
opted into on a file-by-file basis, or specified by the compiler
via the use of dialect files.
Oak
is not compatible with Windows. Oak
assumes a UNIX
system.
To install, open a terminal in this folder and run
make install
. This will compile and install Oak
, as well as
the standard Oak
package. To uninstall, call acorn -A
. To
update, call acorn -a
.
To install all the default Oak
packages, run make packages
in this folder. If this is not run, only the std
package will
be installed. More information about the included packages can
be found in docs/manual.md
.
Oak
versions follow the following format.
major release
.minor release
.patch
As of the time of this writing, Oak
is still on major release
0
. During this phase of development, Oak
is not stable.
This means that code written in one minor release or patch is
not guaranteed to work in another.
Once Oak
moves to major release 1
, code written in one patch
version will be guaranteed to work in another. Code written in
one minor release will most likely work in another. Code written
in one major release will have no guarantees about any other.
More help can be found in the full Oak
manual, which can be
found at ./docs/manual.md
. A suite of examples can be found in
./src/tests
. Please report any bugs on and forward any
specific questions to github.com/jorbDehmel/oak
.