Release v0.8.0
It has been a while since the last release! A lot of refactoring and cleanup has happened to the LLVM backend, semantic analyzer, and AST generator, but some new features and niceties have been squeezed in as well:
Name Mangling
To allow for modules in the future, name mangling has been added for exported variables. This means that functions and variables using the export
keyword will not be able to communicate with C libraries (for the time being). I am looking into ways to allow for explicitly exporting with C naming conventions, but for now, the name mangling will remain the way it is.
Reference Types
You can now create C-like pointers using the new reference type:
num := 1234
ref := &i
ref2: &Int = &i
num2 := *ref
You can also have nested/double references, like so:
a := 1
b: &Int := &a
c: &&Int := &b
Skull Shared Library
Running make install-dev
will install the libskull.so
library, giving users more access to the Skull compiler and it's internals. Support for a CTypes Python API is also in the works, but is not high priority at the moment.
Docker Images
Docker images for Alpine, Archlinux, and Ubuntu have been added! Go to the packages page for more info.
Other Changes
- Add
--color
flag - Add redundant reassignment check back in
- Use LLVM API to emit object files instead of using external llc command (~40ms speedup)