Skip to content
Opensource internals
  • Posts

Posts

All posts published on this site.

Everything published here, newest first.

How Go's Race Detector Works: Shadow Memory and Vector Clocks

Oct 21, 2026 19 min read Jay Hubbert

The Go race detector is LLVM’s ThreadSanitizer shipped as a prebuilt blob: the compiler inserts read and write hooks, the runtime maps shadow memory for the heap and globals, and …

GoInternalsRace detectorConcurrencyThreadsanitizer

Read more →

How Go's reflect Package Reads Types: The rtype and the Method Table

Oct 21, 2026 13 min read Jay Hubbert

reflect reads the runtime’s own abi.Type descriptors; a reflect.Value is a (typ, ptr, flag) triple whose flag word encodes kind, indirection, addressability and read-only state in …

GoInternalsReflectionRuntimePerformance

Read more →

How Go's select Picks a Random Ready Case (and Why the Order Is Random)

Oct 21, 2026 18 min read Jay Hubbert

Go’s select randomises the order it polls cases in, takes the first ready one, and only then falls back to parking on every channel at once.

GoInternalsConcurrencySelect

Read more →

How Go's Unicode Tables Are Generated and Why the Runtime Doesn't Use Them

Oct 21, 2026 25 min read Jay Hubbert

Go’s Unicode tables are generated range tables with stride compression, a 256-entry Latin-1 byte table for the fast path, and an accept-ranges decoder for UTF-8; the runtime …

GoInternalsUnicodeUtf 8Stdlib

Read more →

range over func: The Compiler Turns a Loop Into a Coroutine

Oct 21, 2026 20 min read Jay Hubbert

The compiler rewrites a range-over-func loop into a yield callback, tracks iterator misbehaviour with a state machine, and hands coroutine switching to iter.Pull.

GoInternalsIteratorsCompilerRuntime

Read more →

← Newer Page 32 of 82 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·