Qualifiers
Every function must declare its linkage explicitly:
fn //globally visible, default linkage
fn_static //translation unit-local only
fn_inline //inline-only, no symbol emitted
fn_asm //raw assembly function, globally visible
fn_static_asm //raw assembly function, TU-local only
fn_inline_asm //inline-only asm, no symbol emitted
fn_async //for fiber (coroutine) ??
Syntax
All functions must explicitly declare their return type. The only exception is void, which may be omitted for brevity when no return value is intended.
fn u32 add(u32 a, u32 b) {
return (a + b);
}
fn_inline u32 max(u32 a, u32 b) {
return ((a > b) ? a : b);
}
fn exit() {
// equivalent to fn void exit()
}
Assembly
Write raw x86_64 assembly using fn_asm or fn_static_asm. Symbol, section, and global declaration are implicit.(placeholder)
fn_asm void* memset(void* dst, u8 value, u64 size) {
test rdx, rdx
je .done
mov rax, rsi
mov rdi, rdi
mov rcx, rdx
rep stosb
.done:
mov rax, rdi
ret
}