Natives: the Audit Table of the Manifest#
Status: step 1 of the kernel of natives built (2026-10-23) — every native declaration of std/ and every entry of
the manifest has a row below with a verdict, and the kernel is a closed list. Nothing else changed: no native, no
syntax, no driver flag and no name the compiler looks up is touched, so the seed is not involved. The measuring and the
rewrites are the next steps of the kernel of natives (ROADMAP.md, "The kernel of natives").
Every native of std/ is work for every back end. Before a native is rewritten in TorbScript, this record says what
each one is: a kernel operation a back end has to provide, a rewrite that becomes ordinary TorbScript on the
kernel, or a keep at the edge of the machine. The later steps work from this one list:
COLLECTIONS.md gap 6 (Buffer) rebuilds the collections, native fn bodies as IR
(BACKEND.md 3.7) turn the kernel rows into the operations std/ itself names, and each rewrite is
decided by a measurement.
What a row is#
The rows are the entries of the manifest, nativeEntries() in compiler/src/backend/c/natives.trb (BACKEND 3.7), one
row per NativeEntry, grouped by owner type or std/ module. A native that is generated per width (Int8.add to
UInt64.add) has one row per width, because the manifest has one entry per width. The columns:
- Name is
NativeEntry.name, exactly. - Target is the kind of
NativeEntry.target(Intrinsic,Runtime,Derived,Container,Lowered,ArrayStorage,Target,ScriptTable,Embedded,Machine,ScriptHost), with(planned)for an entry whose state is.Planned. The verdict of a planned entry is the verdict of what it will be. - Verdict is
kernel,rewriteorkeep. - Group is, for
kernel, one of the kernel groupsK1toK8below; forkeep, one of the edges below;-forrewrite. - Shape is, for
rewrite, the TorbScript form the native takes. Needs lists the kernel groups that form stands on. Measure names the measurement that decides the rewrite,M1toM6below. All three are-for the other verdicts.
The verdicts#
kernel— an operation of the closed list below. A back end implements it (an IR intrinsic, anArrayorBufferoperation) and everything else instd/is TorbScript on top of it.rewrite— the native can be written in TorbScript on the kernel. The verdict is the target: the measurement of the row decides whether the rewrite is not slower than the bound (10% on the benchmark of its group, the bound oftools/buffer-cost.sh). A rewrite that misses it stays as it is and its row changes tokeeporkernelin the same change, with the number in its commit message.keep— an edge that cannot be written in TorbScript: the operating system, a clock, a file, a network, the terminal, the process, the scheduler's threads, TLS, the VM, the test harness, the compiler's own reflection. Eachkeeprow names its edge.
The kernel#
The kernel is this list and nothing else. A kernel row belongs to exactly one group, and the drift check fails for a
group that is not in this table.
| Group | Name | Members |
|---|---|---|
| K1 | Integer arithmetic | add, subtract, multiply, divide, remainder, negate of every integer width, checked; the wrapping UInt64.addedWrapping and UInt64.multipliedWrapping that hashing and the long arithmetic of Decimal need |
| K2 | Bit operations | bitwiseAnd, bitwiseOr, bitwiseExclusiveOr, bitwiseNot, shiftedLeft, shiftedRight of every integer width |
| K3 | Float arithmetic and math functions | add, subtract, multiply, divide, remainder, negate of Float32 and Float64; the operations IEEE 754 defines (squareRoot, floor, ceiling, round); the library functions of Float64 (power, exponential, naturalLogarithm, the trigonometric ones), which every back end must answer bit for bit like the others |
| K4 | Comparisons | equals of the numbers, Bool, Char and String (the Equal and TextEqual intrinsics), the ordering intrinsics (Less to GreaterOrEqual, TextCompare), and the identity test isSame |
| K5 | Raw storage | Array.unfilled, Array.load, Array.store; Buffer.withCapacity, length, get, set, append, holdsClose; the bytes of a text: String.byteLength, byteAt, sliceBytes and add |
| K6 | Bytes to numbers | Float64.bits, Float64.ofBits, Float32.bits, Float32.ofBits |
| K7 | Numeric conversion | the Convert intrinsic between the widths and kinds: Int64.from, Float64.from(Int64), Float64.from(Float32), Int64.fromChar |
| K8 | Build constants | OperatingSystem.current, Architecture.current and ByteOrder.current, answered by the build |
Why K3 holds the math functions: a sine that differs in the last bit between two back ends is a different program, and
a bit-exact libm in TorbScript is a project of its own with no gain for a back end. Why K1 holds the wrapping pair:
hashing and Decimal limbs need them, so the table proves them necessary.
The edges of keep#
| Edge | What it is |
|---|---|
| console | the terminal and the three standard streams |
| os | the operating system's own calls: std/os, the environment, signals |
| file | files, directories, links and the failure text of a stream |
| process | this process and the processes it starts, panic and the exit |
| clock | the monotonic and the wall clock, and sleeping |
| entropy | the operating system's source of randomness |
| network | sockets, datagrams, name servers and lookups |
| tls | the TLS library of runtime/vendor/ |
| scheduler | the worker pool, tasks, channels and regions: threads and wake-ups |
| vm | the VM kernel of std/machine and the receiver-script host |
| harness | the registry the test runner of the host reads |
| compiler | the compiler's reflection, not built yet |
| resource | the files the compiler embeds into the program (std/resource) |
The measurements#
A measurement is a program built natively with --release and timed as the fastest of nine runs, once with the std/
of the merge base and once with the rewrite, in forge CI at the end of tier B like tools/buffer-cost.sh. It is a
measurement and not a gate. The bound is the one of that tool: no more than 10% slower. The benchmarks that do not exist
yet are written by the step that rewrites the rows.
| Id | Measurement |
|---|---|
| M1 | no timing: the body lowers to the IR the lowering generates today, so the bootstrap fixpoint of tier B and the .allocations budget of every conformance program must not move |
| M2 | benchmarks/natives-numbers.trb (new): show, tryFrom(String), power, hash, the float order and the checked conversions in loops |
| M3 | benchmarks/natives-decimal.trb (new): the arithmetic, show and tryFrom(String) of Decimal |
| M4 | benchmarks/natives-text.trb (new): ASCII and multi-byte text through split, trim, replace, contains, hash, show and the byte loops |
| M5 | tools/buffer-cost.sh for Buffer (the bytes-pass pair and the compression round trip), extended by benchmarks/natives-collections.trb (new): append, insert, remove, the maps, the sets and the tries |
| M6 | tools/size-cost.sh for the size of a program that does not use the tables, and benchmarks/natives-text.trb for case mapping and normalization |
Counts#
The numbers below are the rows of the tables, counted by the drift check.
| Verdict | Rows |
|---|---|
| kernel | 156 |
| rewrite | 201 |
| keep | 205 |
| total | 562 |
The table#
Signed integers#
Module: std/number.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Int8.add | Intrinsic | kernel | K1 | - | - | - |
Int8.subtract | Intrinsic | kernel | K1 | - | - | - |
Int8.multiply | Intrinsic | kernel | K1 | - | - | - |
Int8.divide | Intrinsic | kernel | K1 | - | - | - |
Int8.remainder | Intrinsic | kernel | K1 | - | - | - |
Int8.equals | Intrinsic | kernel | K4 | - | - | - |
Int8.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
Int8.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
Int8.negate | Intrinsic | kernel | K1 | - | - | - |
Int8.absolute | Derived | rewrite | - | if self < 0 { -self } else { self } as the body of the native fn (#53) | K1, K4 | M1 |
Int8.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
Int8.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
Int8.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
Int8.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
Int8.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
Int8.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
Int8.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
Int8.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
Int8.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
Int16.add | Intrinsic | kernel | K1 | - | - | - |
Int16.subtract | Intrinsic | kernel | K1 | - | - | - |
Int16.multiply | Intrinsic | kernel | K1 | - | - | - |
Int16.divide | Intrinsic | kernel | K1 | - | - | - |
Int16.remainder | Intrinsic | kernel | K1 | - | - | - |
Int16.equals | Intrinsic | kernel | K4 | - | - | - |
Int16.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
Int16.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
Int16.negate | Intrinsic | kernel | K1 | - | - | - |
Int16.absolute | Derived | rewrite | - | if self < 0 { -self } else { self } as the body of the native fn (#53) | K1, K4 | M1 |
Int16.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
Int16.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
Int16.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
Int16.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
Int16.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
Int16.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
Int16.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
Int16.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
Int16.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
Int32.add | Intrinsic | kernel | K1 | - | - | - |
Int32.subtract | Intrinsic | kernel | K1 | - | - | - |
Int32.multiply | Intrinsic | kernel | K1 | - | - | - |
Int32.divide | Intrinsic | kernel | K1 | - | - | - |
Int32.remainder | Intrinsic | kernel | K1 | - | - | - |
Int32.equals | Intrinsic | kernel | K4 | - | - | - |
Int32.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
Int32.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
Int32.negate | Intrinsic | kernel | K1 | - | - | - |
Int32.absolute | Derived | rewrite | - | if self < 0 { -self } else { self } as the body of the native fn (#53) | K1, K4 | M1 |
Int32.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
Int32.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
Int32.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
Int32.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
Int32.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
Int32.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
Int32.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
Int32.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
Int32.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
Int64.add | Intrinsic | kernel | K1 | - | - | - |
Int64.subtract | Intrinsic | kernel | K1 | - | - | - |
Int64.multiply | Intrinsic | kernel | K1 | - | - | - |
Int64.divide | Intrinsic | kernel | K1 | - | - | - |
Int64.remainder | Intrinsic | kernel | K1 | - | - | - |
Int64.equals | Intrinsic | kernel | K4 | - | - | - |
Int64.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
Int64.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
Int64.negate | Intrinsic | kernel | K1 | - | - | - |
Int64.absolute | Derived | rewrite | - | if self < 0 { -self } else { self } as the body of the native fn (#53) | K1, K4 | M1 |
Int64.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
Int64.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
Int64.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
Int64.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
Int64.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
Int64.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
Int64.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
Int64.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
Int64.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
Int64.from | Intrinsic | kernel | K7 | - | - | - |
Int32.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
Int8.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
Int16.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
Int64.tryFrom(UInt64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
Int64.tryFrom(Float64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
Int64.tryFrom(Decimal) | Runtime | rewrite | - | divide the limbs by the scale, then one range test and Convert | K1, K3, K4, K7 | M3 |
Int64.parseDigits | Runtime | rewrite | - | digit loop over String.byteAt | K1, K4, K5 | M2 |
Int64.fromChar | Intrinsic | kernel | K7 | - | - | - |
Unsigned integers#
Module: std/number.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
UInt8.add | Intrinsic | kernel | K1 | - | - | - |
UInt8.subtract | Intrinsic | kernel | K1 | - | - | - |
UInt8.multiply | Intrinsic | kernel | K1 | - | - | - |
UInt8.divide | Intrinsic | kernel | K1 | - | - | - |
UInt8.remainder | Intrinsic | kernel | K1 | - | - | - |
UInt8.equals | Intrinsic | kernel | K4 | - | - | - |
UInt8.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
UInt8.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
UInt8.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
UInt8.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
UInt8.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
UInt8.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
UInt8.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
UInt8.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
UInt8.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
UInt8.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
UInt8.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
UInt16.add | Intrinsic | kernel | K1 | - | - | - |
UInt16.subtract | Intrinsic | kernel | K1 | - | - | - |
UInt16.multiply | Intrinsic | kernel | K1 | - | - | - |
UInt16.divide | Intrinsic | kernel | K1 | - | - | - |
UInt16.remainder | Intrinsic | kernel | K1 | - | - | - |
UInt16.equals | Intrinsic | kernel | K4 | - | - | - |
UInt16.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
UInt16.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
UInt16.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
UInt16.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
UInt16.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
UInt16.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
UInt16.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
UInt16.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
UInt16.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
UInt16.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
UInt16.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
UInt32.add | Intrinsic | kernel | K1 | - | - | - |
UInt32.subtract | Intrinsic | kernel | K1 | - | - | - |
UInt32.multiply | Intrinsic | kernel | K1 | - | - | - |
UInt32.divide | Intrinsic | kernel | K1 | - | - | - |
UInt32.remainder | Intrinsic | kernel | K1 | - | - | - |
UInt32.equals | Intrinsic | kernel | K4 | - | - | - |
UInt32.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
UInt32.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
UInt32.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
UInt32.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
UInt32.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
UInt32.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
UInt32.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
UInt32.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
UInt32.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
UInt32.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
UInt32.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
UInt64.add | Intrinsic | kernel | K1 | - | - | - |
UInt64.subtract | Intrinsic | kernel | K1 | - | - | - |
UInt64.multiply | Intrinsic | kernel | K1 | - | - | - |
UInt64.divide | Intrinsic | kernel | K1 | - | - | - |
UInt64.remainder | Intrinsic | kernel | K1 | - | - | - |
UInt64.equals | Intrinsic | kernel | K4 | - | - | - |
UInt64.show | Runtime | rewrite | - | digit loop over / and % into a Buffer<UInt8>, then the text of those bytes | K1, K4, K5 | M2 |
UInt64.tryFrom(String) | Runtime | rewrite | - | parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper builds | K1, K4, K5 | M2 |
UInt64.bitwiseAnd | Intrinsic | kernel | K2 | - | - | - |
UInt64.bitwiseOr | Intrinsic | kernel | K2 | - | - | - |
UInt64.bitwiseExclusiveOr | Intrinsic | kernel | K2 | - | - | - |
UInt64.bitwiseNot | Intrinsic | kernel | K2 | - | - | - |
UInt64.shiftedLeft | Intrinsic | kernel | K2 | - | - | - |
UInt64.shiftedRight | Intrinsic | kernel | K2 | - | - | - |
UInt64.compare | Derived | rewrite | - | two comparisons and the Ordering cases, as the lowering generates them today | K4 | M1 |
UInt64.hash | Runtime | rewrite | - | the mixer of torb_hash_i64 on wrapping multiply and shifts | K1, K2 | M2 |
UInt64.power | Runtime | rewrite | - | square-and-multiply with the checked * | K1, K4 | M2 |
UInt8.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
UInt16.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
UInt32.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
UInt64.tryFrom(Int64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
UInt64.tryFrom(Decimal) | Runtime | rewrite | - | divide the limbs by the scale, then one range test and Convert | K1, K3, K4, K7 | M3 |
UInt64.addedWrapping | Runtime | kernel | K1 | - | - | - |
UInt64.multipliedWrapping | Runtime | kernel | K1 | - | - | - |
Floats#
Module: std/number.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Float64.add | Intrinsic | kernel | K3 | - | - | - |
Float64.subtract | Intrinsic | kernel | K3 | - | - | - |
Float64.multiply | Intrinsic | kernel | K3 | - | - | - |
Float64.divide | Intrinsic | kernel | K3 | - | - | - |
Float64.remainder | Intrinsic | kernel | K3 | - | - | - |
Float64.equals | Intrinsic | kernel | K4 | - | - | - |
Float64.show | Runtime | rewrite | - | shortest round-trip digits (Ryu class) on bits and 64-bit wrapping arithmetic | K1, K2, K5, K6 | M2 |
Float64.tryFrom(String) | Runtime | rewrite | - | correctly rounded parse (Eisel-Lemire class) on ofBits and 64-bit wrapping arithmetic | K1, K2, K4, K5, K6 | M2 |
Float64.negate | Intrinsic | kernel | K3 | - | - | - |
Float64.absolute | Derived | rewrite | - | if self < 0.0 { -self } else { self }, the sign of -0.0 kept by bits | K3, K4, K6 | M1 |
Float64.compare | Runtime | rewrite | - | total order: isNaN first (nan above everything), then the comparison intrinsics | K3, K4 | M2 |
Float64.squareRoot | Runtime | kernel | K3 | - | - | - |
Float64.power | Runtime | kernel | K3 | - | - | - |
Float64.exponential | Runtime | kernel | K3 | - | - | - |
Float64.naturalLogarithm | Runtime | kernel | K3 | - | - | - |
Float64.sine | Runtime | kernel | K3 | - | - | - |
Float64.cosine | Runtime | kernel | K3 | - | - | - |
Float64.tangent | Runtime | kernel | K3 | - | - | - |
Float64.arcTangent | Runtime | kernel | K3 | - | - | - |
Float64.arcTangentDivided | Runtime | kernel | K3 | - | - | - |
Float64.floor | Runtime | kernel | K3 | - | - | - |
Float64.ceiling | Runtime | kernel | K3 | - | - | - |
Float64.round | Runtime | kernel | K3 | - | - | - |
Float64.isNaN | Runtime | rewrite | - | self != self | K4 | M2 |
Float32.add | Intrinsic | kernel | K3 | - | - | - |
Float32.subtract | Intrinsic | kernel | K3 | - | - | - |
Float32.multiply | Intrinsic | kernel | K3 | - | - | - |
Float32.divide | Intrinsic | kernel | K3 | - | - | - |
Float32.remainder | Intrinsic | kernel | K3 | - | - | - |
Float32.equals | Intrinsic | kernel | K4 | - | - | - |
Float32.show | Runtime | rewrite | - | shortest round-trip digits (Ryu class) on bits and 64-bit wrapping arithmetic | K1, K2, K5, K6 | M2 |
Float32.tryFrom(String) | Runtime | rewrite | - | correctly rounded parse (Eisel-Lemire class) on ofBits and 64-bit wrapping arithmetic | K1, K2, K4, K5, K6 | M2 |
Float32.negate | Intrinsic | kernel | K3 | - | - | - |
Float32.absolute | Derived | rewrite | - | if self < 0.0 { -self } else { self }, the sign of -0.0 kept by bits | K3, K4, K6 | M1 |
Float32.compare | Runtime | rewrite | - | total order: isNaN first (nan above everything), then the comparison intrinsics | K3, K4 | M2 |
Float64.bits | Runtime | kernel | K6 | - | - | - |
Float64.ofBits | Runtime | kernel | K6 | - | - | - |
Float32.bits | Runtime | kernel | K6 | - | - | - |
Float32.ofBits | Runtime | kernel | K6 | - | - | - |
Float64.from(Int64) | Intrinsic | kernel | K7 | - | - | - |
Float64.from(Float32) | Intrinsic | kernel | K7 | - | - | - |
Float64.from(Decimal) | Runtime | rewrite | - | the limbs converted and divided by the scale, correctly rounded | K1, K3, K4, K7 | M3 |
Float32.tryFrom(Float64) | Runtime | rewrite | - | one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper builds | K3, K4, K7 | M2 |
Decimal#
Module: std/number.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Decimal.add | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.subtract | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.multiply | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.divide | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.remainder | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.negate | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.absolute | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.equals | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.compare | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.show | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.hash | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.tryFrom(String) | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.roundedWith | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.dividedWith | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.scale | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.normalized | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.unscaledText | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.ofDigits | Runtime | rewrite | - | arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply) | K1, K2, K4, K5 | M3 |
Decimal.from(Int64) | Runtime | rewrite | - | scaled integer constructor on the UInt64 limbs | K1, K2, K4 | M3 |
Decimal.from(UInt64) | Runtime | rewrite | - | scaled integer constructor on the UInt64 limbs | K1, K2, K4 | M3 |
Conversions, wrapping arithmetic and hashing helpers#
Module: std/number, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
combineHashes | Runtime | rewrite | - | multiply-and-rotate of the seed on wrapping UInt64 arithmetic | K1, K2 | M2 |
Core types#
Module: std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Bool.equals | Intrinsic | kernel | K4 | - | - | - |
Bool.hash | Runtime | rewrite | - | if self { 1 } else { 0 } mixed like an integer | K4 | M2 |
Bool.show | Runtime | rewrite | - | if self { "true" } else { "false" } | K4 | M4 |
Void.equals | Derived | rewrite | - | constant body (true, 0), as generated today | - | M1 |
Void.hash | Derived | rewrite | - | constant body (true, 0), as generated today | - | M1 |
Void.show | Runtime | rewrite | - | the literal "()" | - | M4 |
Array.unfilled | ArrayStorage | kernel | K5 | - | - | - |
Array.load | ArrayStorage | kernel | K5 | - | - | - |
Array.store | ArrayStorage | kernel | K5 | - | - | - |
Range.equals | Derived | rewrite | - | field-wise comparison and hash, as generated today | K4 | M1 |
Range.hash | Derived | rewrite | - | field-wise comparison and hash, as generated today | K4 | M1 |
RangeFrom.equals | Derived | rewrite | - | field-wise comparison and hash, as generated today | K4 | M1 |
RangeFrom.hash | Derived | rewrite | - | field-wise comparison and hash, as generated today | K4 | M1 |
RangeTo.equals | Derived | rewrite | - | field-wise comparison and hash, as generated today | K4 | M1 |
RangeTo.hash | Derived | rewrite | - | field-wise comparison and hash, as generated today | K4 | M1 |
targetOperatingSystem | Target | kernel | K8 | - | - | - |
targetArchitecture | Target | kernel | K8 | - | - | - |
targetByteOrder | Target | kernel | K8 | - | - | - |
isSame | Intrinsic (planned) | kernel | K4 | - | - | - |
Char#
Module: std/text.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Char.equals | Intrinsic | kernel | K4 | - | - | - |
Char.compare | Derived | rewrite | - | scalar comparison and the Ordering cases, as generated today | K4 | M1 |
Char.hash | Runtime | rewrite | - | the integer hash of the scalar value | K1, K2 | M2 |
Char.show | Runtime | rewrite | - | quote, escape and append the character to a Buffer<UInt8> | K4, K5 | M4 |
Char.showNested | Runtime | rewrite | - | quote, escape and append the character to a Buffer<UInt8> | K4, K5 | M4 |
Char.isDigit | Runtime | rewrite | - | range tests on the scalar value | K4 | M4 |
Char.isLetter | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.isWhitespace | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.byteLength | Runtime | rewrite | - | range tests on the scalar value | K4 | M4 |
Char.toUpperCase | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.toLowerCase | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.categoryCode | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.toCaseFolded | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.nextCaseVariant | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
Char.tryFrom(Int64) | Runtime | rewrite | - | range and surrogate test, then Convert | K4, K7 | M4 |
String#
Module: std/text.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
String.equals | Intrinsic | kernel | K4 | - | - | - |
String.compare | Derived | rewrite | - | the kernel text ordering and the Ordering cases, as generated today | K4 | M1 |
String.hash | Runtime | rewrite | - | byte loop over byteAt with the mixer of the integers | K1, K2, K5 | M4 |
String.show | Derived | rewrite | - | self | - | M1 |
String.showNested | Runtime | rewrite | - | quote and escape loop over the bytes | K4, K5 | M4 |
String.add | Intrinsic | kernel | K5 | - | - | - |
String.byteLength | Intrinsic | kernel | K5 | - | - | - |
String.isEmpty | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.sliceBytes | Runtime | kernel | K5 | - | - | - |
String.contains | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.startsWith | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.endsWith | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.byteOffsetOf | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.lastByteOffsetOf | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.trim | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.toUpperCase | Runtime | rewrite | - | per-character mapping through the range tables of Char | K4, K5 | M6 |
String.toLowerCase | Runtime | rewrite | - | per-character mapping through the range tables of Char | K4, K5 | M6 |
String.toCaseFolded | Runtime | rewrite | - | per-character mapping through the range tables of Char | K4, K5 | M6 |
String.toNfc | Runtime | rewrite | - | decomposition, reordering and composition over generated TorbScript tables | K1, K2, K4, K5 | M6 |
String.toNfd | Runtime | rewrite | - | decomposition, reordering and composition over generated TorbScript tables | K1, K2, K4, K5 | M6 |
String.toNfkc | Runtime | rewrite | - | decomposition, reordering and composition over generated TorbScript tables | K1, K2, K4, K5 | M6 |
String.toNfkd | Runtime | rewrite | - | decomposition, reordering and composition over generated TorbScript tables | K1, K2, K4, K5 | M6 |
String.replace | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.repeat | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.split | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.splitStorage | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.charAtByte | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
String.byteAt | Runtime | kernel | K5 | - | - | - |
String.copyBytes | Runtime | rewrite | - | loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8> | K4, K5 | M4 |
Console, panic and the test harness#
Module: std/console, std/test, std/prelude.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
print | Runtime | keep | console | - | - | - |
printError | Runtime | keep | console | - | - | - |
panic | Runtime | keep | process | - | - | - |
isTerminal | Runtime | keep | console | - | - | - |
isErrorTerminal | Runtime | keep | console | - | - | - |
printErrorRaw | Runtime | keep | console | - | - | - |
installInterruptHandler | Runtime | keep | os | - | - | - |
interrupted | Runtime | keep | os | - | - | - |
test | Runtime | keep | harness | - | - | - |
group | Runtime | keep | harness | - | - | - |
ArrayList#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
ArrayList.withCapacity | Container | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.length | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.get | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.sliceBetween | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.append | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.set | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.insert | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.removeAt | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.replaceBetween | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.reverse | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.clear | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
ArrayList.compact | Runtime | rewrite | - | an ordinary type over Buffer<Item> (COLLECTIONS gap 6) | K5 | M5 |
TrieList#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
TrieList.withCapacity | Container | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.length | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.get | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.sliceBetween | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.append | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.set | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.insert | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.removeAt | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.replaceBetween | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.reverse | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.clear | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
TrieList.compact | Runtime | rewrite | - | a persistent trie of Buffer nodes with a tail | K1, K2, K5 | M5 |
Buffer#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Buffer.withCapacity | Container | kernel | K5 | - | - | - |
Buffer.holdsClose | Lowered | kernel | K5 | - | - | - |
Buffer.length | Runtime | kernel | K5 | - | - | - |
Buffer.get | Runtime | kernel | K5 | - | - | - |
Buffer.append | Runtime | kernel | K5 | - | - | - |
Buffer.set | Runtime | kernel | K5 | - | - | - |
Buffer.insert | Runtime | rewrite | - | element loop of get, set and append, or a bulk move if the measurement asks for one | K1, K4, K5 | M5 |
Buffer.removeAt | Runtime | rewrite | - | element loop of get, set and append, or a bulk move if the measurement asks for one | K1, K4, K5 | M5 |
Buffer.replaceBetween | Runtime | rewrite | - | element loop of get, set and append, or a bulk move if the measurement asks for one | K1, K4, K5 | M5 |
Buffer.reverse | Runtime | rewrite | - | element loop of get, set and append, or a bulk move if the measurement asks for one | K1, K4, K5 | M5 |
Buffer.clear | Runtime | rewrite | - | element loop of get, set and append, or a bulk move if the measurement asks for one | K1, K4, K5 | M5 |
HashMap#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
HashMap.withCapacity | Container | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashMap.length | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashMap.entryAfter | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashMap.get | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashMap.set | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashMap.remove | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashMap.clear | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
TrieMap#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
TrieMap.withCapacity | Container | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieMap.length | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieMap.entryAfter | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieMap.get | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieMap.set | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieMap.remove | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieMap.clear | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
HashSet#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
HashSet.withCapacity | Container | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashSet.length | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashSet.itemAfter | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashSet.contains | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashSet.insert | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashSet.remove | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
HashSet.clear | Runtime | rewrite | - | open addressing over Buffers for the keys, the values and the control bytes | K1, K2, K4, K5 | M5 |
TrieSet#
Module: std/collections, std/core.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
TrieSet.withCapacity | Container | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieSet.length | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieSet.itemAfter | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieSet.contains | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieSet.insert | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieSet.remove | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
TrieSet.clear | Runtime | rewrite | - | a hash array mapped trie of Buffer nodes | K1, K2, K4, K5 | M5 |
Files and standard streams#
Module: std/fs, std/io.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
File.readText | Runtime | keep | file | - | - | - |
File.writeText | Runtime | keep | file | - | - | - |
File.exists | Runtime | keep | file | - | - | - |
File.isDirectory | Runtime | keep | file | - | - | - |
File.list | Runtime | keep | file | - | - | - |
File.listStorage | Runtime | keep | file | - | - | - |
File.absolutePath | Runtime | keep | file | - | - | - |
File.remove | Runtime | keep | file | - | - | - |
File.rename | Runtime | keep | file | - | - | - |
File.copy | Runtime | keep | file | - | - | - |
File.createSymbolicLink | Runtime | keep | file | - | - | - |
File.symbolicLinkTarget | Runtime | keep | file | - | - | - |
fileSystemPath | Runtime | keep | file | - | - | - |
fileReadBytes | Runtime | keep | file | - | - | - |
fileWriteBytes | Runtime | keep | file | - | - | - |
fileReplace | Runtime | keep | file | - | - | - |
fileMetadata | Runtime | keep | file | - | - | - |
fileOwner | Runtime | keep | file | - | - | - |
fileSetMode | Runtime | keep | file | - | - | - |
fileCreateTemporary | Runtime | keep | file | - | - | - |
File.open | Runtime | keep | file | - | - | - |
File.readAll | Runtime | keep | file | - | - | - |
File.close | Runtime | keep | file | - | - | - |
File.create | Runtime | keep | file | - | - | - |
fileRead | Runtime | keep | file | - | - | - |
fileTakeRead | Runtime | keep | file | - | - | - |
fileWrite | Runtime | keep | file | - | - | - |
fileFlush | Runtime | keep | file | - | - | - |
filePath | Runtime | keep | file | - | - | - |
fileFailureText | Runtime | keep | file | - | - | - |
readLineOrEnd | Runtime | keep | console | - | - | - |
standardRead | Runtime | keep | console | - | - | - |
standardTakeRead | Runtime | keep | console | - | - | - |
standardWrite | Runtime | keep | console | - | - | - |
ioFailureText | Runtime | keep | file | - | - | - |
File.createDirectory | Runtime | keep | file | - | - | - |
Processes and the environment#
Module: std/process, std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Process.arguments | Runtime | keep | process | - | - | - |
Process.argumentStorage | Runtime | keep | process | - | - | - |
Process.exit | Runtime | keep | process | - | - | - |
Process.runCollecting | Runtime | keep | process | - | - | - |
Process.runFeeding | Runtime | keep | process | - | - | - |
Process.runInheriting | Runtime | keep | process | - | - | - |
childStart | Runtime | keep | process | - | - | - |
childRead | Runtime | keep | process | - | - | - |
childTakeRead | Runtime | keep | process | - | - | - |
childWrite | Runtime | keep | process | - | - | - |
childEndInput | Runtime | keep | process | - | - | - |
childWait | Runtime | keep | process | - | - | - |
childClose | Runtime | keep | process | - | - | - |
processFailureText | Runtime | keep | process | - | - | - |
Environment.get | Runtime | keep | os | - | - | - |
Environment.entries | Runtime | keep | os | - | - | - |
CurrentProcess.executablePath | Runtime | keep | process | - | - | - |
CurrentProcess.workingDirectoryPath | Runtime | keep | process | - | - | - |
CurrentProcess.uptimeNanoseconds | Runtime | keep | process | - | - | - |
Time#
Module: std/time.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
monotonicNanoseconds | Runtime | keep | clock | - | - | - |
wallClockNanoseconds | Runtime | keep | clock | - | - | - |
Clock.milliseconds | Runtime | keep | clock | - | - | - |
sleep | Runtime | keep | clock | - | - | - |
Entropy#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
fillWithEntropy | Runtime | keep | entropy | - | - | - |
Windows#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Windows.tickCount | Runtime | keep | os | - | - | - |
Windows.version | Runtime | keep | os | - | - | - |
Windows.registryText | Runtime | keep | os | - | - | - |
Windows.registryInteger | Runtime | keep | os | - | - | - |
Windows.computerName | Runtime | keep | os | - | - | - |
Windows.systemInformation | Runtime | keep | os | - | - | - |
Windows.knownFolder | Runtime | keep | os | - | - | - |
Windows.temporaryDirectory | Runtime | keep | os | - | - | - |
Windows.memoryStatus | Runtime | keep | os | - | - | - |
Windows.pageFiles | Runtime | keep | os | - | - | - |
Windows.processIdentity | Runtime | keep | os | - | - | - |
Windows.processResources | Runtime | keep | os | - | - | - |
Windows.processorsAvailable | Runtime | keep | os | - | - | - |
Windows.processorCounts | Runtime | keep | os | - | - | - |
Windows.systemTimes | Runtime | keep | os | - | - | - |
Windows.processorTimesOfEach | Runtime | keep | os | - | - | - |
Windows.jobMemoryLimit | Runtime | keep | os | - | - | - |
Windows.volumeMountPoints | Runtime | keep | os | - | - | - |
Windows.volumeInformation | Runtime | keep | os | - | - | - |
Windows.volumeSpace | Runtime | keep | os | - | - | - |
Windows.userAccountName | Runtime | keep | os | - | - | - |
Windows.userDisplayName | Runtime | keep | os | - | - | - |
Windows.userToken | Runtime | keep | os | - | - | - |
Posix#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Posix.effectiveUserIdentifier | Runtime | keep | os | - | - | - |
Posix.fileSystemSpace | Runtime | keep | os | - | - | - |
Posix.interfaceEntries | Runtime | keep | os | - | - | - |
Posix.processIdentity | Runtime | keep | os | - | - | - |
Posix.resourceUsage | Runtime | keep | os | - | - | - |
Posix.systemNames | Runtime | keep | os | - | - | - |
Posix.hostName | Runtime | keep | os | - | - | - |
Posix.configuration | Runtime | keep | os | - | - | - |
Posix.account | Runtime | keep | os | - | - | - |
Linux#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Linux.readSystemFile | Runtime | keep | os | - | - | - |
Linux.affinityCount | Runtime | keep | os | - | - | - |
Bsd#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Bsd.sysctlText | Runtime | keep | os | - | - | - |
Bsd.sysctlInteger | Runtime | keep | os | - | - | - |
Bsd.uptime | Runtime | keep | os | - | - | - |
Bsd.mountedFileSystems | Runtime | keep | os | - | - | - |
MacOs#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
MacOs.userTemporaryDirectory | Runtime | keep | os | - | - | - |
MacOs.virtualMemory | Runtime | keep | os | - | - | - |
MacOs.swapUsage | Runtime | keep | os | - | - | - |
MacOs.residentSize | Runtime | keep | os | - | - | - |
MacOs.processorLoad | Runtime | keep | os | - | - | - |
MacOs.processorLoadOfEach | Runtime | keep | os | - | - | - |
X86#
Module: std/os.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
X86.cpuid | Runtime | keep | os | - | - | - |
X86.extendedControlRegister | Runtime | keep | os | - | - | - |
Tasks, channels and regions#
Module: std/task, std/parallel.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Task.finished | Runtime | keep | scheduler | - | - | - |
Task.runToEnd | Runtime | keep | scheduler | - | - | - |
cancelTask | Runtime | keep | scheduler | - | - | - |
Workers.count | Runtime | keep | scheduler | - | - | - |
Workers.blocking | Runtime | keep | scheduler | - | - | - |
Workers.copies | Runtime | keep | scheduler | - | - | - |
pause | Runtime | keep | scheduler | - | - | - |
blockingTurn | Runtime | keep | scheduler | - | - | - |
spawn | Lowered | keep | scheduler | - | - | - |
stopAsCancelled | Lowered | keep | scheduler | - | - | - |
completedWithin | Runtime | keep | scheduler | - | - | - |
completedFirst | Runtime | keep | scheduler | - | - | - |
received | Runtime | keep | scheduler | - | - | - |
offered | Runtime | keep | scheduler | - | - | - |
endWriting | Runtime | keep | scheduler | - | - | - |
closeReading | Runtime | keep | scheduler | - | - | - |
openRegion | Runtime | keep | scheduler | - | - | - |
claimWindow | Runtime | keep | scheduler | - | - | - |
windowBorder | Runtime | keep | scheduler | - | - | - |
finishWindow | Runtime | keep | scheduler | - | - | - |
joinRegion | Runtime | keep | scheduler | - | - | - |
regionItem | Runtime | keep | scheduler | - | - | - |
storeRegionItem | Runtime | keep | scheduler | - | - | - |
Sockets and name servers#
Module: std/network.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
networkListen | Runtime | keep | network | - | - | - |
networkAccept | Runtime | keep | network | - | - | - |
networkListenUnix | Runtime | keep | network | - | - | - |
networkConnectUnix | Runtime | keep | network | - | - | - |
networkConnect | Runtime | keep | network | - | - | - |
networkReceive | Runtime | keep | network | - | - | - |
networkTakeReceived | Runtime | keep | network | - | - | - |
networkSend | Runtime | keep | network | - | - | - |
networkShutdown | Runtime | keep | network | - | - | - |
networkSetOption | Runtime | keep | network | - | - | - |
networkOption | Runtime | keep | network | - | - | - |
networkClose | Runtime | keep | network | - | - | - |
networkAddress | Runtime | keep | network | - | - | - |
networkResolve | Runtime | keep | network | - | - | - |
networkTakeResolved | Runtime | keep | network | - | - | - |
networkErrorText | Runtime | keep | network | - | - | - |
networkBind | Runtime | keep | network | - | - | - |
networkConnectDatagram | Runtime | keep | network | - | - | - |
networkSendDatagram | Runtime | keep | network | - | - | - |
networkReceiveDatagram | Runtime | keep | network | - | - | - |
networkTakeDatagram | Runtime | keep | network | - | - | - |
networkNameServers | Runtime | keep | network | - | - | - |
networkRandom | Runtime | keep | entropy | - | - | - |
IDNA tables#
Module: std/network (dns).
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
idnaStatus | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
idnaMapping | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
idnaGeneralCategory | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
idnaJoiningType | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
idnaBidiClass | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
idnaCombiningClass | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
idnaScript | Runtime | rewrite | - | lookup in range tables that tools/unicode emits as TorbScript constants instead of C | K4, K5 | M6 |
TLS#
Module: std/tls.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
tlsClient | Runtime | keep | tls | - | - | - |
tlsIdentity | Runtime | keep | tls | - | - | - |
tlsServer | Runtime | keep | tls | - | - | - |
tlsFeed | Runtime | keep | tls | - | - | - |
tlsHandshake | Runtime | keep | tls | - | - | - |
tlsTakeOutgoing | Runtime | keep | tls | - | - | - |
tlsWrite | Runtime | keep | tls | - | - | - |
tlsRead | Runtime | keep | tls | - | - | - |
tlsNotifyClose | Runtime | keep | tls | - | - | - |
tlsClose | Runtime | keep | tls | - | - | - |
tlsPeerCertificate | Runtime | keep | tls | - | - | - |
tlsOffer | Runtime | keep | tls | - | - | - |
tlsPresent | Runtime | keep | tls | - | - | - |
tlsRequire | Runtime | keep | tls | - | - | - |
tlsNegotiated | Runtime | keep | tls | - | - | - |
tlsProtocol | Runtime | keep | tls | - | - | - |
tlsErrorText | Runtime | keep | tls | - | - | - |
The VM kernel#
Module: std/machine.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Machine.operate | Runtime | keep | vm | - | - | - |
Machine.load | Runtime | keep | vm | - | - | - |
Machine.store | Runtime | keep | vm | - | - | - |
Machine.loadAt | Runtime | keep | vm | - | - | - |
Machine.storeAt | Runtime | keep | vm | - | - | - |
Machine.countUp | Runtime | keep | vm | - | - | - |
Machine.countDown | Runtime | keep | vm | - | - | - |
Machine.placeText | Runtime | keep | vm | - | - | - |
Machine.placeFloat | Runtime | keep | vm | - | - | - |
Machine.install | Runtime | keep | vm | - | - | - |
Expression#
Module: std/expression.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
Expression.value | Lowered | keep | compiler | - | - | - |
Expression.captures | Lowered | keep | compiler | - | - | - |
Receiver scripts and the sandbox#
Module: std/sandbox.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
scriptBody | ScriptTable | keep | vm | - | - | - |
scriptImports | ScriptTable | keep | vm | - | - | - |
runScript | Machine | keep | vm | - | - | - |
scriptReceiver | ScriptTable | keep | vm | - | - | - |
loadScript | Machine | keep | vm | - | - | - |
loadScriptText | Machine | keep | vm | - | - | - |
runLoadedScript | Machine | keep | vm | - | - | - |
scriptSources | ScriptTable | keep | vm | - | - | - |
hostLoadScript | ScriptHost | keep | vm | - | - | - |
hostLoadScriptText | ScriptHost | keep | vm | - | - | - |
hostRunScript | ScriptHost | keep | vm | - | - | - |
runCrossed | ScriptTable | keep | vm | - | - | - |
Embedded resources#
Module: std/resource.
| Name | Target | Verdict | Group | Shape | Needs | Measure |
|---|---|---|---|---|---|---|
embeddedBytes | Embedded | keep | resource | - | - | - |
embeddedText | Embedded | keep | resource | - | - | - |
The drift check#
compiler/tests/natives-audit.test.trb runs in tier A with the rest of the compiler's suite and fails when:
- a manifest entry has no row, a row names no entry, or a name is in the tables twice;
- the target column of a row is not the kind of its entry (or lacks
(planned)where the entry is planned); - a verdict is not
kernel,rewriteorkeep; akernelrow names a group that is not in the kernel table, or akeeprow an edge that is not in the edges table; arewriterow has no shape, a need outside the kernel groups, or a measure that is not in the measurement table; - the counts in "Counts" are not the rows of the tables;
- a
nativedeclaration ofstd/has no manifest entry: the test reads everynative fnofstd/*/src/, with its owner type, and looks it up in the manifest. A declaration that is generated from a trait of a native type (Int8.addfromNumeric) is checked by the checker against the manifest already.
A new native therefore needs its manifest entry and its row in the same change, and a changed verdict is an edit of the row and of the counts.
Not in this record#
- The measuring and the rewrites. They are further steps of the kernel of natives, each decided by the measurement of its row, and each under the two-commit rule where it adds or changes a native (CLAUDE.md).
native fnbodies as IR andnative { ... }blocks, the next step of the same milestone.- The shape of
Bufferas the storage of the collections (COLLECTIONS.md gap 6).