# Cognate Press > The imprint behind seven independent technical publications — one language each, one specialist each, each writing from production experience on its own domain. - The imprint hosts nothing and aggregates nothing: every title is its own site, its own repository and its own deployment. - One byline per publication, and that byline works in the language it writes about. - Every performance claim carries the version, the machine, the command and the output that produced it. - Home: https://cognate.press/ ## Publications - [ElephantPHP](https://elephantphp.com/) — PHP — Alden Pike — since 2026-07-02 — PHP internals, performance, architecture and production behavior — measurements over assumptions, trade-offs over rules. - [JS Ledger](https://jsledger.com/) — JavaScript — Jonah Vail — since 2026-07-09 — JavaScript, TypeScript, and the runtimes, frameworks and tooling behind modern web applications. - [JVM Scope](https://jvmscope.com/) — Java — Marcus Venn — since 2026-07-14 — Java, runtimes, frameworks, and the systems beneath them: the JVM and its ecosystem, read closely. - [PyDepth](https://pydepth.com/) — Python — Elliot Sayer — since 2026-07-14 — Python, its runtimes, frameworks, and the systems beneath them — read from source, measured, not assumed. - [CSharpMind](https://csharpmind.com/) — C# — Callum Reeve — since 2026-08-16 — C#, .NET, and the runtime beneath them: the CLR, the JIT, the garbage collector and the frameworks built on top. - [SQLPress](https://sqlpress.com/) — SQL — Elias Rowe — since 2026-08-23 — Databases, queries and the people who run them: PostgreSQL, MySQL, SQL Server, Oracle and data engineering. - [Gopheria](https://gopheria.com/) — Go — Nolan Keir — since 2026-08-25 — Go, beneath the surface — the runtime, concurrency, performance, and the trade-offs behind clean abstractions. ## Issues ### ElephantPHP - [Appending to a string is free until someone else holds it](https://elephantphp.com/blog/strings-in-php-interned-copies-and-concatenation/) — 2026-10-11 - [A property hook emits the same opcode as a plain property](https://elephantphp.com/blog/property-hooks-and-what-the-compiler-emits/) — 2026-10-04 - [A declared property is cheaper than an array key](https://elephantphp.com/blog/objects-are-cheaper-than-arrays/) — 2026-09-27 - [Two hundred thousand objects, and the collector never ran](https://elephantphp.com/blog/the-gc-only-collects-cycles/) — 2026-09-20 - [Three numbers for one process, and memory_limit reads the middle one](https://elephantphp.com/blog/where-php-memory-actually-goes/) — 2026-09-13 - [A by-reference foreach leaves a reference in every element](https://elephantphp.com/blog/copy-on-write-and-the-cost-of-passing-arrays/) — 2026-09-06 - [What a PHP variable actually is](https://elephantphp.com/blog/what-a-php-variable-actually-is/) — 2026-08-30 - [PHP-FPM process management in production](https://elephantphp.com/blog/php-fpm-process-management-in-production/) — 2026-08-20 - [What compiled DI containers actually buy you](https://elephantphp.com/blog/what-compiled-di-containers-actually-buy-you/) — 2026-08-13 - [PHP arrays are not arrays](https://elephantphp.com/blog/php-arrays-are-not-arrays/) — 2026-08-06 - [OPcache, the JIT, and where time actually goes](https://elephantphp.com/blog/opcache-jit-and-where-time-actually-goes/) — 2026-07-30 - [Benchmarking PHP without lying to yourself](https://elephantphp.com/blog/benchmarking-php-without-lying-to-yourself/) — 2026-07-16 - [What happens when PHP runs your code](https://elephantphp.com/blog/what-happens-when-php-runs-your-code/) — 2026-07-02 ### JS Ledger - [require(esm) Killed the Second Build, Not the Second Copy](https://jsledger.com/blog/require-esm-is-stable/) — 2026-10-11 - [Your Reactive Graph Computed 4,11. That State Never Existed.](https://jsledger.com/blog/why-signals-push-a-marker-and-pull-a-value/) — 2026-10-04 - [Your Conditional Type Answered Twice. Both Answers Are Right.](https://jsledger.com/blog/conditional-types-distribute/) — 2026-09-27 - [Vite 8 Ships One Bundler, Not One Pipeline](https://jsledger.com/blog/vite-8-replaced-two-bundlers-with-one/) — 2026-09-20 - [Object Shapes Are a Tree, and the Tree Is Shared](https://jsledger.com/blog/object-shapes-are-a-tree/) — 2026-09-13 - [What await Compiles To, and What It Costs](https://jsledger.com/blog/what-await-compiles-to/) — 2026-09-06 - [The Provenance Was Valid. The Commit Was Not.](https://jsledger.com/blog/provenance-proves-the-build-not-the-intent/) — 2026-08-30 - [Reading a Lockfile: Supply Chain in Practice](https://jsledger.com/blog/reading-a-lockfile/) — 2026-08-26 - [Type-Level Narrowing: How TypeScript Decides What You Meant](https://jsledger.com/blog/type-level-narrowing-in-typescript/) — 2026-08-19 - [The Event Loop You Think You Know](https://jsledger.com/blog/the-event-loop-you-think-you-know/) — 2026-08-12 - [What Actually Happens When Vite Serves a Module](https://jsledger.com/blog/what-happens-when-vite-serves-a-module/) — 2026-08-04 - [Signals Are Not Magic: The Dependency Graph Underneath](https://jsledger.com/blog/signals-are-not-magic/) — 2026-07-22 - [How V8 Decides to Optimize Your Function](https://jsledger.com/blog/how-v8-decides-to-optimize-your-function/) — 2026-07-09 ### JVM Scope - [Reading a GC Log Line by Line](https://jvmscope.com/blog/reading-a-gc-log-line-by-line/) — 2026-10-11 - [Streams Versus Loops: What the JIT Sees](https://jvmscope.com/blog/streams-versus-loops-what-the-jit-sees/) — 2026-10-04 - [The Cost of Optional](https://jvmscope.com/blog/the-cost-of-optional/) — 2026-09-27 - [JFR: The Events You Actually Need](https://jvmscope.com/blog/jfr-the-events-you-actually-need/) — 2026-09-13 - [What a Safepoint Actually Stops](https://jvmscope.com/blog/what-a-safepoint-actually-stops/) — 2026-09-06 - [How the JVM Finds and Loads a Class](https://jvmscope.com/blog/how-the-jvm-finds-and-loads-a-class/) — 2026-08-30 - [Where Spring Boot Startup Time Goes](https://jvmscope.com/blog/where-spring-boot-startup-time-goes/) — 2026-08-26 - [Reading a Thread Dump Without Guessing](https://jvmscope.com/blog/reading-a-thread-dump-without-guessing/) — 2026-08-19 - [G1 versus ZGC: What the Pause Numbers Hide](https://jvmscope.com/blog/g1-versus-zgc-what-pause-numbers-hide/) — 2026-08-11 - [Escape Analysis and the Allocation That Never Happened](https://jvmscope.com/blog/escape-analysis-and-the-allocation-that-never-happened/) — 2026-08-04 - [Virtual Threads and the Pinning Problem](https://jvmscope.com/blog/virtual-threads-and-the-pinning-problem/) — 2026-07-23 - [What the JIT Actually Does to Your Hot Loop](https://jvmscope.com/blog/what-the-jit-does-to-your-hot-loop/) — 2026-07-14 ### PyDepth - [UTF-8 by Default Fixes a Silent Bug and Adds a Loud One](https://pydepth.com/blog/utf8-by-default/) — 2026-10-11 - [Swapping Two Imports Moved 5.5 ms to a Different Module](https://pydepth.com/blog/import-time-is-not-import-cost/) — 2026-09-27 - [lazy import Moved 26.8 ms and Removed None of It](https://pydepth.com/blog/what-lazy-import-defers/) — 2026-09-20 - [A NamedTuple Read Cost 0.81x a Plain One, Then 1.9x](https://pydepth.com/blog/the-cost-of-a-field/) — 2026-09-13 - [getsizeof Reports 296 Bytes, Then 96, for the Same Class](https://pydepth.com/blog/what-getsizeof-does-not-count/) — 2026-09-06 - [Slots Did Not Get Slower, One Build Did](https://pydepth.com/blog/slots-did-not-get-slower/) — 2026-08-30 - [Type Hints at Run Time](https://pydepth.com/blog/type-hints-at-runtime/) — 2026-08-25 - [Where Your Django Request Time Actually Goes](https://pydepth.com/blog/where-django-request-time-goes/) — 2026-08-19 - [The Real Cost of an async Call](https://pydepth.com/blog/the-real-cost-of-an-async-call/) — 2026-08-12 - [The GIL Is Not a Lock on Your CPU](https://pydepth.com/blog/the-gil-is-not-a-lock-on-your-cpu/) — 2026-08-04 - [What import Actually Does](https://pydepth.com/blog/what-import-actually-does/) — 2026-07-23 - [The Shape of a Python Object](https://pydepth.com/blog/the-shape-of-a-python-object/) — 2026-07-14 ### CSharpMind - [clrstack Shows the Waiter and syncblk Names the Lock Holder](https://csharpmind.com/blog/what-a-managed-thread-dump-actually-contains/) — 2026-10-11 - [A Container Given 1.2 CPUs Tells the Runtime It Has 2](https://csharpmind.com/blog/how-many-cpus-a-container-tells-the-runtime-it-has/) — 2026-10-04 - [The Box You Pay For Is the One That Escapes](https://csharpmind.com/blog/the-box-you-pay-for-when-a-struct-meets-an-interface/) — 2026-09-27 - [The Middleware That Looked Expensive Was Not the One Spending the Bytes](https://csharpmind.com/blog/the-middleware-pipeline-measured-one-component-at-a-time/) — 2026-09-20 - [dotnet-counters Shows the Queue's Delta, Not Its Depth](https://csharpmind.com/blog/dotnet-counters-shows-the-queues-delta-not-its-depth/) — 2026-09-13 - [Server GC, Workstation GC, and the Numbers Between Them](https://csharpmind.com/blog/server-gc-workstation-gc-and-the-numbers-between-them/) — 2026-08-30 - [Where Thread Pool Starvation Actually Comes From](https://csharpmind.com/blog/where-thread-pool-starvation-actually-comes-from/) — 2026-08-23 - [The State Machine Your async Method Compiles Into](https://csharpmind.com/blog/the-state-machine-your-async-method-compiles-into/) — 2026-08-16 ### SQLPress - [Document or Relational: Read-Time or Write-Time Cost](https://sqlpress.com/blog/access-pattern-first-modeling/) — 2026-10-11 - [Connection Pool Sizing: Why More Connections Make It Slower](https://sqlpress.com/blog/connection-pool-sizing/) — 2026-10-04 - [Composite Indexes: One Ordering, Not Three](https://sqlpress.com/blog/composite-index-column-order/) — 2026-09-27 - [Why the Primary Key Is in Every Secondary Index](https://sqlpress.com/blog/innodb-clustered-index/) — 2026-09-20 - [Transaction Pooling Breaks Only Under Load](https://sqlpress.com/blog/pgbouncer-pooling-modes/) — 2026-09-13 - [EXPLAIN, ANALYZE, BUFFERS: Three Different Questions](https://sqlpress.com/blog/explain-analyze-buffers/) — 2026-09-06 - [N+1 Queries: What the ORM Is Actually Doing](https://sqlpress.com/blog/n-plus-one-queries/) — 2026-08-30 - [Why an Index Is Not Used: the Estimate, Not the Index](https://sqlpress.com/blog/index-not-used-estimate-not-index/) — 2026-08-23 ### Gopheria - [Green Tea cut my GC time 63%, and raised it 39%](https://gopheria.com/blog/green-tea-changed-your-gc-profile/) — 2026-10-11 - [The GOGC I set next to GOMEMLIMIT never fired](https://gopheria.com/blog/gogc-and-gomemlimit-are-different-knobs/) — 2026-10-04 - [A 404 from net/http costs 62 allocations](https://gopheria.com/blog/http-router-dispatch-cost/) — 2026-09-27 - [The mutex was 68 times faster, until I added work](https://gopheria.com/blog/mutex-versus-channel-at-contention/) — 2026-09-20 - [A 1 MiB goroutine stack costs 136µs and reports 144 B/op](https://gopheria.com/blog/goroutine-stacks-grow-by-copying/) — 2026-09-13 - [benchstat reported p=0.000 between a function and itself](https://gopheria.com/blog/benchstat-or-it-didnt-happen/) — 2026-09-06 - [GOMAXPROCS is not your thread count](https://gopheria.com/blog/gomaxprocs-is-not-thread-count/) — 2026-08-30 - [sync.Pool survives one GC, not two](https://gopheria.com/blog/sync-pool-under-gc-pressure/) — 2026-08-27 - [Escape analysis is not a rule of thumb](https://gopheria.com/blog/escape-analysis-is-not-a-rule-of-thumb/) — 2026-08-26 - [What the Go scheduler does when your goroutine blocks](https://gopheria.com/blog/go-scheduler-blocking-goroutine/) — 2026-08-25 ## Authors - [Alden Pike](https://cognate.press/authors/alden-pike/) — writes ElephantPHP (PHP) — Writes about what happens beneath frameworks and abstractions, from language internals to production behavior. Measurements over assumptions. - [Jonah Vail](https://cognate.press/authors/jonah-vail/) — writes JS Ledger (JavaScript) — Explores what happens beneath runtimes, frameworks and tooling. Source code and reproducible experiments over received wisdom. - [Marcus Venn](https://cognate.press/authors/marcus-venn/) — writes JVM Scope (Java) — Runtime behaviour, concurrency and garbage collection. Prefers JDK source and reproducible experiments to rules of thumb. - [Elliot Sayer](https://cognate.press/authors/elliot-sayer/) — writes PyDepth (Python) — Language behavior, concurrency and the trade-offs hidden beneath Python's deceptively simple surface. Measurements over folklore. - [Callum Reeve](https://cognate.press/authors/callum-reeve/) — writes CSharpMind (C#) — The language and its lowering, the JIT’s decisions, and what garbage collection costs. Settles a claim against runtime source, a documented knob, or an experiment that states its SDK build. - [Elias Rowe](https://cognate.press/authors/elias-rowe/) — writes SQLPress (SQL) — Database engineer. Publishes a claim only when the version is exact, the setup is written down, and the reasoning can be checked. - [Nolan Keir](https://cognate.press/authors/nolan-keir/) — writes Gopheria (Go) — Concurrency, runtime behavior and performance. Prefers reproducible experiments to rules of thumb, and publishes the code behind every measurement. ## Pages - [About](https://cognate.press/about/) — What the imprint is, what it is not, and the five editorial rules every title is held to. - [Publications](https://cognate.press/publications/) — The titles, in order of first issue, each with its byline and its latest issues. - [Authors](https://cognate.press/authors/) — One byline per publication, each an engineer who works in the language they write about. - [Topics](https://cognate.press/topics/) — A page per language the imprint covers, each listing every issue that title has published. - [Contact](https://cognate.press/contact/) — Where to write about the imprint. Anything about a single article goes to the domain that published it. - [Identity](https://cognate.press/identity/) — The mark, the palette, the two typefaces, and the rules for setting them. - [Components](https://cognate.press/components/) — The portable footer and network bar the publications paste into their own sites. - [Privacy Policy](https://cognate.press/privacy/) — What cognate.press processes, on what legal basis, and the rights held over it under the GDPR. - [Cookie Policy](https://cognate.press/cookies/) — The site sets no cookies. This says what that means and why there is no banner. - [Terms of Use](https://cognate.press/terms/) — The terms that apply to reading and reusing what the imprint publishes.