general purpose programming language, in the vein of C++
A low level, general-purpose language with high level syntax and expressibility.
I work on Flax in my spare time, and as the lone developer I cannot guarantee continuous development. I'm no famous artist but this is my magnum opus, so it'll not be abandoned anytime soon.
build/tests/
(most of them, anyway — check tester.flx
to see which ones we call) tests basically 90% of the
language, so that's the syntax reference for now.import std::io as _
@entry fn main()
{
println("hello, world!")
}
do {
fn prints<T, U>(m: T, a: [U: ...])
{
for x in a => printf(" %.2d", m * x)
}
printf("set 6:")
let xs = [ 1, 2, 3, 4, 5 ]
prints(3, ...xs)
printf("\n")
}
do {
union option<T>
{
some: T
none
}
let x = option::some("foobar")
let y = option::some(456)
println("x = %, y = %", x as some, y as some)
}
makefile
is the preferred way to build on UNIX systems.brew install llvm
should work, and you might need to do some PPA fiddling for Debian-based distros.flaxc
executable in build/sysroot/usr/local/bin
../libs
to ./build/sysroot/usr/local/lib/flaxlibs/
.env MPIR_ROOT_DIR=... LLVM_ROOT_DIR=... meson meson-build-dir
to set the locations for the dependencies (see meson.build
for the names, there are 4) and configure the build.--buildtype=release
to build a release-mode compiler (highly recommended).ninja -C meson-build-dir
.flaxc.exe
will be found in the build directory.(llvm|mpir|mpfr|libffi)/(Release|Debug)/(include|lib)/...
.Since nobody in their right mind is actually using this, please pass -sysroot build/sysroot
to invocations of the compiler -- else the compiler will default to looking somewhere in /usr/local/lib
for libraries. Speaking of which, standard libraries are looked for in <sysroot>/<prefix>/lib/flaxlibs/
. Prefix is set to /usr/local/
by default.
Since version 0.41.2, executables can be generated on all 3 of our supported platforms! For Linux and macOS, all that is required is a working C compiler in the $PATH
; we call cc
to link object files.
For Windows, even if you are not building the compiler from source (eg. you are using a released binary), Visual Studio 2017 or newer must still be installed, with the "Desktop development with C++", "MSVC v142 (or whatever)", and "Windows 10 SDK" components. However, we currently find the toolchain through established means, so that link.exe
does not have to be in the %PATH%
, ie. you do not have to call vcvarsall.bat
before running the compiler.
Special thanks to the Unofficial Official Language Consultants: darkf, adrian17, sim642, and ryu0.
Feel free to open an issue if you feel that there's any missing feature, or if you found a bug in the compiler. Pull requests are also welcome.
The Flax compiler itself (this repository) is licensed under the Apache 2.0 license (see LICENSE
file). For ease of building, some dependencies
are included in the repository itself (under the external
folder) and compiled together, instead of as a separate library (shared or otherwise).
These are: