Diese Seite gibt es noch nicht auf Deutsch, deshalb steht sie hier auf Englisch. Zur englischen Seite

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, rewrite or keep.
  • Group is, for kernel, one of the kernel groups K1 to K8 below; for keep, one of the edges below; - for rewrite.
  • 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, M1 to M6 below. 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, an Array or Buffer operation) and everything else in std/ 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 of tools/buffer-cost.sh). A rewrite that misses it stays as it is and its row changes to keep or kernel in 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. Each keep row 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.

GroupNameMembers
K1Integer arithmeticadd, 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
K2Bit operationsbitwiseAnd, bitwiseOr, bitwiseExclusiveOr, bitwiseNot, shiftedLeft, shiftedRight of every integer width
K3Float arithmetic and math functionsadd, 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
K4Comparisonsequals of the numbers, Bool, Char and String (the Equal and TextEqual intrinsics), the ordering intrinsics (Less to GreaterOrEqual, TextCompare), and the identity test isSame
K5Raw storageArray.unfilled, Array.load, Array.store; Buffer.withCapacity, length, get, set, append, holdsClose; the bytes of a text: String.byteLength, byteAt, sliceBytes and add
K6Bytes to numbersFloat64.bits, Float64.ofBits, Float32.bits, Float32.ofBits
K7Numeric conversionthe Convert intrinsic between the widths and kinds: Int64.from, Float64.from(Int64), Float64.from(Float32), Int64.fromChar
K8Build constantsOperatingSystem.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#

EdgeWhat it is
consolethe terminal and the three standard streams
osthe operating system's own calls: std/os, the environment, signals
filefiles, directories, links and the failure text of a stream
processthis process and the processes it starts, panic and the exit
clockthe monotonic and the wall clock, and sleeping
entropythe operating system's source of randomness
networksockets, datagrams, name servers and lookups
tlsthe TLS library of runtime/vendor/
schedulerthe worker pool, tasks, channels and regions: threads and wake-ups
vmthe VM kernel of std/machine and the receiver-script host
harnessthe registry the test runner of the host reads
compilerthe compiler's reflection, not built yet
resourcethe 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.

IdMeasurement
M1no 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
M2benchmarks/natives-numbers.trb (new): show, tryFrom(String), power, hash, the float order and the checked conversions in loops
M3benchmarks/natives-decimal.trb (new): the arithmetic, show and tryFrom(String) of Decimal
M4benchmarks/natives-text.trb (new): ASCII and multi-byte text through split, trim, replace, contains, hash, show and the byte loops
M5tools/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
M6tools/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.

VerdictRows
kernel156
rewrite201
keep205
total562

The table#

Signed integers#

Module: std/number.

