The hard part was getting System V ABI to a workable state. One reason is the fundamental complexity of the algorithm used to determine how arguments are packed to register, but it is also made worse by the fact that the technical documentation leaves much to be desired.
Also on the Linux front there is now support for referencing dynamic libraries in the JIT:
1 2 3 4 5 6 7 8 | write :: fn(descriptor : s32, buffer : &u8, size : u64) -> (s64) external("libc.so.6", "write") STDOUT_FILENO :: 1 main :: fn() -> () { hello :: "Hello, world!\n" write(STDOUT_FILENO, hello.bytes, hello.length) import("std/process").exit(0) } |
Besides a ton of refactoring here are some more highlights:
- Imports are now lazily resolved for each exported item
- Overloads are now implicitly merged only in the same scope
- Created "std/proccess" and "std/io" modules
- Added support for user-defined intrinsics