Language at a glance
A code-first tour of the v12 generics, Result, match, closures, defer, pointers and C ABI fixtures.
The examples below are copied from the supplied v12.0.0 release bundle under examples/native_v12_hir/. They are machine-proof fixtures, not invented tutorial syntax.
01 generic function + Result§
pub fn id[T](value: T) -> T:
return value
fn add_two(input: Result[u32, u32]) -> Result[u32, u32]:
let cleanup_token: u32 = 1 as u32
defer [borrow cleanup_token]:
DEFER_MARK = cleanup_token
let value = input?
return Result[u32, u32].Ok(id[u32](value) + (2 as u32))02 slice + StringView + closure§
let bytes: array[u8, 2] = [40 as u8, 2 as u8]
let view: slice[u8] = borrow bytes
let text: StringView = "V12"
let factor: u32 = bytes[1] as u32
let callback = fn [borrow factor](value: u32) -> u32:
return value + factor03 struct + match§
let candidate: u32 = callback(first(view) as u32)
let pair = Pair[u32, u8](first = candidate, second = text[0])
let failed = add_two(Result[u32, u32].Err(7 as u32))
match failed:
case Result.Ok(value):
return value as int
case Result.Err(error):
if error != (7 as u32):
return 104 C ABI callback§
pub extern "C" fn dbyte_c_callback(value: i32) -> i32:
return value + (1 as i32)
let c_value: i32 = c_roundtrip(dbyte_c_callback, 36 as i32)
if c_value != (42 as i32):
return 105 user-profile generic/closure/syscall§
fn id[T](value: T) -> T:
return value
pub fn user_main() -> int:
let bytes: array[u8, 2] = [40 as u8, 2 as u8]
let view: slice[u8] = borrow bytes
let factor: u32 = view[1] as u32
let add = fn [borrow factor](value: u32) -> u32:
return value + factor
let written: int = user.syscall3(1 as u32, 1 as u32, "HELLO FROM DBYTE USER\r\n", 23 as usize)Full package fixtures: examples/native_v12_hir/kernel.dby, user.dby, c_archive.dby, serial.dby, arch_x86.dby.
SOURCE POLICY: release/tag documents define contracts; examples are copied from the supplied v12.0.0 package or explicitly marked as explanatory. Unsupported claims are not upgraded by prose.