NameTargetVerdictGroupShapeNeedsMeasure
Int8.addIntrinsickernelK1---
Int8.subtractIntrinsickernelK1---
Int8.multiplyIntrinsickernelK1---
Int8.divideIntrinsickernelK1---
Int8.remainderIntrinsickernelK1---
Int8.equalsIntrinsickernelK4---
Int8.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
Int8.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
Int8.negateIntrinsickernelK1---
Int8.absoluteDerivedrewrite-if self < 0 { -self } else { self } as the body of the native fn (#53)K1, K4M1
Int8.bitwiseAndIntrinsickernelK2---
Int8.bitwiseOrIntrinsickernelK2---
Int8.bitwiseExclusiveOrIntrinsickernelK2---
Int8.bitwiseNotIntrinsickernelK2---
Int8.shiftedLeftIntrinsickernelK2---
Int8.shiftedRightIntrinsickernelK2---
Int8.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
Int8.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
Int8.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
Int16.addIntrinsickernelK1---
Int16.subtractIntrinsickernelK1---
Int16.multiplyIntrinsickernelK1---
Int16.divideIntrinsickernelK1---
Int16.remainderIntrinsickernelK1---
Int16.equalsIntrinsickernelK4---
Int16.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
Int16.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
Int16.negateIntrinsickernelK1---
Int16.absoluteDerivedrewrite-if self < 0 { -self } else { self } as the body of the native fn (#53)K1, K4M1
Int16.bitwiseAndIntrinsickernelK2---
Int16.bitwiseOrIntrinsickernelK2---
Int16.bitwiseExclusiveOrIntrinsickernelK2---
Int16.bitwiseNotIntrinsickernelK2---
Int16.shiftedLeftIntrinsickernelK2---
Int16.shiftedRightIntrinsickernelK2---
Int16.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
Int16.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
Int16.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
Int32.addIntrinsickernelK1---
Int32.subtractIntrinsickernelK1---
Int32.multiplyIntrinsickernelK1---
Int32.divideIntrinsickernelK1---
Int32.remainderIntrinsickernelK1---
Int32.equalsIntrinsickernelK4---
Int32.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
Int32.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
Int32.negateIntrinsickernelK1---
Int32.absoluteDerivedrewrite-if self < 0 { -self } else { self } as the body of the native fn (#53)K1, K4M1
Int32.bitwiseAndIntrinsickernelK2---
Int32.bitwiseOrIntrinsickernelK2---
Int32.bitwiseExclusiveOrIntrinsickernelK2---
Int32.bitwiseNotIntrinsickernelK2---
Int32.shiftedLeftIntrinsickernelK2---
Int32.shiftedRightIntrinsickernelK2---
Int32.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
Int32.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
Int32.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
Int64.addIntrinsickernelK1---
Int64.subtractIntrinsickernelK1---
Int64.multiplyIntrinsickernelK1---
Int64.divideIntrinsickernelK1---
Int64.remainderIntrinsickernelK1---
Int64.equalsIntrinsickernelK4---
Int64.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
Int64.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
Int64.negateIntrinsickernelK1---
Int64.absoluteDerivedrewrite-if self < 0 { -self } else { self } as the body of the native fn (#53)K1, K4M1
Int64.bitwiseAndIntrinsickernelK2---
Int64.bitwiseOrIntrinsickernelK2---
Int64.bitwiseExclusiveOrIntrinsickernelK2---
Int64.bitwiseNotIntrinsickernelK2---
Int64.shiftedLeftIntrinsickernelK2---
Int64.shiftedRightIntrinsickernelK2---
Int64.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
Int64.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
Int64.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
Int64.fromIntrinsickernelK7---
Int32.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
Int8.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
Int16.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
Int64.tryFrom(UInt64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
Int64.tryFrom(Float64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
Int64.tryFrom(Decimal)Runtimerewrite-divide the limbs by the scale, then one range test and ConvertK1, K3, K4, K7M3
Int64.parseDigitsRuntimerewrite-digit loop over String.byteAtK1, K4, K5M2
Int64.fromCharIntrinsickernelK7---

Unsigned integers#

Module: std/number.

NameTargetVerdictGroupShapeNeedsMeasure
UInt8.addIntrinsickernelK1---
UInt8.subtractIntrinsickernelK1---
UInt8.multiplyIntrinsickernelK1---
UInt8.divideIntrinsickernelK1---
UInt8.remainderIntrinsickernelK1---
UInt8.equalsIntrinsickernelK4---
UInt8.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
UInt8.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
UInt8.bitwiseAndIntrinsickernelK2---
UInt8.bitwiseOrIntrinsickernelK2---
UInt8.bitwiseExclusiveOrIntrinsickernelK2---
UInt8.bitwiseNotIntrinsickernelK2---
UInt8.shiftedLeftIntrinsickernelK2---
UInt8.shiftedRightIntrinsickernelK2---
UInt8.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
UInt8.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
UInt8.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
UInt16.addIntrinsickernelK1---
UInt16.subtractIntrinsickernelK1---
UInt16.multiplyIntrinsickernelK1---
UInt16.divideIntrinsickernelK1---
UInt16.remainderIntrinsickernelK1---
UInt16.equalsIntrinsickernelK4---
UInt16.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
UInt16.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
UInt16.bitwiseAndIntrinsickernelK2---
UInt16.bitwiseOrIntrinsickernelK2---
UInt16.bitwiseExclusiveOrIntrinsickernelK2---
UInt16.bitwiseNotIntrinsickernelK2---
UInt16.shiftedLeftIntrinsickernelK2---
UInt16.shiftedRightIntrinsickernelK2---
UInt16.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
UInt16.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
UInt16.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
UInt32.addIntrinsickernelK1---
UInt32.subtractIntrinsickernelK1---
UInt32.multiplyIntrinsickernelK1---
UInt32.divideIntrinsickernelK1---
UInt32.remainderIntrinsickernelK1---
UInt32.equalsIntrinsickernelK4---
UInt32.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
UInt32.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
UInt32.bitwiseAndIntrinsickernelK2---
UInt32.bitwiseOrIntrinsickernelK2---
UInt32.bitwiseExclusiveOrIntrinsickernelK2---
UInt32.bitwiseNotIntrinsickernelK2---
UInt32.shiftedLeftIntrinsickernelK2---
UInt32.shiftedRightIntrinsickernelK2---
UInt32.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
UInt32.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
UInt32.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
UInt64.addIntrinsickernelK1---
UInt64.subtractIntrinsickernelK1---
UInt64.multiplyIntrinsickernelK1---
UInt64.divideIntrinsickernelK1---
UInt64.remainderIntrinsickernelK1---
UInt64.equalsIntrinsickernelK4---
UInt64.showRuntimerewrite-digit loop over / and % into a Buffer<UInt8>, then the text of those bytesK1, K4, K5M2
UInt64.tryFrom(String)Runtimerewrite-parse loop over String.byteAt with checked * and +; the failure stays the NumberParseError the wrapper buildsK1, K4, K5M2
UInt64.bitwiseAndIntrinsickernelK2---
UInt64.bitwiseOrIntrinsickernelK2---
UInt64.bitwiseExclusiveOrIntrinsickernelK2---
UInt64.bitwiseNotIntrinsickernelK2---
UInt64.shiftedLeftIntrinsickernelK2---
UInt64.shiftedRightIntrinsickernelK2---
UInt64.compareDerivedrewrite-two comparisons and the Ordering cases, as the lowering generates them todayK4M1
UInt64.hashRuntimerewrite-the mixer of torb_hash_i64 on wrapping multiply and shiftsK1, K2M2
UInt64.powerRuntimerewrite-square-and-multiply with the checked *K1, K4M2
UInt8.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
UInt16.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
UInt32.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
UInt64.tryFrom(Int64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2
UInt64.tryFrom(Decimal)Runtimerewrite-divide the limbs by the scale, then one range test and ConvertK1, K3, K4, K7M3
UInt64.addedWrappingRuntimekernelK1---
UInt64.multipliedWrappingRuntimekernelK1---

Floats#

Module: std/number.

NameTargetVerdictGroupShapeNeedsMeasure
Float64.addIntrinsickernelK3---
Float64.subtractIntrinsickernelK3---
Float64.multiplyIntrinsickernelK3---
Float64.divideIntrinsickernelK3---
Float64.remainderIntrinsickernelK3---
Float64.equalsIntrinsickernelK4---
Float64.showRuntimerewrite-shortest round-trip digits (Ryu class) on bits and 64-bit wrapping arithmeticK1, K2, K5, K6M2
Float64.tryFrom(String)Runtimerewrite-correctly rounded parse (Eisel-Lemire class) on ofBits and 64-bit wrapping arithmeticK1, K2, K4, K5, K6M2
Float64.negateIntrinsickernelK3---
Float64.absoluteDerivedrewrite-if self < 0.0 { -self } else { self }, the sign of -0.0 kept by bitsK3, K4, K6M1
Float64.compareRuntimerewrite-total order: isNaN first (nan above everything), then the comparison intrinsicsK3, K4M2
Float64.squareRootRuntimekernelK3---
Float64.powerRuntimekernelK3---
Float64.exponentialRuntimekernelK3---
Float64.naturalLogarithmRuntimekernelK3---
Float64.sineRuntimekernelK3---
Float64.cosineRuntimekernelK3---
Float64.tangentRuntimekernelK3---
Float64.arcTangentRuntimekernelK3---
Float64.arcTangentDividedRuntimekernelK3---
Float64.floorRuntimekernelK3---
Float64.ceilingRuntimekernelK3---
Float64.roundRuntimekernelK3---
Float64.isNaNRuntimerewrite-self != selfK4M2
Float32.addIntrinsickernelK3---
Float32.subtractIntrinsickernelK3---
Float32.multiplyIntrinsickernelK3---
Float32.divideIntrinsickernelK3---
Float32.remainderIntrinsickernelK3---
Float32.equalsIntrinsickernelK4---
Float32.showRuntimerewrite-shortest round-trip digits (Ryu class) on bits and 64-bit wrapping arithmeticK1, K2, K5, K6M2
Float32.tryFrom(String)Runtimerewrite-correctly rounded parse (Eisel-Lemire class) on ofBits and 64-bit wrapping arithmeticK1, K2, K4, K5, K6M2
Float32.negateIntrinsickernelK3---
Float32.absoluteDerivedrewrite-if self < 0.0 { -self } else { self }, the sign of -0.0 kept by bitsK3, K4, K6M1
Float32.compareRuntimerewrite-total order: isNaN first (nan above everything), then the comparison intrinsicsK3, K4M2
Float64.bitsRuntimekernelK6---
Float64.ofBitsRuntimekernelK6---
Float32.bitsRuntimekernelK6---
Float32.ofBitsRuntimekernelK6---
Float64.from(Int64)IntrinsickernelK7---
Float64.from(Float32)IntrinsickernelK7---
Float64.from(Decimal)Runtimerewrite-the limbs converted and divided by the scale, correctly roundedK1, K3, K4, K7M3
Float32.tryFrom(Float64)Runtimerewrite-one range test with the comparison intrinsics, then Convert; the failure is the NumberRangeError the wrapper buildsK3, K4, K7M2

Decimal#

Module: std/number.

NameTargetVerdictGroupShapeNeedsMeasure
Decimal.addRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.subtractRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.multiplyRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.divideRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.remainderRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.negateRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.absoluteRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.equalsRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.compareRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.showRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.hashRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.tryFrom(String)Runtimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.roundedWithRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.dividedWithRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.scaleRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.normalizedRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.unscaledTextRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.ofDigitsRuntimerewrite-arithmetic on the limbs of the scaled integer (UInt64 words, wrapping add and multiply)K1, K2, K4, K5M3
Decimal.from(Int64)Runtimerewrite-scaled integer constructor on the UInt64 limbsK1, K2, K4M3
Decimal.from(UInt64)Runtimerewrite-scaled integer constructor on the UInt64 limbsK1, K2, K4M3

Conversions, wrapping arithmetic and hashing helpers#

Module: std/number, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
combineHashesRuntimerewrite-multiply-and-rotate of the seed on wrapping UInt64 arithmeticK1, K2M2

Core types#

Module: std/core.

NameTargetVerdictGroupShapeNeedsMeasure
Bool.equalsIntrinsickernelK4---
Bool.hashRuntimerewrite-if self { 1 } else { 0 } mixed like an integerK4M2
Bool.showRuntimerewrite-if self { "true" } else { "false" }K4M4
Void.equalsDerivedrewrite-constant body (true, 0), as generated today-M1
Void.hashDerivedrewrite-constant body (true, 0), as generated today-M1
Void.showRuntimerewrite-the literal "()"-M4
Array.unfilledArrayStoragekernelK5---
Array.loadArrayStoragekernelK5---
Array.storeArrayStoragekernelK5---
Range.equalsDerivedrewrite-field-wise comparison and hash, as generated todayK4M1
Range.hashDerivedrewrite-field-wise comparison and hash, as generated todayK4M1
RangeFrom.equalsDerivedrewrite-field-wise comparison and hash, as generated todayK4M1
RangeFrom.hashDerivedrewrite-field-wise comparison and hash, as generated todayK4M1
RangeTo.equalsDerivedrewrite-field-wise comparison and hash, as generated todayK4M1
RangeTo.hashDerivedrewrite-field-wise comparison and hash, as generated todayK4M1
targetOperatingSystemTargetkernelK8---
targetArchitectureTargetkernelK8---
targetByteOrderTargetkernelK8---
isSameIntrinsic (planned)kernelK4---

Char#

Module: std/text.

NameTargetVerdictGroupShapeNeedsMeasure
Char.equalsIntrinsickernelK4---
Char.compareDerivedrewrite-scalar comparison and the Ordering cases, as generated todayK4M1
Char.hashRuntimerewrite-the integer hash of the scalar valueK1, K2M2
Char.showRuntimerewrite-quote, escape and append the character to a Buffer<UInt8>K4, K5M4
Char.showNestedRuntimerewrite-quote, escape and append the character to a Buffer<UInt8>K4, K5M4
Char.isDigitRuntimerewrite-range tests on the scalar valueK4M4
Char.isLetterRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.isWhitespaceRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.byteLengthRuntimerewrite-range tests on the scalar valueK4M4
Char.toUpperCaseRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.toLowerCaseRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.categoryCodeRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.toCaseFoldedRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.nextCaseVariantRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
Char.tryFrom(Int64)Runtimerewrite-range and surrogate test, then ConvertK4, K7M4

String#

Module: std/text.

NameTargetVerdictGroupShapeNeedsMeasure
String.equalsIntrinsickernelK4---
String.compareDerivedrewrite-the kernel text ordering and the Ordering cases, as generated todayK4M1
String.hashRuntimerewrite-byte loop over byteAt with the mixer of the integersK1, K2, K5M4
String.showDerivedrewrite-self-M1
String.showNestedRuntimerewrite-quote and escape loop over the bytesK4, K5M4
String.addIntrinsickernelK5---
String.byteLengthIntrinsickernelK5---
String.isEmptyRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.sliceBytesRuntimekernelK5---
String.containsRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.startsWithRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.endsWithRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.byteOffsetOfRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.lastByteOffsetOfRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.trimRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.toUpperCaseRuntimerewrite-per-character mapping through the range tables of CharK4, K5M6
String.toLowerCaseRuntimerewrite-per-character mapping through the range tables of CharK4, K5M6
String.toCaseFoldedRuntimerewrite-per-character mapping through the range tables of CharK4, K5M6
String.toNfcRuntimerewrite-decomposition, reordering and composition over generated TorbScript tablesK1, K2, K4, K5M6
String.toNfdRuntimerewrite-decomposition, reordering and composition over generated TorbScript tablesK1, K2, K4, K5M6
String.toNfkcRuntimerewrite-decomposition, reordering and composition over generated TorbScript tablesK1, K2, K4, K5M6
String.toNfkdRuntimerewrite-decomposition, reordering and composition over generated TorbScript tablesK1, K2, K4, K5M6
String.replaceRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.repeatRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.splitRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.splitStorageRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.charAtByteRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4
String.byteAtRuntimekernelK5---
String.copyBytesRuntimerewrite-loop over byteAt and sliceBytes building the result with add or a Buffer<UInt8>K4, K5M4

Console, panic and the test harness#

Module: std/console, std/test, std/prelude.

NameTargetVerdictGroupShapeNeedsMeasure
printRuntimekeepconsole---
printErrorRuntimekeepconsole---
panicRuntimekeepprocess---
isTerminalRuntimekeepconsole---
isErrorTerminalRuntimekeepconsole---
printErrorRawRuntimekeepconsole---
installInterruptHandlerRuntimekeepos---
interruptedRuntimekeepos---
testRuntimekeepharness---
groupRuntimekeepharness---

ArrayList#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
ArrayList.withCapacityContainerrewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.lengthRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.getRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.sliceBetweenRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.appendRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.setRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.insertRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.removeAtRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.replaceBetweenRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.reverseRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.clearRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5
ArrayList.compactRuntimerewrite-an ordinary type over Buffer<Item> (COLLECTIONS gap 6)K5M5

TrieList#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
TrieList.withCapacityContainerrewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.lengthRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.getRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.sliceBetweenRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.appendRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.setRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.insertRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.removeAtRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.replaceBetweenRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.reverseRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.clearRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5
TrieList.compactRuntimerewrite-a persistent trie of Buffer nodes with a tailK1, K2, K5M5

Buffer#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
Buffer.withCapacityContainerkernelK5---
Buffer.holdsCloseLoweredkernelK5---
Buffer.lengthRuntimekernelK5---
Buffer.getRuntimekernelK5---
Buffer.appendRuntimekernelK5---
Buffer.setRuntimekernelK5---
Buffer.insertRuntimerewrite-element loop of get, set and append, or a bulk move if the measurement asks for oneK1, K4, K5M5
Buffer.removeAtRuntimerewrite-element loop of get, set and append, or a bulk move if the measurement asks for oneK1, K4, K5M5
Buffer.replaceBetweenRuntimerewrite-element loop of get, set and append, or a bulk move if the measurement asks for oneK1, K4, K5M5
Buffer.reverseRuntimerewrite-element loop of get, set and append, or a bulk move if the measurement asks for oneK1, K4, K5M5
Buffer.clearRuntimerewrite-element loop of get, set and append, or a bulk move if the measurement asks for oneK1, K4, K5M5

HashMap#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
HashMap.withCapacityContainerrewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashMap.lengthRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashMap.entryAfterRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashMap.getRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashMap.setRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashMap.removeRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashMap.clearRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5

TrieMap#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
TrieMap.withCapacityContainerrewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieMap.lengthRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieMap.entryAfterRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieMap.getRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieMap.setRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieMap.removeRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieMap.clearRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5

HashSet#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
HashSet.withCapacityContainerrewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashSet.lengthRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashSet.itemAfterRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashSet.containsRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashSet.insertRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashSet.removeRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5
HashSet.clearRuntimerewrite-open addressing over Buffers for the keys, the values and the control bytesK1, K2, K4, K5M5

TrieSet#

Module: std/collections, std/core.

NameTargetVerdictGroupShapeNeedsMeasure
TrieSet.withCapacityContainerrewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieSet.lengthRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieSet.itemAfterRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieSet.containsRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieSet.insertRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieSet.removeRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5
TrieSet.clearRuntimerewrite-a hash array mapped trie of Buffer nodesK1, K2, K4, K5M5

Files and standard streams#

Module: std/fs, std/io.

NameTargetVerdictGroupShapeNeedsMeasure
File.readTextRuntimekeepfile---
File.writeTextRuntimekeepfile---
File.existsRuntimekeepfile---
File.isDirectoryRuntimekeepfile---
File.listRuntimekeepfile---
File.listStorageRuntimekeepfile---
File.absolutePathRuntimekeepfile---
File.removeRuntimekeepfile---
File.renameRuntimekeepfile---
File.copyRuntimekeepfile---
File.createSymbolicLinkRuntimekeepfile---
File.symbolicLinkTargetRuntimekeepfile---
fileSystemPathRuntimekeepfile---
fileReadBytesRuntimekeepfile---
fileWriteBytesRuntimekeepfile---
fileReplaceRuntimekeepfile---
fileMetadataRuntimekeepfile---
fileOwnerRuntimekeepfile---
fileSetModeRuntimekeepfile---
fileCreateTemporaryRuntimekeepfile---
File.openRuntimekeepfile---
File.readAllRuntimekeepfile---
File.closeRuntimekeepfile---
File.createRuntimekeepfile---
fileReadRuntimekeepfile---
fileTakeReadRuntimekeepfile---
fileWriteRuntimekeepfile---
fileFlushRuntimekeepfile---
filePathRuntimekeepfile---
fileFailureTextRuntimekeepfile---
readLineOrEndRuntimekeepconsole---
standardReadRuntimekeepconsole---
standardTakeReadRuntimekeepconsole---
standardWriteRuntimekeepconsole---
ioFailureTextRuntimekeepfile---
File.createDirectoryRuntimekeepfile---

Processes and the environment#

Module: std/process, std/os.

NameTargetVerdictGroupShapeNeedsMeasure
Process.argumentsRuntimekeepprocess---
Process.argumentStorageRuntimekeepprocess---
Process.exitRuntimekeepprocess---
Process.runCollectingRuntimekeepprocess---
Process.runFeedingRuntimekeepprocess---
Process.runInheritingRuntimekeepprocess---
childStartRuntimekeepprocess---
childReadRuntimekeepprocess---
childTakeReadRuntimekeepprocess---
childWriteRuntimekeepprocess---
childEndInputRuntimekeepprocess---
childWaitRuntimekeepprocess---
childCloseRuntimekeepprocess---
processFailureTextRuntimekeepprocess---
Environment.getRuntimekeepos---
Environment.entriesRuntimekeepos---
CurrentProcess.executablePathRuntimekeepprocess---
CurrentProcess.workingDirectoryPathRuntimekeepprocess---
CurrentProcess.uptimeNanosecondsRuntimekeepprocess---

Time#

Module: std/time.

NameTargetVerdictGroupShapeNeedsMeasure
monotonicNanosecondsRuntimekeepclock---
wallClockNanosecondsRuntimekeepclock---
Clock.millisecondsRuntimekeepclock---
sleepRuntimekeepclock---

Entropy#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
fillWithEntropyRuntimekeepentropy---

Windows#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
Windows.tickCountRuntimekeepos---
Windows.versionRuntimekeepos---
Windows.registryTextRuntimekeepos---
Windows.registryIntegerRuntimekeepos---
Windows.computerNameRuntimekeepos---
Windows.systemInformationRuntimekeepos---
Windows.knownFolderRuntimekeepos---
Windows.temporaryDirectoryRuntimekeepos---
Windows.memoryStatusRuntimekeepos---
Windows.pageFilesRuntimekeepos---
Windows.processIdentityRuntimekeepos---
Windows.processResourcesRuntimekeepos---
Windows.processorsAvailableRuntimekeepos---
Windows.processorCountsRuntimekeepos---
Windows.systemTimesRuntimekeepos---
Windows.processorTimesOfEachRuntimekeepos---
Windows.jobMemoryLimitRuntimekeepos---
Windows.volumeMountPointsRuntimekeepos---
Windows.volumeInformationRuntimekeepos---
Windows.volumeSpaceRuntimekeepos---
Windows.userAccountNameRuntimekeepos---
Windows.userDisplayNameRuntimekeepos---
Windows.userTokenRuntimekeepos---

Posix#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
Posix.effectiveUserIdentifierRuntimekeepos---
Posix.fileSystemSpaceRuntimekeepos---
Posix.interfaceEntriesRuntimekeepos---
Posix.processIdentityRuntimekeepos---
Posix.resourceUsageRuntimekeepos---
Posix.systemNamesRuntimekeepos---
Posix.hostNameRuntimekeepos---
Posix.configurationRuntimekeepos---
Posix.accountRuntimekeepos---

Linux#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
Linux.readSystemFileRuntimekeepos---
Linux.affinityCountRuntimekeepos---

Bsd#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
Bsd.sysctlTextRuntimekeepos---
Bsd.sysctlIntegerRuntimekeepos---
Bsd.uptimeRuntimekeepos---
Bsd.mountedFileSystemsRuntimekeepos---

MacOs#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
MacOs.userTemporaryDirectoryRuntimekeepos---
MacOs.virtualMemoryRuntimekeepos---
MacOs.swapUsageRuntimekeepos---
MacOs.residentSizeRuntimekeepos---
MacOs.processorLoadRuntimekeepos---
MacOs.processorLoadOfEachRuntimekeepos---

X86#

Module: std/os.

NameTargetVerdictGroupShapeNeedsMeasure
X86.cpuidRuntimekeepos---
X86.extendedControlRegisterRuntimekeepos---

Tasks, channels and regions#

Module: std/task, std/parallel.

NameTargetVerdictGroupShapeNeedsMeasure
Task.finishedRuntimekeepscheduler---
Task.runToEndRuntimekeepscheduler---
cancelTaskRuntimekeepscheduler---
Workers.countRuntimekeepscheduler---
Workers.blockingRuntimekeepscheduler---
Workers.copiesRuntimekeepscheduler---
pauseRuntimekeepscheduler---
blockingTurnRuntimekeepscheduler---
spawnLoweredkeepscheduler---
stopAsCancelledLoweredkeepscheduler---
completedWithinRuntimekeepscheduler---
completedFirstRuntimekeepscheduler---
receivedRuntimekeepscheduler---
offeredRuntimekeepscheduler---
endWritingRuntimekeepscheduler---
closeReadingRuntimekeepscheduler---
openRegionRuntimekeepscheduler---
claimWindowRuntimekeepscheduler---
windowBorderRuntimekeepscheduler---
finishWindowRuntimekeepscheduler---
joinRegionRuntimekeepscheduler---
regionItemRuntimekeepscheduler---
storeRegionItemRuntimekeepscheduler---

Sockets and name servers#

Module: std/network.

NameTargetVerdictGroupShapeNeedsMeasure
networkListenRuntimekeepnetwork---
networkAcceptRuntimekeepnetwork---
networkListenUnixRuntimekeepnetwork---
networkConnectUnixRuntimekeepnetwork---
networkConnectRuntimekeepnetwork---
networkReceiveRuntimekeepnetwork---
networkTakeReceivedRuntimekeepnetwork---
networkSendRuntimekeepnetwork---
networkShutdownRuntimekeepnetwork---
networkSetOptionRuntimekeepnetwork---
networkOptionRuntimekeepnetwork---
networkCloseRuntimekeepnetwork---
networkAddressRuntimekeepnetwork---
networkResolveRuntimekeepnetwork---
networkTakeResolvedRuntimekeepnetwork---
networkErrorTextRuntimekeepnetwork---
networkBindRuntimekeepnetwork---
networkConnectDatagramRuntimekeepnetwork---
networkSendDatagramRuntimekeepnetwork---
networkReceiveDatagramRuntimekeepnetwork---
networkTakeDatagramRuntimekeepnetwork---
networkNameServersRuntimekeepnetwork---
networkRandomRuntimekeepentropy---

IDNA tables#

Module: std/network (dns).

NameTargetVerdictGroupShapeNeedsMeasure
idnaStatusRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
idnaMappingRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
idnaGeneralCategoryRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
idnaJoiningTypeRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
idnaBidiClassRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
idnaCombiningClassRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6
idnaScriptRuntimerewrite-lookup in range tables that tools/unicode emits as TorbScript constants instead of CK4, K5M6

TLS#

Module: std/tls.

NameTargetVerdictGroupShapeNeedsMeasure
tlsClientRuntimekeeptls---
tlsIdentityRuntimekeeptls---
tlsServerRuntimekeeptls---
tlsFeedRuntimekeeptls---
tlsHandshakeRuntimekeeptls---
tlsTakeOutgoingRuntimekeeptls---
tlsWriteRuntimekeeptls---
tlsReadRuntimekeeptls---
tlsNotifyCloseRuntimekeeptls---
tlsCloseRuntimekeeptls---
tlsPeerCertificateRuntimekeeptls---
tlsOfferRuntimekeeptls---
tlsPresentRuntimekeeptls---
tlsRequireRuntimekeeptls---
tlsNegotiatedRuntimekeeptls---
tlsProtocolRuntimekeeptls---
tlsErrorTextRuntimekeeptls---

The VM kernel#

Module: std/machine.

NameTargetVerdictGroupShapeNeedsMeasure
Machine.operateRuntimekeepvm---
Machine.loadRuntimekeepvm---
Machine.storeRuntimekeepvm---
Machine.loadAtRuntimekeepvm---
Machine.storeAtRuntimekeepvm---
Machine.countUpRuntimekeepvm---
Machine.countDownRuntimekeepvm---
Machine.placeTextRuntimekeepvm---
Machine.placeFloatRuntimekeepvm---
Machine.installRuntimekeepvm---

Expression#

Module: std/expression.

NameTargetVerdictGroupShapeNeedsMeasure
Expression.valueLoweredkeepcompiler---
Expression.capturesLoweredkeepcompiler---

Receiver scripts and the sandbox#

Module: std/sandbox.

NameTargetVerdictGroupShapeNeedsMeasure
scriptBodyScriptTablekeepvm---
scriptImportsScriptTablekeepvm---
runScriptMachinekeepvm---
scriptReceiverScriptTablekeepvm---
loadScriptMachinekeepvm---
loadScriptTextMachinekeepvm---
runLoadedScriptMachinekeepvm---
scriptSourcesScriptTablekeepvm---
hostLoadScriptScriptHostkeepvm---
hostLoadScriptTextScriptHostkeepvm---
hostRunScriptScriptHostkeepvm---
runCrossedScriptTablekeepvm---

Embedded resources#

Module: std/resource.

NameTargetVerdictGroupShapeNeedsMeasure
embeddedBytesEmbeddedkeepresource---
embeddedTextEmbeddedkeepresource---

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, rewrite or keep; a kernel row names a group that is not in the kernel table, or a keep row an edge that is not in the edges table; a rewrite row 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 native declaration of std/ has no manifest entry: the test reads every native fn of std/*/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.add from Numeric) 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 fn bodies as IR and native { ... } blocks, the next step of the same milestone.
  • The shape of Buffer as the storage of the collections (COLLECTIONS.md gap 6).
Esc