Qualifiers
Every function must declare its linkage explicitly:
//globally visible, default linkage
static //translation unit-local only
inline //inline-only, no symbol emitted
asm //raw assembly function, globally visible
static_asm //raw assembly function, TU-local only
inline_asm //inline-only asm, no symbol emitted
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.
u32 add(u32 a, u32 b) {
return (a + b);
}
inline u32 max(u32 a, u32 b) {
return ((a > b) ? a : b);
}
exit() {
// equivalent to void exit()
}
Assembly
Write raw x86_64 assembly using fn_asm
or fn_static_asm
. Symbol, section, and global declaration are implicit.(placeholder)
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
}