Blogs / Personal blogs

Popular posts
43
Total points
8,465
HN comments
5,083
Rank
#103 personal

Visit research.swtch.com → RSS feedOn Hacker News Feb 2010 – Jan 2026

Software Engineering 32Open Source 11Programming Languages 9Tools & Productivity 8Systems & Performance 8Security & Privacy 7

1

Our Software Dependency Problem

For decades, discussion of software reuse was far more common than actual software reuse. Today, the situation is reversed: developers reuse software written by others every day, in the form of software dependencies, and the situation goes mostly unexamined.

2

Go += Package Versioning

More precisely, we need to add the concept of package versions to the working vocabulary of both Go developers and our tools, so that they can all be precise when talking to each other about exactly which program should be built, run, or analyzed. The go command needs to be able to tell developers exactly which…

3

Glob Matching Can Be Simple and Fast Too

Here’s a straightforward benchmark. Time how long it takes to run ls ( a* ) n b in a directory with a single file named a 100 , compared to running ls | grep ( a.* ) n b . Superscripts denote string repetition and parentheses are for grouping only, so that when n is 3, we’re running ls a*a*a*b in a directory…

6

Running the "Reflections on Trusting Trust" Compiler

Supply chain security is a hot topic today, but it is a very old problem. In October 1983, 40 years ago this week, Ken Thompson chose supply chain security as the topic for his Turing award lecture, although the specific term wasn’t used back then. (The field of computer science was still young and small enough that…

7

C and C++ prioritize performance over correctness

The original ANSI C standard, C89, introduced the concept of “undefined behavior,” which was used both to describe the effect of outright bugs like accessing memory in a freed object and also to capture the fact that existing implementations differed about handling certain aspects of the language, including use of…

9

Updating the Go Memory Model

The current Go language memory model was written in 2009, with minor updates since. It is clear that there are at least a few details that we should add to the current memory model, among them an explicit endorsement of race detectors and a clear statement of how the APIs in sync/atomic synchronize programs.

15

A Tour of the Acme Editor

People I work with recognize my computer easily: it's the one with nothing but yellow windows and blue bars on the screen. That's the text editor acme, written by Rob Pike for Plan 9 in the early 1990s. Acme focuses entirely on the idea of text as user interface. It's difficult to explain acme without seeing it…

18

Go Data Structures (2009)

When explaining Go to new programmers, I've found that it often helps to explain what Go values look like in memory, to build the right intuition about which operations are expensive and which are not. This post is about basic types, structs, arrays, and slices.

19

Go and Versioning: Minimal Version Selection

A versioned Go command must decide which module versions to use in each build. I call this list of modules and versions for use in a given build the build list . For stable development, today’s build list must also be tomorrow’s build list. But then developers must also be allowed to change the build list: to upgrade…

20

Storing Data in Control Flow

A decision that arises over and over when designing concurrent programs is whether to represent program state in control flow or as data. This post is about what that decision means and how to approach it. Done well, taking program state stored in data and storing it instead in control flow can make programs much…

23

What is Software Engineering?

Nearly all of Go’s distinctive design decisions were aimed at making software engineering simpler and easier. We’ve said this often. The canonical reference is Rob Pike’s 2012 article, “ Go at Google: Language Design in the Service of Software Engineering .” But what is software engineering?

24

Lock-Free Bugs

[ I wrote this post in mid-2014 for debuggers.co, which seems to have gone at least partly defunct, so I am reproducing it here. That site collected answers from programmers to the prompt “What’s the most interesting bug you’ve encountered?” ]

25

Versioned Go Commands

What does it mean to add versioning to the go command? The overview post gave a preview, but the followup posts focused mainly on underlying details: the import compatibility rule , minimal version selection , and defining go modules . With those better understood, this post examines the details of how versioning…

26

Minimal Boolean Formulas (2011)

28 . That's the minimum number of AND or OR operators you need in order to write any Boolean function of five variables. Alex Healy and I computed that in April 2010. Until then, I believe no one had ever known that little fact. This post describes how we computed it and how we almost got scooped by Knuth's Volume 4A…

27

Version SAT

The package version selection problem is to find a set of dependencies that can be used to build a top-level package P that is complete (all dependencies satisfied) and compatible (no two incompatible packages are selected). There may be no such set, because of the diamond dependency problem: perhaps A needs B and C…

30

Zip Files All the Way Down (2010)

A well-known scientist (some say it was Bertrand Russell) once gave a public lecture on astronomy. He described how the earth orbits around the sun and how the sun, in turn, orbits around the center of a vast collection of stars called our galaxy. At the end of the lecture, a little old lady at the back of the room…