56,966 blogs · [ { "id": "01a08748-8e6e-7395-9426-506e92c3043d", "title": "OSS code review, in the era of LLMs", "url": "https://blog.ezyang.com/2026/04/oss-code-review-in-the-era-of-llms/", "published_at": "2026-04-17T14:31:05+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49b9533cf7", "title": "Autograd and Mutation", "url": "https://blog.ezyang.com/2026/03/autograd-and-mutation/", "published_at": "2026-03-29T03:23:32+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49b9d4270d", "title": "Read Less, Steer More", "url": "https://blog.ezyang.com/2026/03/read-less-steer-more/", "published_at": "2026-03-18T19:26:58+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49ba3b8711", "title": "Parallel Agents ❤️ Sapling", "url": "https://blog.ezyang.com/2026/03/parallel-agents-heart-sapling/", "published_at": "2026-03-13T15:00:47+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49baa2358e", "title": "AI-assisted programming for spmd_types", "url": "https://blog.ezyang.com/2026/03/ai-assisted-programming-for-spmd-types/", "published_at": "2026-03-11T01:11:43+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49bafdecb6", "title": "Silent BC Breaking Changes", "url": "https://blog.ezyang.com/2026/03/silent-bc-breaking-changes/", "published_at": "2026-03-03T03:45:08+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49bb782aba", "title": "Vibe Coding Design Study: tlparse", "url": "https://blog.ezyang.com/2026/02/vibe-coding-design-study-tlparse/", "published_at": "2026-02-04T03:35:59+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49bc500b6f", "title": "Replicate Forwards, Partial Backwards", "url": "https://blog.ezyang.com/2026/02/replicate-forwards-partial-backwards/", "published_at": "2026-02-03T15:10:25+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49bd32076e", "title": "DTensor erasure", "url": "https://blog.ezyang.com/2026/02/dtensor-erasure/", "published_at": "2026-02-02T04:20:12+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49bddc3ec5", "title": "The JAX sharding type system", "url": "https://blog.ezyang.com/2026/01/jax-sharding-type-system/", "published_at": "2026-01-28T14:00:50+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49beb92f3a", "title": "Global vs Local SPMD", "url": "https://blog.ezyang.com/2026/01/global-vs-local-spmd/", "published_at": "2026-01-27T19:36:28+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49beddd175", "title": "Megatron via shard_map", "url": "https://blog.ezyang.com/2026/01/megatron-via-shard-map/", "published_at": "2026-01-26T13:34:34+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49bfce0805", "title": "Computing sharding with einsum", "url": "https://blog.ezyang.com/2026/01/computing-sharding-with-einsum/", "published_at": "2026-01-25T05:05:03+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c0b5318f", "title": "Hugo Migration", "url": "https://blog.ezyang.com/2026/01/hugo-migration/", "published_at": "2026-01-04T14:12:54+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c1950d23", "title": "The gap between a Helpful Assistant and a Senior Engineer", "url": "https://blog.ezyang.com/2026/01/the-gap-between-a-helpful-assistant-and-a-senior-engineer/", "published_at": "2026-01-04T05:41:00+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c24181cf", "title": "Code review as human alignment, in the era of LLMs", "url": "https://blog.ezyang.com/2025/12/code-review-as-human-alignment-in-the-era-of-llms/", "published_at": "2025-12-20T17:48:45+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c31d7480", "title": "Learning to love mesh-oriented sharding", "url": "https://blog.ezyang.com/2025/12/learning-to-love-mesh-oriented-sharding/", "published_at": "2025-12-08T00:35:13+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c3a63640", "title": "Draw high dimensional tensors as a matrix of matrices", "url": "https://blog.ezyang.com/2025/10/draw-high-dimensional-tensors-as-a-matrix-of-matrices/", "published_at": "2025-10-25T12:55:10+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c3bc3a58", "title": "So you want to control flow in PT2", "url": "https://blog.ezyang.com/2025/09/so-you-want-to-control-flow-in-pt2/", "published_at": "2025-09-05T10:01:23+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c3ef80d4", "title": "The Parallelism Mesh Zoo", "url": "https://blog.ezyang.com/2025/08/the-parallelism-mesh-zoo/", "published_at": "2025-08-30T23:20:01+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c4d8f26a", "title": "You could have invented CuTe hierarchical layout (but maybe not the rest of it?)", "url": "https://blog.ezyang.com/2025/08/you-could-have-invented-cute-hierarchical-layout-but-maybe-not-the-rest-of-it/", "published_at": "2025-08-22T02:48:48+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c5a257c6", "title": "State of torch.compile for training (August 2025)", "url": "https://blog.ezyang.com/2025/08/state-of-torch-compile-august-2025/", "published_at": "2025-08-13T22:33:58+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c61fb8ea", "title": "Vibe coding case study: ScubaDuck", "url": "https://blog.ezyang.com/2025/06/vibe-coding-case-study-scubaduck/", "published_at": "2025-06-02T00:31:25+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c6b23247", "title": "Why you should maintain a personal LLM coding benchmark", "url": "https://blog.ezyang.com/2025/04/why-you-should-maintain-a-personal-llm-coding-benchmark/", "published_at": "2025-04-04T03:05:46+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c7348e68", "title": "New Years resolutions for PyTorch in 2025", "url": "https://blog.ezyang.com/2025/01/new-years-resolutions-for-pytorch-in-2025/", "published_at": "2025-01-09T15:50:08+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c80fa9a9", "title": "Ways to use torch.export", "url": "https://blog.ezyang.com/2024/12/ways-to-use-torch-export/", "published_at": "2024-12-23T23:28:23+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c8d58d23", "title": "Ways to use torch.compile", "url": "https://blog.ezyang.com/2024/11/ways-to-use-torch-compile/", "published_at": "2024-11-05T10:11:52+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49c99713fc", "title": "Tensor programming for databases, with first class dimensions", "url": "https://blog.ezyang.com/2024/10/tensor-programming-for-databases-with-first-class-dimensions/", "published_at": "2024-10-14T01:07:14+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49ca677ba8", "title": "What's different this time? LLM edition", "url": "https://blog.ezyang.com/2024/10/whats-different-this-time-llm-edition/", "published_at": "2024-10-04T00:30:09+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cb2f8784", "title": "Interactive scraping with Jupyter and Puppeteer", "url": "https://blog.ezyang.com/2021/11/interactive-scraping-with-jupyter-and-puppeteer/", "published_at": "2021-11-23T09:28:07+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cb606f58", "title": "PyTorch Developer Podcast", "url": "https://blog.ezyang.com/2021/05/pytorch-developer-podcast/", "published_at": "2021-05-05T11:26:42+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cb7f9b5f", "title": "Rage bug reporting", "url": "https://blog.ezyang.com/2021/04/rage-bug-reporting/", "published_at": "2021-04-25T00:03:41+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cbe240be", "title": "The PyTorch open source process", "url": "https://blog.ezyang.com/2021/01/pytorch-open-source-process/", "published_at": "2021-01-06T11:56:33+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cc910c9d", "title": "The hidden problem(?) with basic block procedures in SSA", "url": "https://blog.ezyang.com/2020/10/the-hidden-problem-with-basic-block-procedures-in-ssa/", "published_at": "2020-10-24T19:34:21+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49ccf56c44", "title": "Idiomatic algebraic data types in Python with dataclasses and Union", "url": "https://blog.ezyang.com/2020/10/idiomatic-algebraic-data-types-in-python-with-dataclasses-and-union/", "published_at": "2020-10-14T14:08:54+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cdcbf29c", "title": "Let's talk about the PyTorch dispatcher", "url": "https://blog.ezyang.com/2020/09/lets-talk-about-the-pytorch-dispatcher/", "published_at": "2020-09-10T14:29:05+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49cea22b2f", "title": "Dynamic scoping is an effect, implicit parameters are a coeffect", "url": "https://blog.ezyang.com/2020/08/dynamic-scoping-is-an-effect-implicit-parameters-are-a-coeffect/", "published_at": "2020-08-27T01:51:36+00:00" }, { "id": "01a08748-8e70-7204-b9b4-5d49ceacd679", "title": "A brief taxonomy of PyTorch operators by shape behavior", "url": "https://blog.ezyang.com/2020/05/a-brief-taxonomy-of-pytorch-operators-by-shape-behavior/", "published_at": "2020-05-06T11:56:43+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8ce7b2bf", "title": "vmap in Haskell", "url": "https://blog.ezyang.com/2020/01/vmap-in-haskell/", "published_at": "2020-01-29T14:14:34+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8dc6d7a4", "title": "PyTorch internals", "url": "https://blog.ezyang.com/2019/05/pytorch-internals/", "published_at": "2019-05-16T22:11:22+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8dd3af8a", "title": "A short note about functional linear maps", "url": "https://blog.ezyang.com/2019/05/a-short-note-about-functional-linear-maps/", "published_at": "2019-05-15T17:42:10+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8eac2ba5", "title": "Microsoft Surface Book 2", "url": "https://blog.ezyang.com/2019/03/microsoft-surface-book-2/", "published_at": "2019-03-17T21:59:52+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8fa3730d", "title": "HIW'18: Let’s Go Mainstream with Eta!", "url": "https://blog.ezyang.com/2018/09/hiw18-lets-go-mainstream-with-eta/", "published_at": "2018-09-23T11:02:53+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8fa7e51a", "title": "A year into Backpack", "url": "https://blog.ezyang.com/2018/07/a-year-into-backpack/", "published_at": "2018-07-14T19:34:16+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba8ff3eb78", "title": "A compile-time debugger that helps you write tensor shape checks", "url": "https://blog.ezyang.com/2018/04/a-compile-time-debugger-that-helps-you-write-tensor-shape-checks/", "published_at": "2018-04-06T23:49:53+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba90b5b6d2", "title": "Online/offline continuous integration", "url": "https://blog.ezyang.com/2018/03/online-offline-continuous-integration/", "published_at": "2018-03-12T22:52:29+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba910982b9", "title": "Semantic Import Versioning in the wild", "url": "https://blog.ezyang.com/2018/02/semantic-import-versioning-in-the-wild/", "published_at": "2018-02-23T00:06:00+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9205840d", "title": "Systems ML workshop panel", "url": "https://blog.ezyang.com/2017/12/systems-ml-workshop-panel/", "published_at": "2017-12-08T21:17:08+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba92fffd8a", "title": "Accelerating Persistent Neural Networks at Datacenter Scale (Daniel Lo)", "url": "https://blog.ezyang.com/2017/12/accelerating-persistent-neural-networks-at-datacenter-scale-daniel-lo/", "published_at": "2017-12-08T15:08:44+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba93e22e77", "title": "MOCHA: Federated Multi-Tasks Learning (Virginia Smith)", "url": "https://blog.ezyang.com/2017/12/mocha-federated-multi-tasks-learning-virginia-smith/", "published_at": "2017-12-08T13:15:32+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba93e5aefa", "title": "A Machine Learning Approach to Database Indexes (Alex Beutel)", "url": "https://blog.ezyang.com/2017/12/a-machine-learning-approach-to-database-indexes-alex-beutel/", "published_at": "2017-12-08T13:11:02+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba94aeb726", "title": "Ray: A Distributed Execution Framework for Emerging AI Applications (Ion Stoica)", "url": "https://blog.ezyang.com/2017/12/ray-a-distributed-execution-framework-for-emerging-ai-applications-ion-stoica/", "published_at": "2017-12-08T13:07:16+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9595359d", "title": "Backpack for deep learning", "url": "https://blog.ezyang.com/2017/08/backpack-for-deep-learning/", "published_at": "2017-08-17T22:05:03+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba96277fd9", "title": "Proposal: Suggest explicit type application for Foldable length and friends", "url": "https://blog.ezyang.com/2017/03/proposal-suggest-explicit-type-application-for-foldable-length/", "published_at": "2017-03-21T19:50:13+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9678a8fa", "title": "Prio: Private, Robust, and Scalable Computation of Aggregate Statistics", "url": "https://blog.ezyang.com/2017/03/prio-private-robust-and-scalable-computation-of-aggregate-statistics/", "published_at": "2017-03-17T19:35:48+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9681aaff", "title": "Designing the Backpack signature ecosystem", "url": "https://blog.ezyang.com/2017/03/designing-the-backpack-signature-ecosystem/", "published_at": "2017-03-11T06:40:42+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba969aa6a8", "title": "How to integrate GHC API programs with Cabal", "url": "https://blog.ezyang.com/2017/02/how-to-integrate-ghc-api-programs-with-cabal/", "published_at": "2017-02-08T19:45:00+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba975ae8e4", "title": "Try Backpack: Cabal packages", "url": "https://blog.ezyang.com/2017/01/try-backpack-cabal-packages/", "published_at": "2017-01-17T23:17:21+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9831d981", "title": "A tale of backwards compatibility in ASTs", "url": "https://blog.ezyang.com/2016/12/a-tale-of-backwards-compatibility-in-asts/", "published_at": "2016-12-31T23:35:33+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba98b2cee3", "title": "Backpack and the PVP", "url": "https://blog.ezyang.com/2016/12/backpack-and-the-pvp/", "published_at": "2016-12-30T01:32:31+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba990dff60", "title": "Left-recursive parsing of Haskell imports and declarations", "url": "https://blog.ezyang.com/2016/12/left-recursive-parsing-of-haskell-imports-and-declarations/", "published_at": "2016-12-21T20:24:11+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9950dd9c", "title": "The problem of reusable and composable specifications", "url": "https://blog.ezyang.com/2016/12/the-problem-of-reusable-and-composable-specifications/", "published_at": "2016-12-17T05:54:31+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba99b97969", "title": "Thoughts about Spec-ulation (Rich Hickey)", "url": "https://blog.ezyang.com/2016/12/thoughts-about-spec-ulation-rich-hickey/", "published_at": "2016-12-16T19:26:00+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9a0bf862", "title": "Try Backpack: ghc --backpack", "url": "https://blog.ezyang.com/2016/10/try-backpack-ghc-backpack/", "published_at": "2016-10-10T04:39:14+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9ae68e2a", "title": "Seize the Means of Production (of APIs)", "url": "https://blog.ezyang.com/2016/09/seize-the-means-of-production-of-apis/", "published_at": "2016-09-13T01:09:52+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9b2f3ef1", "title": "The Base of a String Theory for Haskell", "url": "https://blog.ezyang.com/2016/09/the-base-of-a-string-theory-for-haskell/", "published_at": "2016-09-07T02:22:53+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9ba6e1b0", "title": "The Edit-Recompile Manager", "url": "https://blog.ezyang.com/2016/09/the-edit-recompile-manager/", "published_at": "2016-09-02T20:40:43+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9bf143b1", "title": "Backpack and separate compilation", "url": "https://blog.ezyang.com/2016/09/backpack-and-separate-compilation/", "published_at": "2016-09-01T02:26:40+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9cb926d6", "title": "cabal new-build is a package manager", "url": "https://blog.ezyang.com/2016/08/cabal-new-build-is-a-package-manager/", "published_at": "2016-08-29T17:32:36+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9d97392c", "title": "Optimizing incremental compilation", "url": "https://blog.ezyang.com/2016/08/optimizing-incremental-compilation/", "published_at": "2016-08-27T06:03:03+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9ddd258f", "title": "What Template Haskell gets wrong and Racket gets right", "url": "https://blog.ezyang.com/2016/07/what-template-haskell-gets-wrong-and-racket-gets-right/", "published_at": "2016-07-18T11:19:37+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9e4e8b3b", "title": "Debugging tcIfaceGlobal errors in GHC: a study in interpreting trace output", "url": "https://blog.ezyang.com/2016/05/debugging-tcifaceglobal-errors-in-ghc-a-study-in-interpreting-trace-output/", "published_at": "2016-05-15T18:02:52+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9ef62970", "title": "Announcing cabal new-build: Nix-style local builds", "url": "https://blog.ezyang.com/2016/05/announcing-cabal-new-build-nix-style-local-builds/", "published_at": "2016-05-02T12:45:01+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9f4b5a1c", "title": "Hindley-Milner with top-level existentials", "url": "https://blog.ezyang.com/2016/04/hindley-milner-with-top-level-existentials/", "published_at": "2016-04-24T04:05:09+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9f5c490f", "title": "ghc-shake: Reimplementing ghc -​-make", "url": "https://blog.ezyang.com/2016/01/ghc-shake-reimplementing-ghc-make/", "published_at": "2016-01-07T12:59:32+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dba9fd713bc", "title": "The convergence of compilers, build systems and package managers", "url": "https://blog.ezyang.com/2015/12/the-convergence-of-compilers-build-systems-and-package-managers/", "published_at": "2015-12-07T01:50:28+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dbaa0472def", "title": "What is Stateless User Interface?", "url": "https://blog.ezyang.com/2015/11/what-is-stateless-user-interface/", "published_at": "2015-11-27T01:53:49+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dbaa1173dc5", "title": "Is no-reinstall Cabal coming to GHC 8.0?", "url": "https://blog.ezyang.com/2015/09/is-no-reinstall-cabal-coming-to-ghc-8/", "published_at": "2015-09-18T23:15:47+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dbaa1c71f33", "title": "Help us beta test \"no-reinstall Cabal\"", "url": "https://blog.ezyang.com/2015/08/help-us-beta-test-no-reinstall-cabal/", "published_at": "2015-08-29T00:31:15+00:00" }, { "id": "01a08748-8e71-73f0-af90-0dbaa2185175", "title": "Ubuntu Vivid upgrade (Xmonad)", "url": "https://blog.ezyang.com/2015/05/ubuntu-vivid-upgrade-xmonad/", "published_at": "2015-05-29T14:09:30+00:00" }, { "id": "01a08748-8e72-7106-97f8-958567ca0f73", "title": "Width-adaptive XMonad layout", "url": "https://blog.ezyang.com/2015/05/width-adaptive-xmonad-layout/", "published_at": "2015-05-02T00:36:55+00:00" }, { "id": "01a08748-8e72-7106-97f8-9585687de4d7", "title": "An Eq instance for non de Bruijn terms", "url": "https://blog.ezyang.com/2015/01/an-eq-instance-for-non-de-bruijn-terms/", "published_at": "2015-01-30T21:14:10+00:00" }, { "id": "01a08748-8e72-7106-97f8-95856962d2b9", "title": "Unintended consequences: Bound threads and unsafe FFI calls", "url": "https://blog.ezyang.com/2014/12/unintended-consequences-bound-threads-and-unsafe-ffi-calls/", "published_at": "2014-12-08T19:09:33+00:00" }, { "id": "01a08748-8e72-7106-97f8-95856a3d9573", "title": "Ubuntu Utopic upgrade (Xmonad)", "url": "https://blog.ezyang.com/2014/12/ubuntu-utopic-upgrade-xmonad/", "published_at": "2014-12-04T18:48:19+00:00" }, { "id": "01a08748-8e72-7106-97f8-95856b3aabf2", "title": "Tomatoes are a subtype of vegetables", "url": "https://blog.ezyang.com/2014/11/tomatoes-are-a-subtype-of-vegetables/", "published_at": "2014-11-14T21:00:36+00:00" }, { "id": "01a08748-8e72-7106-97f8-95856bc9385b", "title": "Haskell Implementor's Workshop '14", "url": "https://blog.ezyang.com/2014/09/haskell-implementors-workshop-14/", "published_at": "2014-09-07T09:05:02+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f45f5d05", "title": "Open type families are not modular", "url": "https://blog.ezyang.com/2014/09/open-type-families-are-not-modular/", "published_at": "2014-09-04T18:12:23+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f46e62b5", "title": "A taste of Cabalized Backpack", "url": "https://blog.ezyang.com/2014/08/a-taste-of-cabalized-backpack/", "published_at": "2014-08-26T18:01:48+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f4d6e611", "title": "The fundamental problem of programming language package management", "url": "https://blog.ezyang.com/2014/08/the-fundamental-problem-of-programming-language-package-management/", "published_at": "2014-08-21T09:02:53+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f5086cd0", "title": "What's a module system good for anyway?", "url": "https://blog.ezyang.com/2014/08/whats-a-module-system-good-for-anyway/", "published_at": "2014-08-09T19:21:19+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f5aea07e", "title": "New theme!", "url": "https://blog.ezyang.com/2014/07/new-theme/", "published_at": "2014-07-26T09:58:27+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f5f67eb1", "title": "Type classes: confluence, coherence and global uniqueness", "url": "https://blog.ezyang.com/2014/07/type-classes-confluence-coherence-global-uniqueness/", "published_at": "2014-07-11T12:07:53+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f6f3b129", "title": "Parsec: \"try a <|> b\" considered harmful", "url": "https://blog.ezyang.com/2014/05/parsec-try-a-or-b-considered-harmful/", "published_at": "2014-05-17T21:46:52+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f7735ada", "title": "GHC and mutable arrays: a DIRTY little secret", "url": "https://blog.ezyang.com/2014/05/ghc-and-mutable-arrays-a-dirty-little-secret/", "published_at": "2014-05-09T02:34:46+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f7d7a9a9", "title": "Elimination with a Motive (in Coq)", "url": "https://blog.ezyang.com/2014/05/elimination-with-a-motive-in-coq/", "published_at": "2014-05-07T23:13:15+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f80a64e4", "title": "The cost of weak pointers and finalizers in GHC", "url": "https://blog.ezyang.com/2014/05/the-cost-of-weak-pointers-and-finalizers-in-ghc/", "published_at": "2014-05-04T04:55:36+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f8224a09", "title": "Calculating Shanten in Mahjong", "url": "https://blog.ezyang.com/2014/04/calculating-shanten-in-mahjong/", "published_at": "2014-04-01T04:20:46+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f8eb8981", "title": "Haskell for Coq programmers", "url": "https://blog.ezyang.com/2014/03/haskell-for-coq-programmers/", "published_at": "2014-03-17T02:06:47+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6f9608ffa", "title": "Equality, roughly speaking", "url": "https://blog.ezyang.com/2014/01/equality-roughly-speaking/", "published_at": "2014-01-30T00:05:03+00:00" }, { "id": "01a08748-8e73-718e-ad4f-08e6fa2c9ce5", "title": "How to maintain a pristine copy of your configuration files", "url": "https://blog.ezyang.com/2014/01/how-to-maintain-a-pristine-copy-of-your-configuration-files/", "published_at": "2014-01-20T19:02:31+00:00" } ] posts Claim your blog
Back to blog.ezyang.com
Blog · corpus.blog/blogs/blog.ezyang.com/posts

blog.ezyang.com

blog.ezyang.com

2026

2025

2024

2021

2020

2019

2018

2017

2016

2015

2014