The raw layer
print, read_file, concat and the rest of the standard library are ordinary qdx, in the std/ directory, and you can read them. They are built on a handful of functions the compiler provides itself, whose names all start with raw_.
What is down there
Here is how the library makes bytes one byte long.
fn byte(value: int) -> bytes {
let out = raw_alloc(1);
raw_poke(raw_addr(out), value);
out
}raw_alloc makes new bytes of a given length, filled with zeros. raw_addr gives the memory address where they start, and raw_poke writes a byte at an address. Reading goes through raw_peek, and talking to the operating system goes through raw_kernel_call.
Why the name
Chapter 1 said nothing changes after it is made. raw_poke breaks that rule, and it works on bare addresses with nothing checking them. Write one byte too far and the program is quietly wrong, or stops with no message at all.
The standard library uses these functions in a careful pattern: allocate, fill in, then hand the value out and never touch it again. From the outside, byte(65) is as fixed as any other value.
When to use them
Almost never. If the library is missing something, the usual answer is a new function written with the ones it already has. Reach for a raw_ function only when you are adding something the library cannot express, such as a new call to the operating system, and keep it behind a function with an ordinary name so that nothing else has to know.
Where to go next
That is the whole language. The reference lists every rule, every built-in function and every library function in one place, for the day you want the exact name of something.