Best Effort vs Strictly Safe

Possibly the greatest tension in the design of programming languages occurs when encountering a user program that doesn’t quite make sense. The two coherent schools of thought on the subject are Read more

How to Compute with a Probability Distribution

What makes a good representation for computing with probability distributions? The two canonical options are samplers and probability density functions. Both are valuable; and the relationship between them turns out to hide two fruitful variations on the idea of a sampler, Read more

Social Function of Module Systems

Observing the state of modern software practice, one might notice that a rough tower of different abstraction mechanisms has emerged. One might then wonder: why do we need so many concepts, if their fundamental job is to give a name to some software, and allow one to use it just by referring to its name? Read more

Stochasticity is a Quantifier

In English, quantifiers are words like “all”, “one”, or “some” that indicate how broadly true the quantified clause is. Formal logic has adopted symbols for such words, namely “all”, “exactly one”, and “some” (in the sense of “at least one”). Probability theory offers us a reason to incorporate another symbol, Read more

Hard Work and Success

This essay is inspired by the assertion that hard work is more important for success than being smart. There are, of course, many meta-objections one could have against such an assertion, Read more

Testing Revisited

Test Driven Development, as it is now called, is something I have advocated for a large part of my career. My more recent experience, however, has brought more nuance to my view of the proper level and kind of software testing, Read more

Consider the Cheeseburger

Advertising. People in my social circle are used to thinking of it as being an awful institution: greedy, faceless, unscrupulous corporations brainwashing the susceptible masses into wasting their hard-earned money on cheap, low quality, superfluous devices for solving problems no one actually has and that don’t even work. An irritation at best, sheer deceit and manipulation at worst. But in fact, what evils afflict the institution of advertising are reflections of its poor implementation, not of its superfluity. The reason advertising exists is Read more

How to Take CSS to the Next Level

Computationally generating the semantics of a web page—the HTML—has become the standard modus operandi on the web. No serious web developer writes by hand the HTML that their server sends to the browser anymore; invariably, some template engine or other generator intermediates, removing tedium and adding flexibility and power. The same thing is slowly happening to the presentation layer as well—the CSS. This article discusses the high technology that can be brought to bear on computed web layout and styling, both as an advertisement for some impressive existing tools and as a call to action for toolsmiths to fill the gaps I observe. Read more

Cleverness of Compilers 2: How

The Cleverness of Compilers essay described the name of the hyperaggressive compilation game in broad, philosophical strokes. Here, I would like to walk through the Mandelbrot example in some detail, so that the interested reader may see one particular way to actually accomplish that level of optimization. Read more

On the Cleverness of Compilers

The “Sufficiently Clever Compiler” has become something of a trope in the Lisp community: the mythical beast that promises language and interface designers near-unlimited freedom, and leaves their output in a performance lurch by its non-appearance. A few years ago, I was young enough to join a research project to build one of these things. Neglecting a raft of asterisks, footnotes, and caveats, we ended up making something whose essence is pretty impressive: you pay for abstraction boundaries in compile-time resources, but they end up free at runtime. One prototype was just open-sourced recently, so that makes now a good time to talk about it. Read more