Stdlib Implementation Status

August 7, 2026 · View on GitHub

Last updated: 2026-08-02 Issue: BT-247, BT-1808, BT-2869, BT-2976 Methodology: Audit of stdlib/src/*.bt files, compiler intrinsics (intrinsics.rs, primitive_bindings.rs), runtime dispatch modules (beamtalk_*.erl), stdlib test coverage (stdlib/bootstrap-test/*.btscript), and REPL protocol test coverage (tests/repl-protocol/cases/*.btscript).

Per-class method counts below are derived directly from stdlib/src/*.bt by counting top-level method signatures (2-space-indented lines containing =>, excluding /// doc comments). Re-run per class with: grep -cP '^ (?!//)\S.*=>' stdlib/src/ClassName.bt (counts both class- and instance-side methods). This undercounts nothing but can double-count a rare multi-line keyword signature that itself contains a nested => before the real one — spot-check unusually large deltas. The Mechanism column is derived the same way: a body of exactly @primitive ... is @primitive selector, a body containing @intrinsic is intrinsic, a body of exactly self delegate is native delegate (dispatches to the class's native: Erlang module), anything else is pure BT. Because this pass prioritized selector/mechanism/count accuracy over exhaustively re-verifying test coverage, tables regenerated in this pass (BT-2976) omit a per-row E2E column rather than guess; see stdlib/bootstrap-test/, stdlib/test/, and tests/repl-protocol/cases/ for current coverage, and BT-408 for the outstanding test-coverage-gap tracking issue.

Executive Summary

MetricValue
Stdlib .bt files109
Runtime-only classes0 (all classes have stdlib/src/*.bt)
Missing .bt files0
Protocols2 (Printable, JsonRepresentable)

Status Categories

SymbolMeaning
✅ ImplementedFully working — compiler intrinsic, runtime dispatch, or pure Beamtalk
❌ Not ImplementedDefined in stdlib but no backing implementation
🧪 TestedHas stdlib or E2E test coverage

Implementation Mechanisms

MechanismDescriptionExample
Compiler intrinsicInlined at call site by codegen (intrinsics.rs)Block >> value, Object >> class
@primitive selectorRuntime dispatch via beamtalk_*.erl moduleInteger >> +, String >> length
Pure BeamtalkCompiled from .bt source (ADR 0007)True >> not, Integer >> isEven

Tier 1: Core Classes

ProtoObject (stdlib/src/ProtoObject.bt)

Class: ProtoObject — superclass: nil (root class) Methods: 9/9 implemented (100%)

SelectorMechanismStatusNotes
==intrinsicValue equality (Erlang ==, non-strict)
/=intrinsicValue inequality (negation of ==)
=:=intrinsicStrict value equality (Erlang =:=)
=/=intrinsicStrict value inequality (negation of =:=)
classintrinsicType introspection
doesNotUnderstand:args:intrinsicFallback for unknown messages
perform:withArguments:intrinsicDynamic dispatch
performLocally:withArguments:intrinsicExecute a class method in the caller's process, bypassing gen_server dispatch
perform:withArguments:timeout:intrinsicDynamic dispatch with explicit timeout

Object (stdlib/src/Object.bt)

Class: Object — superclass: ProtoObject Methods: 27/27 implemented (100%)

SelectorMechanismStatusNotes
class delegate (class-side)pure BTClass-side delegate sentinel (ADR 0101, BT-2720)
classintrinsicReturn the class of the receiver
isNilpure BTReturns false for all objects except nil
notNilpure BTReturns true for all objects except nil
ifNil:pure BTReturns self (not nil)
ifNotNil:pure BTEvaluates notNilBlock with self
ifNil:ifNotNil:pure BTEvaluates notNilBlock with self
ifNotNil:ifNil:pure BTEvaluates notNilBlock with self
printStringpure BT'a ' ++ self class printString (BT-477)
displayStringpure BTDelegates to printString; override for user-facing display
inspectpure BTOpens a navigable Inspector cursor on the receiver
yourselfpure BTReturns self
hashintrinsicerlang:phash2/1
equals:pure BTOverridable value-equality counterpart to =:=
respondsTo:intrinsicbeamtalk_primitive:responds_to/2
fieldNamesintrinsicAsync for actors
fieldAt:intrinsicAsync for actors
fieldAt:put:intrinsicAsync for actors (returns new state)
perform:intrinsicDynamic dispatch (unary)
perform:withArguments:intrinsicDynamic dispatch with arguments
subclassResponsibilitypure BTCalls self error: — pure Beamtalk method (BT-405)
notImplementedpure BTCalls self error: — WIP stub marker
show:pure BTNil-safe Transcript output (no newline); returns self
showCr:pure BTNil-safe Transcript output (with newline); returns self
isKindOf:pure BTself class includesBehaviour: aClass
error:intrinsicSmalltalk-style error signaling
delegate (instance-side)pure BTDelegate message dispatch to the backing Erlang module (ADR 0101, BT-2720)

sealed remains a method modifier (e.g. sealed getValue => ...), not a selector — it is not counted above.

Note: new and new: have moved to Value (see below). Object subclasses without data (FFI namespaces, abstract extension points) cannot be directly instantiated.

Value (stdlib/src/Value.bt)

Class: Value — superclass: Object Methods: 3/3 implemented (100%)

SelectorMechanismStatusE2ENotes
newintrinsic basicNew🧪Inline codegen for value type instantiation
new:intrinsic basicNewWith🧪Instantiation with constructor args
inspectpure BTClassName(field: value, ...) format

Collection (stdlib/src/Collection.bt)

Class: Collection — superclass: Valueabstract typed Methods: 33/33 implemented (100%) Note: Abstract superclass for List, Set, Array, Binary, etc. Provides default iteration built on size and do:.

SelectorMechanismStatusNotes
class withAll:pure BTFactory — create a collection of this type from a list
sizepure BT (abstract)Subclass must implement
do:pure BT (abstract)Subclass must implement
printStringpure BTDeveloper-readable string representation
speciespure BTClass used to build results from collection operations
isEmptypure BTself size =:= 0
isNotEmptypure BTself isEmpty not
includes:pure BTLinear search via do:
inject:into:@primitive selectorFold with accumulator
collect:pure BTMap via do:
parallelCollect:pure BTLike collect:, but evaluates block for every element concurrently via Parallel all: (BT-2974)
parallelCollect:maxConcurrency:pure BTBounded-concurrency parallelCollect: — runs in chunks of at most maxConcurrency (BT-3006 follow-up)
runChunked:maxConcurrency:pure BTInternal helper backing parallelCollect:maxConcurrency:
runChunked:maxConcurrency:acc:pure BTinternal — tail-recursive accumulator helper for the above
select:pure BTFilter via do:
reject:pure BTNegated filter
detect:pure BTFirst match
detect:ifNone:pure BTFirst match with default
anySatisfy:pure BTTest if any element satisfies block
allSatisfy:pure BTTest if all elements satisfy block
noneSatisfy:pure BTTest if no element satisfies block
count:pure BTCount elements for which block returns true
sum@primitive selectorSum all elements; 0 for an empty collection
max@primitive selectorLargest element
min@primitive selectorSmallest element
average@primitive selectorMean of the elements as a Float
eachWithIndex:pure BTIterate with 1-based index
do:separatedBy:pure BTIterate, evaluating separatorBlock between elements
asListpure BTConvert to a List, in iteration order
asArraypure BTConvert to an Array
asSetpure BTConvert to a Set, discarding duplicates
asBagpure BTConvert to a Bag, counting occurrences
asStringpure BTString representation

Binary (stdlib/src/Binary.bt)

Class: Binary — superclass: Collection@sealed typed (ADR 0086) Methods: 22/22 implemented (100%) Note: Byte-level data and serialization. Parent of String. Maps to Erlang binary().

SelectorMechanismStatusNotes
class serialize:pure BT (Erlang FFI)External term format, via (Erlang beamtalk_binary) serialize:
class deserialize:pure BT (Erlang FFI)Reverse of serialize
class fromIolist:pure BT (Erlang FFI)Build from iolist
class fromBytes:pure BT (Erlang FFI)Build from byte list
class deserializeWithUsed:pure BT (Erlang FFI)Returns #(value, bytesConsumed)
class fromBase64:pure BT (Erlang FFI)Decode a standard (RFC 4648 §4) base64 string
class fromBase64Url:pure BT (Erlang FFI)Decode a URL-safe (RFC 4648 §5) base64 string
class fromHex:pure BT (Erlang FFI)Decode a hexadecimal string
size@primitive selectorByte count
do:@primitive selectorIterate bytes
printString@primitive selectorDeveloper representation
at:@primitive selector1-based byte access
byteAt:@primitive selector0-based byte access
byteSize@primitive selectorSame as size
part:size:@primitive selectorZero-copy byte-level slice
concat:@primitive selectorByte concatenation
toBytes@primitive selectorByte list
asString@primitive selectorValidate UTF-8 and return as String
asStringUnchecked@primitive selectorReturn as String without UTF-8 validation
asBase64pure BT (Erlang FFI)Standard (RFC 4648 §4) base64 encoding
asBase64Urlpure BT (Erlang FFI)URL-safe (RFC 4648 §5) base64 encoding
asHexpure BT (Erlang FFI)Lowercase hexadecimal encoding

Number (stdlib/src/Number.bt)

Class: Number — superclass: Valueabstract typed Methods: 18/18 implemented (100%)

SelectorMechanismStatusPharo Equivalent
+pure BT (abstract — Integer/Float override as @primitive)Number>>+
-pure BT (abstract — Integer/Float override as @primitive)Number>>-
*pure BT (abstract — Integer/Float override as @primitive)Number>>*
/pure BT (abstract — Integer/Float override as @primitive)Number>>/
<pure BT (abstract — Integer/Float override as @primitive)Magnitude>><
>pure BT (abstract — Integer/Float override as @primitive)Magnitude>>>
<=pure BT (abstract — Integer/Float override as @primitive)Magnitude>><=
>=pure BT (abstract — Integer/Float override as @primitive)Magnitude>>>=
isZeropure BTNumber>>isZero
isPositivepure BTNumber>>positive
isNegativepure BTNumber>>negative
signpure BTNumber>>sign
between:and:pure BTMagnitude>>between:and:
reciprocalpure BTNumber>>reciprocal
degreesToRadianspure BTNumber>>degreesToRadians
radiansToDegreespure BTNumber>>radiansToDegrees
isIntegerpure BTMagnitude>>isInteger (identity/type check)
isFloatpure BTMagnitude>>isFloat (identity/type check)

Integer (stdlib/src/Integer.bt)

Class: Integer — superclass: Number@sealed Methods: 55/55 implemented (100%) Note: ** is Integer-only (see Pharo Comparison below) — Float has the equivalent raisedTo: but no separate ** operator.

SelectorMechanismStatusPharo Equivalent
+@primitive selectorInteger>>+
-@primitive selectorInteger>>-
*@primitive selectorInteger>>*
/@primitive selectorInteger>>/
div:@primitive selectorInteger>>//
%@primitive selectorInteger>>\\
**@primitive selectorInteger>>raisedTo:
=:=@primitive selectorInteger>>=
=/=@primitive selectorInteger>>~=
/=@primitive selectorInteger>>~=
<@primitive selectorInteger>><
>@primitive selectorInteger>>>
<=@primitive selectorInteger>><=
>=@primitive selectorInteger>>>=
negatedpure BTInteger>>negated
abspure BTInteger>>abs
roundedpure BTInteger>>rounded (identity)
ceilingpure BTInteger>>ceiling (identity)
floorpure BTInteger>>floor (identity)
truncatedpure BTInteger>>truncated (identity)
squaredpure BTNumber>>squared
roundTo:pure BTNumber>>roundTo:
truncateTo:pure BTNumber>>truncateTo:
isEvenpure BTInteger>>even
isOddpure BTInteger>>odd
min:pure BTMagnitude>>min:
max:pure BTMagnitude>>max:
timesRepeat:intrinsicInteger>>timesRepeat:
to:do:intrinsicInteger>>to:do:
to:by:do:intrinsicInteger>>to:by:do:
to:pure BTNumber>>to: (returns an Interval)
to:by:pure BTNumber>>to:by: (returns an Interval)
asFloat@primitive selectorInteger>>asFloat
asString@primitive selectorInteger>>asString
printString@primitive selectorInteger>>printString
bitAnd:@primitive selectorInteger>>bitAnd:
bitOr:@primitive selectorInteger>>bitOr:
bitXor:@primitive selectorInteger>>bitXor:
bitShift:@primitive selectorInteger>>bitShift:
bitNot@primitive selectorInteger>>bitNot
factorialpure BTInteger>>factorial
gcd:pure BTInteger>>gcd:
lcm:pure BTInteger>>lcm:
isLetter@primitive selectorCharacter classification (BT-461)
isDigit@primitive selectorCharacter classification (BT-461)
isUppercase@primitive selectorCharacter classification (BT-461)
isLowercase@primitive selectorCharacter classification (BT-461)
isWhitespace@primitive selectorCharacter classification (BT-461)
sqrt@primitive selectorNumber>>sqrt
log@primitive selectorNumber>>ln (natural log)
ln@primitive selectorNumber>>ln — alias for log
log2@primitive selectorNumber>>log: (base 2)
log10@primitive selectorNumber>>log (base 10)
exp@primitive selectorNumber>>exp
raisedTo:@primitive selectorNumber>>raisedTo:

String (stdlib/src/String.bt)

Class: String — superclass: Binary@sealed (ADR 0086) Methods: 68/68 implemented (100%) Correction (BT-2976): the real selector for substring search is includesSubstring:, and the real selector for grapheme iteration is do: (each:/includes: were internal @primitive dispatch-table tag strings in the source, not the public Beamtalk selector — the previous revision of this table listed the internal tag as if it were the callable method name).

SelectorMechanismStatusPharo Equivalent
class withAll:@primitive selectorString class>>withAll:
class fromCodePoint:@primitive selectorCharacter>>asString (inverse)
class fromCodePoints:@primitive selectorN/A
class fromIolist:@primitive selectorN/A (BEAM-specific)
=:=@primitive selectorString>>=
=/=@primitive selectorString>>~=
/=@primitive selectorString>>~=
<@primitive selectorString>><
>@primitive selectorString>>>
<=@primitive selectorString>><=
>=@primitive selectorString>>>=
++@primitive selectorString>>,
,@primitive selectorString>>,
length@primitive selectorString>>size
sizepure BTString>>size
at:@primitive selectorString>>at:
first@primitive selectorSequenceableCollection>>first
last@primitive selectorSequenceableCollection>>last
uppercase@primitive selectorString>>asUppercase
lowercase@primitive selectorString>>asLowercase
capitalize@primitive selectorString>>capitalized
trim@primitive selectorString>>trimBoth
trimLeft@primitive selectorString>>trimLeft
trimRight@primitive selectorString>>trimRight
reverse@primitive selectorString>>reversed
includesSubstring:@primitive selectorString>>includesSubstring:
startsWith:@primitive selectorString>>beginsWith:
endsWith:@primitive selectorString>>endsWith:
indexOf:@primitive selectorString>>indexOfSubCollection:
split:@primitive selectorN/A
splitOn:@primitive selectorN/A
repeat:@primitive selectorN/A
lines@primitive selectorString>>lines
words@primitive selectorString>>substrings
replaceAll:with:@primitive selectorString>>replaceAll:with:
replaceFirst:with:@primitive selectorString>>copyReplaceFirst:with:
take:@primitive selectorString>>first:
drop:@primitive selectorString>>allButFirst:
padLeft:@primitive selectorString>>padLeftTo:
padRight:@primitive selectorString>>padRightTo:
padLeft:with:@primitive selectorString>>padLeftTo:with:
padRight:with:@primitive selectorString>>padRightTo:with:
isEmptypure BTString>>isEmpty
isNotEmptypure BTString>>isNotEmpty
isBlank@primitive selectorString>>isAllSeparators
isDigit@primitive selectorString>>isAllDigits
isAlpha@primitive selectorString>>isAllLetters
asInteger@primitive selectorString>>asInteger
asFloat@primitive selectorString>>asFloat
asAtom@primitive selectorN/A (BEAM-specific)
asList@primitive selectorString>>asArray
do:@primitive selectorString>>do:
collect:@primitive selectorString>>collect:
select:@primitive selectorString>>select:
reject:@primitive selectorString>>reject:
stream@primitive selectorN/A
matchesRegex:@primitive selectorN/A
matchesRegex:options:@primitive selectorN/A
firstMatch:@primitive selectorN/A
allMatches:@primitive selectorN/A
replaceRegex:with:@primitive selectorN/A
replaceAllRegex:with:@primitive selectorN/A
splitRegex:@primitive selectorN/A
printStringpure BTString>>printString
asStringpure BTidentity
displayStringpure BTidentity
urlEncodedpure BT (Erlang FFI)N/A
urlDecodedpure BT (Erlang FFI)N/A

List (stdlib/src/List.bt)

Class: List — superclass: Collection@sealed typed Methods: 44/44 implemented (100%) Note: List in Beamtalk maps to Erlang linked lists. Literal syntax: #(1, 2, 3). Renamed from Array in BT-419 — Array is reserved for a future tuple-backed O(1)-indexed collection. Migration: BT-419 — migrated from hand-written beamtalk_list.erl (Option B) to compiled stdlib/src/List.bt with BIF mappings (Option A). Complex operations delegate to the beamtalk_list.erl (and, for inject:into:, beamtalk_collection.erl) helper modules — corrected in this pass (BT-2976); the module names were previously misspelled as beamtalk_list_ops.erl / beamtalk_collection_ops.erl, which do not exist in this repo. Corrections (BT-2976): add: now appends to the end of the list (O(n)); addFirst: is the O(1) prepend. indexOf: is pure BT (not a primitive delegate). eachWithIndex: is a self-hosted compiler intrinsic (BT-2703), not a beamtalk_list delegate. ++ lowers straight to the erlang:++ BIF, not a beamtalk_list function.

SelectorMechanismStatusPharo Equivalent
class withAll:@primitive selectorIdentity — a list is already a List
class new:pure BTConvenience alias for withAll:
size@primitive selectorSequenceableCollection>>size
isEmpty@primitive selectorCollection>>isEmpty
first@primitive selectorSequenceableCollection>>first
rest@primitive selectorSequenceableCollection>>allButFirst
last@primitive selectorSequenceableCollection>>last
at:@primitive → beamtalk_list:at/2SequenceableCollection>>at:
includes:@primitive selectorCollection>>includes:
sort@primitive selectorSequenceableCollection>>sort
sort:@primitive → beamtalk_list:sort_with/2SequenceableCollection>>sort:
reversed@primitive selectorSequenceableCollection>>reversed
unique@primitive → beamtalk_list:unique/1Collection>>asSet asArray
detect:@primitive → beamtalk_list:detect/2Collection>>detect:
detect:ifNone:pure BTCollection>>detect:ifNone:
do:@primitive → beamtalk_list:do/2Collection>>do:
asListpure BTIdentity override of Collection>>asList
collect:@primitive selectorCollection>>collect:
select:@primitive selectorCollection>>select:
reject:@primitive → beamtalk_list:reject/2Collection>>reject:
inject:into:@primitive → beamtalk_collection:inject_into/3Collection>>inject:into:
take:@primitive → beamtalk_list:take/2SequenceableCollection>>first:
drop:@primitive → beamtalk_list:drop/2SequenceableCollection>>allButFirst:
flatten@primitive selectorCollection>>flattened
flatMap:@primitive selectorCollection>>flatCollect:
count:@primitive selectorCollection>>count:
anySatisfy:@primitive selectorCollection>>anySatisfy:
allSatisfy:@primitive selectorCollection>>allSatisfy:
++@primitive BIF (erlang:++)SequenceableCollection>>,
printString@primitive selectorList>>printString
from:to:@primitive → beamtalk_list:from_to/3SequenceableCollection>>copyFrom:to:
indexOf:pure BTSequenceableCollection>>indexOf:
zip:@primitive → beamtalk_list:zip/2SequenceableCollection>>with:collect:
groupBy:@primitive → beamtalk_list:group_by/2Collection>>groupedBy:
partition:pure BTCollection>>partition:
takeWhile:@primitive selectorN/A
dropWhile:@primitive selectorN/A
intersperse:@primitive → beamtalk_list:intersperse/2N/A
addFirst:@primitive selectorO(1) prepend (returns a new list)
add:@primitive selectorO(n) append (returns a new list) — see correction above
stream@primitive selectorLazy Stream over the list elements
atRandom@primitive selectorN/A
join@primitive selectorJoin a list of strings with no separator
join:@primitive selectorJoin a list of strings with a separator

Block (stdlib/src/Block.bt)

Class: Block — superclass: Object@sealed Methods: 11/11 implemented (100%) Correction (BT-2976): describe no longer exists on Block (removed along with most other classes' describe methods — see the Object/Error section notes above).

SelectorMechanismStatusPharo Equivalent
valueintrinsicBlockClosure>>value
value:intrinsicBlockClosure>>value:
value:value:intrinsicBlockClosure>>value:value:
value:value:value:intrinsicBlockClosure>>value:value:value:
whileTrue:intrinsicBlockClosure>>whileTrue:
whileFalse:intrinsicBlockClosure>>whileFalse:
repeatintrinsicBlockClosure>>repeat
on:do:intrinsicBlockClosure>>on:do:
ensure:intrinsicBlockClosure>>ensure:
arity@primitive selectorBlockClosure>>argumentCount
valueWithArguments:intrinsicBlockClosure>>valueWithArguments:

True (stdlib/src/True.bt) & False (stdlib/src/False.bt)

Class: True / False — superclass: Boolean@sealed Methods: 7/7 implemented each (100%) Inherits: and:, or:, xor:, isBoolean from Boolean (which also declares ifTrue:ifFalse:/ifTrue:/ifFalse:/not as subclassResponsibility abstract protocol — see the Boolean table below). Correction (BT-2976): describe no longer exists on True/False.

SelectorMechanismStatusPharo Equivalent
ifTrue:ifFalse:pure BTBoolean>>ifTrue:ifFalse:
ifTrue:pure BTBoolean>>ifTrue:
ifFalse:pure BTBoolean>>ifFalse:
notpure BTBoolean>>not
isTruepure BTN/A
isFalsepure BTN/A
printStringpure BTBoolean>>printString

UndefinedObject (stdlib/src/UndefinedObject.bt)

Class: UndefinedObject — superclass: Object@sealed Methods: 10/10 implemented (100%) Correction (BT-2976): describe no longer exists on UndefinedObject.

SelectorMechanismStatusPharo Equivalent
isNilpure BTUndefinedObject>>isNil
notNilpure BTUndefinedObject>>notNil
ifNil:pure BTUndefinedObject>>ifNil:
ifNotNil:pure BTUndefinedObject>>ifNotNil:
ifNil:ifNotNil:pure BTUndefinedObject>>ifNil:ifNotNil:
ifNotNil:ifNil:pure BTUndefinedObject>>ifNotNil:ifNil:
copypure BTUndefinedObject>>shallowCopy
deepCopypure BTUndefinedObject>>deepCopy
shallowCopypure BTUndefinedObject>>shallowCopy
printStringpure BTUndefinedObject>>printString

Float (stdlib/src/Float.bt)

Class: Float — superclass: Number@sealed Methods: 48/48 implemented (100%) Correction (BT-2976): the previous revision of this table (25 methods) predated the trigonometric and logarithmic methods below, and separately claimed some of them (sqrt, log/ln/exp, trig) as "missing" in the Pharo-comparison section further down — both are stale; all are implemented. Float does not define a separate ** operator (unlike Integer) — use raisedTo:, which ** desugars to on Integer.

SelectorMechanismStatusPharo Equivalent
class pi@primitive selectorFloat class>>pi
class e@primitive selectorN/A
class infinitypure BTFloat class>>infinity — raises (BEAM has no IEEE 754 infinity)
+@primitive selectorFloat>>+
-@primitive selectorFloat>>-
*@primitive selectorFloat>>*
/@primitive selectorFloat>>/
=:=@primitive selectorFloat>>=
=/=@primitive selectorFloat>>~=
/=@primitive selectorFloat>>~=
<@primitive selectorFloat>><
>@primitive selectorFloat>>>
<=@primitive selectorFloat>><=
>=@primitive selectorFloat>>>=
negatedpure BTFloat>>negated
abspure BTFloat>>abs
min:pure BTMagnitude>>min:
max:pure BTMagnitude>>max:
rounded@primitive selectorFloat>>rounded
ceiling@primitive selectorFloat>>ceiling
floor@primitive selectorFloat>>floor
truncated@primitive selectorFloat>>truncated
squaredpure BTNumber>>squared
roundTo:pure BTNumber>>roundTo:
truncateTo:pure BTNumber>>truncateTo:
isNaNpure BTFloat>>isNaN (always false — BEAM has no NaN)
isInfinitepure BTFloat>>isInfinite (always false — BEAM has no Infinity)
isZeropure BTFloat>>isZero
asInteger@primitive selectorFloat>>asInteger
asString@primitive selectorFloat>>asString
printString@primitive selectorFloat>>printString
sin@primitive selectorNumber>>sin
cos@primitive selectorNumber>>cos
tan@primitive selectorNumber>>tan
sinh@primitive selectorNumber>>sinh
cosh@primitive selectorNumber>>cosh
tanh@primitive selectorNumber>>tanh
asin@primitive selectorNumber>>arcSin
acos@primitive selectorNumber>>arcCos
atan@primitive selectorNumber>>arcTan
atan2:@primitive selectorNumber>>arcTan:
sqrt@primitive selectorNumber>>sqrt
log@primitive selectorNumber>>ln (natural log)
ln@primitive selectorNumber>>ln — alias for log
log2@primitive selectorNumber>>log: (base 2)
log10@primitive selectorNumber>>log (base 10)
exp@primitive selectorNumber>>exp
raisedTo:@primitive selectorNumber>>raisedTo:

Tier 2: Standard Classes

Actor (stdlib/src/Actor.bt)

Class: Actor — superclass: Object@sealed Methods: 26/26 implemented (100%) Correction (BT-2976): describe no longer exists on Actor — the class-side registration (spawnAs:, named:, allRegistered, …) and lifecycle/monitoring protocol below were added since the last audit (BT-2966-era work) and were entirely undocumented here. Update (BT-3071): new/new: (previously codegen-injected error stubs invisible to this source-based audit) are now real class sealed new / new: declarations on Actor.bt — both always raise instantiation_error ("Use spawn instead" / "Use spawnWith: instead"); see docs/ADR/0013-class-variables-class-methods-instantiation.md.

SelectorMechanismStatusNotes
class spawnintrinsicgen_server:start_link with default state
class spawnWith:intrinsicWith constructor args
class newintrinsicAlways raises instantiation_error — actors use spawn, not new
class new:intrinsicAlways raises instantiation_error — actors use spawnWith:, not new:
class spawnAs:pure BTAtomically spawn and register under name
class spawnWith:as:pure BTAtomically spawn with init args and register under name
class named:pure BTLook up a registered actor by name, checked against the receiver class
class allRegisteredpure BTEvery currently-registered Beamtalk actor, as Actor proxies
class supervisionPolicypure BTDefault OTP restart policy for this actor class
class isSupervisorpure BTWhether this class is a supervisor
class supervisionSpecpure BTSupervisionSpec for this actor class with default settings
registerAs:pure BTRegister this (already-spawned) actor under name
unregisterpure BTUnregister this actor's name, if any (idempotent)
unregisterNamepure BT (Erlang FFI)Internal FFI seam (ADR 0101 Part 4)
registeredNamepure BT (Erlang FFI)The Symbol this actor is registered under, or nil
isRegisteredpure BT (Erlang FFI)Whether this actor currently has a registered name
withTimeout:pure BTWrap this actor with a custom message timeout
initializepure BTOptional lifecycle hook, called automatically after spawn
terminate:pure BTOptional lifecycle hook, called when the actor is shutting down
delegateintrinsicDelegate message dispatch to the backing Erlang module
pidintrinsicReturn the raw Erlang PID backing this actor
monitorintrinsicCreate an Erlang monitor on this actor's process
onExit:intrinsicRegister a callback invoked when this actor exits
stopintrinsicGracefully stop this actor (gen_server:stop)
killintrinsicForcefully kill this actor (exit(Pid, kill))
isAliveintrinsicCheck if this actor's process is still alive

File (stdlib/src/File.bt)

Class: File — superclass: Object (native: beamtalk_file) Methods: 22/22 implemented (100%) — all class-level methods Correction (BT-2976): the previous revision of this table (3 methods: exists:, readAll:, writeAll:contents:) predates the binary I/O, directory, and path operations below — all implemented, all dispatching via native delegate (self delegate) to beamtalk_file.erl, not @primitive.

SelectorMechanismStatusNotes
class exists:native delegateTest if a file exists at the given path
class readAll:native delegateRead a file as a Result(String, Error)
class writeAll:contents:native delegateWrite text to a file, creating or overwriting it
class readBinary:native delegateRead a file as raw Result(Binary, Error)
class writeBinary:contents:native delegateWrite binary data to a file
class appendBinary:contents:native delegateAppend binary data to a file, creating it if needed
class lines:native delegateLazy Stream of lines from a file
class open:do:native delegateBlock-scoped file handle with automatic cleanup
class open:mode:native delegateOpen a file in the given mode, returning a FileHandle
class open:mode:do:native delegateBlock-scoped handle in a given mode
class lastModified:native delegateLast modification time of a file
class isDirectory:native delegateTest if a path is a directory
class isFile:native delegateTest if a path is a regular file
class mkdir:native delegateCreate a directory (errors if the parent is missing)
class mkdirAll:native delegateCreate a directory and all missing parents
class listDirectory:native delegateList directory entries as a List of String
class delete:native delegateDelete a file or empty directory
class deleteAll:native delegateRecursively delete a directory tree
class rename:to:native delegateRename or move a file or directory
class absolutePath:native delegateResolve a relative path to its absolute path
class cwdnative delegateCurrent working directory
class tempDirectorynative delegateOS temporary directory path

Beamtalk / BeamtalkInterface (stdlib/src/BeamtalkInterface.bt)

Class: BeamtalkInterface — superclass: Actor Methods: 20/20 implemented (100%) Correction (BT-2976): the previous revision of this table (4 methods) predated the logger/debug-target control-plane and Erlang-module-help selectors below.

SelectorMechanismStatusPharo Equivalent
class currentpure BTCurrent singleton instance (nil before workspace bootstrap)
class current:pure BTSet the current singleton instance
allClassespure BTSmalltalk>>allClasses
classNamed:pure BTSmalltalk>>at:
globalspure BTSmalltalk>>globals
help:pure BTClass documentation: name, superclass, method signatures
help:selector:pure BTDetailed documentation for a specific method
erlangHelp:pure BTDocumentation for an Erlang module (type sigs + EEP-48 docs)
erlangHelp:selector:pure BTDocumentation for a specific Erlang module function
versionpure BTBeamtalk version string
logLevelpure BTCurrent OTP primary log level
logLevel:pure BTSet the OTP primary log level
logFormatpure BTCurrent log format (#text/#json)
logFormat:pure BTSwitch the log format on the file handler
debugTargetspure BTAvailable debug target symbols
enableDebug:pure BTEnable debug logging for a subsystem/class/actor
disableDebug:pure BTDisable debug logging for a subsystem/class/actor
activeDebugTargetspure BTCurrently enabled debug targets
disableAllDebugpure BTDisable all debug targets
loggerInfopure BTFormatted description of the current logger state

Dictionary (stdlib/src/Dictionary.bt — BT-418)

Class: Dictionary(K, V) — superclass: Collection@sealed Helper module: beamtalk_map.erl (complex operations) — corrected in this pass (BT-2976); previously misspelled beamtalk_map_ops.erl, which does not exist. Methods: 15/15 implemented (100%) Correction (BT-2976): describe no longer exists on Dictionary; includes: (value membership) and collect: were undocumented.

SelectorMechanismStatusPharo Equivalent
size@primitive selectorDictionary>>size
keys@primitive selectorDictionary>>keys
values@primitive selectorDictionary>>values
at:@primitive selectorDictionary>>at:
at:ifAbsent:@primitive selectorDictionary>>at:ifAbsent:
at:put:@primitive selectorDictionary>>at:put:
includesKey:@primitive selectorDictionary>>includesKey:
removeKey:@primitive selectorDictionary>>removeKey:
merge:@primitive selectorDictionary>>merge:
includes:@primitive selectorDictionary>>includes: (value membership)
do:@primitive selectorCollection>>do: (iterates values)
collect:pure BTMaps block over values, returning a new Dictionary
doWithKey:@primitive selectorDictionary>>keysAndValuesDo:
keysAndValuesDo:pure BT (delegates to doWithKey:)Dictionary>>keysAndValuesDo:
printString@primitive selectorDictionary>>printString

Set (stdlib/src/Set.bt — BT-73)

Class: Set(E) — superclass: Collection@sealed Helper module: beamtalk_set.erl (ordsets operations + tagged map wrapping) — corrected in this pass (BT-2976); previously misspelled beamtalk_set_ops.erl, which does not exist. Representation: Tagged map #{'$beamtalk_class' => 'Set', elements => [sorted_list]} Methods: 17/17 implemented (100%) Correction (BT-2976): describe no longer exists on Set. new (no-arg) is inherited unchanged from Value, not redefined in Set.bt, so it is not counted here; class new:/class withAll: are Set's own list-based constructors, and stream and asSet (identity override) were undocumented.

SelectorMechanismStatusNotesPharo Equivalent
class withAll:@primitive selectorCreate from a list, deduplicatingSet>>withAll:
class new:pure BTConvenience alias for withAll:Set>>new:
size@primitive selectorlength(Elements)Set>>size
isEmpty@primitive selectorElements == []Set>>isEmpty
includes:@primitive selectorordsets:is_elementSet>>includes:
add:@primitive selectorordsets:add_elementSet>>add:
remove:@primitive selectorordsets:del_elementSet>>remove:
union:@primitive selectorordsets:unionSet>>union:
intersection:@primitive selectorordsets:intersectionSet>>intersection:
difference:@primitive selectorordsets:subtractSet>>difference:
isSubsetOf:@primitive selectorordsets:is_subsetSet>>isSubsetOf:
asList@primitive selectorReturns sorted elementsSet>>asArray
asSetpure BTIdentity override of Collection>>asSetN/A
fromList:@primitive selectorordsets:from_listSet>>addAll:
do:@primitive selectorIterate elementsSet>>do:
printString@primitive selectorbeamtalk_primitive:print_string/1Set>>printString (BT-477)
stream@primitive selectorLazy Stream over set elementsN/A

Tuple (stdlib/src/Tuple.bt)

Class: Tuple — superclass: Collection@sealed typed Methods: 13/13 implemented (100%) Note: BEAM-specific, wraps Erlang result tuples {ok, Value} / {error, Reason}. Correction (BT-2976): class withAll:/class new:, do:, and atRandom were undocumented.

SelectorMechanismStatusNotes
class withAll:@primitive selectorCreate a Tuple from a list of elements
class new:pure BTConvenience alias for withAll:
size@primitive selectortuple_size
at:@primitive selector1-based index via element
isOk@primitive selector{ok, _} pattern match
isError@primitive selector{error, _} pattern match
unwrappure BTExtract value or raise
unwrapOr:pure BTExtract or return default
unwrapOrElse:pure BTExtract or evaluate block
asString@primitive selectorString representation
printStringpure BTHuman-readable representation
do:@primitive selectorIterate over each element
atRandom@primitive selectorReturn a random element

Symbol (stdlib/src/Symbol.bt)

Class: Symbol — superclass: Object@sealed Methods: 8/8 implemented (100%) Correction (BT-2976): describe no longer exists on Symbol; =/= and displayString were undocumented.

SelectorMechanismStatusPharo Equivalent
asString@primitive selectorSymbol>>asString
asAtom@primitive selectorN/A (BEAM-specific)
printString@primitive selectorSymbol>>printString
=:=@primitive selectorSymbol>>=
=/=@primitive selectorSymbol>>~=
/=@primitive selectorSymbol>>~=
displayStringpure BTUser-facing string without the # prefix
hash@primitive selectorSymbol>>hash

Exception (stdlib/src/Exception.bt)

Class: Exception — superclass: Object Methods: 11/11 implemented (100%) Correction (BT-2976): describe no longer exists on Exception; class signal/class signal: and stackTrace were undocumented.

SelectorMechanismStatusPharo Equivalent
class signal:@primitive selectorException class>>signal:
class signal@primitive selectorException class>>signal
message@primitive selectorException>>messageText
hint@primitive selectorN/A
kind@primitive selectorN/A
selector@primitive selectorN/A
errorClass@primitive selectorN/A
printString@primitive selectorException>>printString
stackTrace@primitive selectorReturns List(StackFrame)
signal@primitive selectorException>>signal
signal:@primitive selectorException>>signal:

Error (stdlib/src/Error.bt)

Class: Error — superclass: Exception Methods: 0 — empty subclass, inherits Exception's protocol entirely Correction (BT-2976): describe no longer exists — Error.bt currently declares no methods of its own (previously documented as describe, 1/1). Same for InstantiationError, RuntimeError, and TypeError below — all are now empty Error subclasses that exist purely to be caught by class via on:do:.

TranscriptStream (stdlib/src/TranscriptStream.bt)

Class: TranscriptStream — superclass: Actor (native: beamtalk_transcript_stream) Methods: 9/9 implemented (100%) Correction (BT-2976): class current/class current:/class resetCurrent (singleton accessors) were undocumented.

SelectorMechanismStatusPharo Equivalent
class currentpure BTN/A
class current:pure BTN/A
class resetCurrentpure BTN/A
show:native delegateTranscript>>show: — accepts Printable
crnative delegateTranscript>>cr
subscribenative delegateN/A
unsubscribenative delegateN/A
recentnative delegateN/A
clearnative delegateN/A

CompiledMethod (stdlib/src/CompiledMethod.bt)

Class: CompiledMethod — superclass: Object Methods: 6/6 implemented (100%) Correction (BT-2976): doc (method documentation string) was undocumented.

SelectorMechanismStatusPharo Equivalent
selector@primitive selectorCompiledMethod>>selector
source@primitive selectorCompiledMethod>>sourceCode
doc@primitive selectorCompiledMethod>>comment
argumentCount@primitive selectorCompiledMethod>>numArgs
printString@primitive selectorCompiledMethod>>printString
asString@primitive selectorCompiledMethod>>asString

Character (stdlib/src/Character.bt)

Class: Character — superclass: Integer@sealed Methods: 19/19 implemented (100%) Correction (BT-2976): describe no longer exists on Character; class value: (construct from code point) was already documented but is now the only class-side method.

SelectorMechanismStatusNotes
class value:@primitive selectorConstruct from code point
=:=@primitive selectorCharacter equality
=/=@primitive selectorCharacter strict inequality
/=@primitive selectorCharacter not-equal
<@primitive selectorOrdering
>@primitive selectorOrdering
<=@primitive selectorOrdering
>=@primitive selectorOrdering
asInteger@primitive selectorUnicode code point
asString@primitive selectorSingle-character string
printString@primitive selectorDisplay representation
hash@primitive selectorHash value
isLetter@primitive selectorUnicode letter check
isDigit@primitive selectorUnicode digit check
isUppercase@primitive selectorCase check
isLowercase@primitive selectorCase check
isWhitespace@primitive selectorWhitespace check
uppercase@primitive selectorCase conversion
lowercase@primitive selectorCase conversion

Boolean (stdlib/src/Boolean.bt)

Class: Boolean — superclass: Valueabstract sealed Methods: 8/8 implemented (100%) Correction (BT-2976): Boolean now also declares ifTrue:ifFalse:, ifTrue:, ifFalse:, and not as abstract protocol (self subclassResponsibility, BT-2834/BT-2886) — True/False still provide the concrete overrides (see their table above).

SelectorMechanismStatusNotes
ifTrue:ifFalse:pure BT (abstract)self subclassResponsibility
ifTrue:pure BT (abstract)self subclassResponsibility
ifFalse:pure BT (abstract)self subclassResponsibility
notpure BT (abstract)self subclassResponsibility
isBooleanpure BTType check
and:pure BTLogical AND (lazy)
or:pure BTLogical OR (lazy)
xor:pure BTLogical XOR

TestCase (stdlib/src/TestCase.bt)

Class: TestCase — superclass: Value Methods: 17/17 implemented (100%) Correction (BT-2976): suite-level fixtures (setUpOnce/tearDownOnce/suiteFixture), skip/skip:, assertOk:, assertError:equals:, and the class-side test runner (class runAll/class run:/class serial) were undocumented.

SelectorMechanismStatusNotes
class runAllpure BTRun all test methods in this class
class run:pure BTRun the named test method
class serialpure BTWhether this test class must run serially
setUppure BTOverride for test setup
tearDownpure BTOverride for test cleanup
setUpOncepure BTSuite-level fixture, run once before all tests
tearDownOncepure BTSuite-level cleanup, run once after all tests
suiteFixturepure BTAccess the fixture set by setUpOnce
assert:pure BTAssert truthy
deny:pure BTAssert falsy
assert:equals:pure BTAssert equality
should:raise:pure BTAssert exception
fail:pure BTFail with message
skip:pure BTSkip the current test with a reason
skippure BTSkip the current test with no reason
assertOk:pure BTAssert result is a successful Result, return its value
assertError:equals:pure BTAssert result is an error Result matching expected

InstantiationError (stdlib/src/InstantiationError.bt)

Class: InstantiationError — superclass: Error Methods: 0 — empty subclass, inherits Error/Exception's protocol entirely Correction (BT-2976): describe no longer exists (previously documented as 1/1).

RuntimeError (stdlib/src/RuntimeError.bt)

Class: RuntimeError — superclass: Error Methods: 0 — empty subclass, inherits Error/Exception's protocol entirely Correction (BT-2976): describe no longer exists (previously documented as 1/1).

TypeError (stdlib/src/TypeError.bt)

Class: TypeError — superclass: Error Methods: 0 — empty subclass, inherits Error/Exception's protocol entirely Correction (BT-2976): describe no longer exists (previously documented as 1/1).


Protocols

Printable (stdlib/src/Printable.bt)

Protocol: Printable — structural protocol (ADR 0068, BT-1766) Required methods: 2

SelectorReturn TypeNotes
asStringStringHuman-readable string representation
printStringStringDeveloper-oriented representation (debugging, REPL)

Conformance: Automatic — any class implementing both asString and printString conforms. Most stdlib classes conform because Object provides a default printString and subclasses typically override asString.

Usage: TranscriptStream >> show: accepts Printable, so conforming objects can be displayed directly without manual asString calls.

JsonRepresentable (stdlib/src/JsonRepresentable.bt)

Protocol: JsonRepresentable — structural protocol (ADR 0068, BT-2818) Required methods: 1

SelectorReturn TypeNotes
asJsonObjectReturns a natively JSON-representable value (typically a Dictionary with wire-format keys)

Conformance: Automatic — any class implementing asJson conforms.

Usage: Json generate: and Json prettyPrint: (see Json) dispatch to asJson for any value that is not one of the natively JSON-representable types (Dictionary, List, String, Integer, Float, Boolean, nil). The returned value is converted recursively, so it may itself contain further JsonRepresentable objects.


Additional Stdlib Classes

The following stdlib .bt classes exist but have not yet received a full method-level audit; that audit is tracked as future work (see Methodology above).

ClassSuperclassFileNotes
ActorSpawnedAnnouncementActorSpawned.btSystem event: actor started (ADR 0093)
ActorStoppedAnnouncementActorStopped.btSystem event: actor terminated (ADR 0093)
AnnouncementValueAnnouncement.btBase event type for the typed Observer substrate (ADR 0093)
AnnouncementNavigationObjectAnnouncementNavigation.btLive subscription-graph introspection queries (ADR 0093 §7)
AnnouncerObjectAnnouncer.btTyped pub/sub dispatcher handle (ADR 0093)
ArrayCollectionArray.btFixed-size O(1) indexed collection (Erlang tuple-backed)
AtomicCounterObjectAtomicCounter.btLock-free counter via atomics
BEAMErrorErrorBEAMError.btWraps raw BEAM exceptions
BagCollectionBag.btMultiset / counted collection
BehaviourObjectBehaviour.btMetaclass introspection
BindingChangedAnnouncementBindingChanged.btSystem event: workspace binding changed (ADR 0093)
BindingsViewObjectBindingsView.btLive Dictionary-protocol view over session/workspace bindings (ADR 0081)
ChangeEntryValueChangeEntry.btOne recorded in-memory method mutation (ADR 0082 Phase 1)
ChangeLogValueChangeLog.btNavigable view of pending workspace changes (ADR 0082 Phase 1)
ClassBehaviourClass.btClass mirror
ClassBuilderObjectClassBuilder.btDynamic class creation
ClassLoadedAnnouncementClassLoaded.btSystem event: class loaded/redefined (ADR 0093)
ClassRemovedAnnouncementClassRemoved.btSystem event: class removed (ADR 0093)
ConsoleObjectConsole.btThis process's stdin/stdout/stderr (ADR 0099 §1)
DateTimeValueDateTime.btDate/time value type
DigestObjectDigest.btCryptographic hash functions and HMAC (crypto:hash/2, crypto:mac/4)
DurationValueDuration.btSpan of time stored as total milliseconds; accepted by timeout-taking APIs
DynamicSupervisorObjectDynamicSupervisor.btOTP DynamicSupervisor wrapper
ErlangObjectErlang.btDirect Erlang module access
ErlangModuleObjectErlangModule.btErlang module wrapper
EtsObjectEts.btShared in-memory table wrapper (OTP ets)
ExitErrorErrorExitError.btProcess exit wrapper
FileHandleObjectFileHandle.btFile I/O handle
FlushCompletedAnnouncementFlushCompleted.btSystem event: Workspace flush finished (ADR 0093)
InspectorObjectInspector.btLive, immutable cursor for navigating into a single object (ADR 0095)
InspectorFieldValueInspectorField.btImmutable record for one drillable inspected field (ADR 0095 §2)
IntervalCollectionInterval.btArithmetic sequence (1 to: 10)
JsonObjectJson.btJSON parse/stringify
LoggerObjectLogger.btOTP logger wrapper
MetaclassBehaviourMetaclass.btMetaclass mirror
OSObjectOS.btOS-level operations
ObjectStateChangedAnnouncementObjectStateChanged.btSystem event: watched actor commits a state write (ADR 0095 §5)
PackageObjectPackage.btPackage management
ParallelObjectParallel.btBlock-based fan-out/join combinators (all:, all:timeout:, any:) — spawns one linked+monitored process per block, blocks the caller, returns plain Result values; no awaitable future/promise ever escapes into user code (BT-2974, ADR 0104)
PidObjectPid.btBEAM process identifier
PortObjectPort.btBEAM port wrapper
ProcessNavigationValueProcessNavigation.btLive supervision-tree introspection queries (ADR 0092)
ProgramObjectProgram.btThe running program/invocation (ADR 0099 §2)
ProtocolObjectProtocol.btProtocol mirror
QueueCollectionQueue.btFIFO queue
RandomObjectRandom.btRandom number generation
ReactiveSubprocessActorReactiveSubprocess.btStreaming subprocess
ReferenceObjectReference.btBEAM reference wrapper
RegexValueRegex.btRegular expressions
ResultValueResult.btOk/Error result type
RetryPolicyValueRetryPolicy.btConfigurable exponential backoff and retry execution (BT-2973)
ServerActorServer.btOTP Server base class
SessionObjectSession.btFirst-class handle to a REPL session (ADR 0081)
StackFrameObjectStackFrame.btStack trace inspection
StreamObjectStream.btLazy sequences
SubprocessActorSubprocess.btOS subprocess management
SubscriptionObjectSubscription.btUnsubscribe token returned by when:do: et al (ADR 0093)
SubscriptionNodeValueSubscriptionNode.btImmutable snapshot record for one live subscription (ADR 0093 §7)
SupervisionChildAddedAnnouncementSupervisionChildAdded.btSystem event: supervisor started a child (ADR 0093)
SupervisionChildCrashedAnnouncementSupervisionChildCrashed.btSystem event: supervised child failed to start or crashed (ADR 0093)
SupervisionNodeValueSupervisionNode.btImmutable snapshot record for one process in the live supervision tree (ADR 0092)
SupervisionSpecValueSupervisionSpec.btSupervisor child specs
SupervisionTreeValueSupervisionTree.btNavigable snapshot of the live supervision tree (ADR 0092)
SupervisorObjectSupervisor.btOTP Supervisor wrapper
SystemObjectSystem.btSystem info and control
SystemAnnouncerAnnouncerSystemAnnouncer.btSingleton system event bus (ADR 0093 Layer 2)
SystemNavigationObjectSystemNavigation.btClass-registry navigation queries ("who implements X")
TestResultValueTestResult.btBUnit test result
TestRunnerObjectTestRunner.btBUnit test runner
ThrowErrorErrorThrowError.btNon-local return error
TimeObjectTime.btTime operations
TimeoutProxyObjectTimeoutProxy.btTimeout wrapper
TimerObjectTimer.btTimer operations
TracingObjectTracing.btActor observability
UuidValueUuid.btRFC 9562 UUIDs (v4 random, v7 time-ordered)
WorkspaceInterfaceActorWorkspaceInterface.btWorkspace management

Pharo Comparison: Notable Gaps

Tracked in existing issues:

  • BT-44: Missing collection methods (sort, detect:, take:, flatMap:, etc.)
  • BT-331: Compilable stdlib collection classes (Dictionary ✅, List ✅, Set ✅)
  • BT-408: E2E test coverage for untested stdlib methods

Methods that Pharo users would expect but Beamtalk does not define or implement:

ProtoObject

Pharo MethodBeamtalk StatusPriority
~~ (not identical)❌ Not definedLow

Object

Pharo MethodBeamtalk StatusPriority
copy❌ Not defined (except UndefinedObject)Medium
deepCopy❌ Not defined (except UndefinedObject)Low
halt❌ Not definedLow
assert:❌ Not definedMedium
deny:❌ Not definedLow

Integer

Pharo MethodBeamtalk EquivalentPriority
isPrime❌ Not definedLow

Float

Pharo MethodBeamtalk EquivalentPriority
** (exponentiation)❌ Not defined (Integer has it)Medium

String

Pharo MethodBeamtalk EquivalentPriority
copyFrom:to:❌ Not defined (use take:/drop: combination)Low
asSymbol❌ Not definedLow
match:❌ Not definedLow

List / Collection

Pharo MethodBeamtalk EquivalentPriority
remove:❌ Not defined on List/Collection (only Set>>remove:)Medium
asSetCollection>>asSet (BT-2976: previously required the (Set new) fromList: aList workaround; now a direct method)Low
asDictionary❌ Not definedLow
with:collect:❌ Not definedLow
at:put:❌ Not defined (lists are immutable linked lists)Low

Block

Pharo MethodBeamtalk EquivalentPriority
cull:❌ Not definedLow
newProcess / fork❌ Not defined (use Actor >> spawn)Low

Missing .bt Files

All stdlib classes now have corresponding stdlib/src/*.bt definitions. Collection is now defined in stdlib/src/Collection.bt as an abstract typed subclass of Value.


Test Coverage Gaps

Test coverage is now spread across both stdlib/bootstrap-test/ (224 assertions) and tests/repl-protocol/cases/ (1883 assertions) — a large swing from the previous audit's 1046/213 split. These counts are a snapshot for this audit date, not a trend line: assertions move between suites over time as tests are added, migrated, or consolidated, so don't read the swing itself as a coverage regression or expansion. Many previously untested methods now have stdlib test coverage. The following gaps remain for methods with no coverage in either test suite (per-method status below has not been re-verified against the current counts and may itself be stale — see BT-408):

Correction (BT-2976): the describe selector referenced throughout this section no longer exists on any of these classes (see the per-class tables above) — those entries are removed below rather than left as permanently-untested phantoms. There is no Association class in this repo (never was in stdlib/src/); the row previously here has been removed.

High Priority (Core functionality untested)

ClassUntested Methods
Integer**, min:, max:, timesRepeat:, to:do:, to:by:do:
Float/=, <=, >=, printString
String,, lines, asAtom, printString
Listdetect:ifNone:, printString
Blockrepeat

Medium Priority

ClassUntested Methods
Objectinspect
ActorspawnWith:
UndefinedObjectifNotNil:, ifNil:ifNotNil:, ifNotNil:ifNil:, copy, deepCopy, shallowCopy, printString
True/FalseisTrue, isFalse, printString
Exceptionsignal, signal:
TranscriptStreamsubscribe, unsubscribe, recent, clear
BeamtalkInterfaceglobals

Testing Methodology

For each method, testing was performed in this priority order:

  1. Stdlib tests (stdlib/bootstrap-test/*.btscript) — compiled expression tests (ADR 0014)
  2. E2E test files (tests/repl-protocol/cases/*.btscript) — REPL integration tests
  3. Compiler intrinsics (crates/beamtalk-core/src/codegen/core_erlang/intrinsics.rs) — verified codegen handler exists
  4. Primitive bindings (crates/beamtalk-core/src/codegen/core_erlang/primitive_bindings.rs, primitive_implementations.rs) — verified selector-based dispatch codegen
  5. Runtime dispatch (runtime/apps/beamtalk_runtime/src/beamtalk_*.erl) — verified dispatch clause handles the selector
  6. Pure Beamtalk (stdlib/src/*.bt) — verified method body compiles (not just a comment)

A method is marked ✅ if at least one implementation path exists (intrinsic, runtime dispatch, or compiled Beamtalk). A method is marked 🧪 if a stdlib or E2E test file exercises it with a // => assertion.