B1.4 · dive — the translation table
Both dialects, one convention.
The series speaks ECS and BCS deliberately, with the translation table as the Rosetta line: six terms, each mapped so an entity-systems veteran reads Part II without a glossary. The litmus question names the migration moment; hybrids stay legitimate strictly behind the boundary.
Source: content/bcs1.4.md · Who, When, How, Decisions. The table is the convention of record.
The table
content/bcs1.4.md · Who| ECS term | BCS translation |
|---|---|
| entity | an identity |
| component | a property in some system’s table |
| system | a system — now with a hard boundary |
| world | the supervision tree plus the bus |
| archetype | data composition — Part II, Chapter 2.4’s subject |
| query across components | a message join by identity |
In the trading vocabulary: the order is an ORD identity; its fills, its
risk checks, and its book position are properties in three systems; the matching sweep is a system
consuming messages about ORD names — and every one of those names is valid in the save
file, on the socket, and in the store, because those are no longer different places to be valid.
The litmus, exercised
content/bcs1.4.md · WhenKeep classic ECS where it is the right tool: one process, a frame loop, identities that may die with the run. The litmus is a single question: must this id outlive the process? The first yes — the first save, the first socket, the first row — is the migration moment, and it arrives on day one for anything trading-shaped.
The migration, in code
content/bcs1.4.md · How · DecisionsElixir. The world is a supervision tree and the component array is the substrate’s private ETS table, keyed by the name itself — at which point the allocator’s whole apparatus disappears. There is no slot to allocate, no free list, no generation to bump: minting is allocation, and reuse is impossible by law rather than improbable by pattern.
# handle era: {index, generation} into a system-private array, valid this run
# name era: the key is the identity; reuse cannot be expressed
:ok = PropertyStore.put(:positions, EchoData.Snowflake.next_branded("PRT"), position)
Go. Weissflog’s shape survives nearly verbatim — system-private storage, a sole owner, only identities crossing — with two edits from Chapter 1.1: the channel edge replaces the function boundary as the place the gate lives, and the branded string replaces the index-generation pair. Iteration keeps its locality through the owner’s sorted key slice; the cross-component query becomes a message join by identity, and the cost is stated with its mitigation: names that must be read together can be co-placed by the same hash32 both runtimes share, and asks batch.
// handle: uint32(idx) | gen<<20 -> valid in this process, this run
// name: brandedid.MustEncode("ORD", snow) -> valid everywhere, indefinitely
The decisions carried from the chapter: generation counters are rejected by subsumption — detection of reuse is replaced by prevention of reuse, and a probabilistic guard for an impossible event is deleted weight. The index never rides in the name — placement is hash32’s job, derived on demand. Internal handles are permitted strictly behind the boundary — clause one makes a system’s private indexing nobody’s business; the law forbids handles crossing, not handles existing. And the ECS vocabulary is adopted with translation, so the series speaks both dialects deliberately.
References
sources · relatedSources
- West — Evolve Your Hierarchythe vocabulary the table translates, at its source
- Weissflog — Handles are the better pointersthe shape the Go migration keeps nearly verbatim
- The Go Project — Share Memory By Communicatingthe channel edge where the gate lives
- Wikipedia — Entity component systemthe pattern as doctrine; archetype and query in the wild
Related
- B1.4 — From ECS to BCSthe module hub; the arc in context
- B1 — Ideas Behindthe chapter landing; the Part I arc
- BCS — the course homethe law, the id anatomy, the chapter map
- EchoMQ — the coursethe bus the world becomes, taught in depth
- Functional Programming in Elixirthe umbrella where echo_data lives