Skip to content

Instantly share code, notes, and snippets.

@hwayne
Created June 30, 2021 20:10
Show Gist options
  • Save hwayne/6b4dda9da487e82a62a87ea5d78dade7 to your computer and use it in GitHub Desktop.
Save hwayne/6b4dda9da487e82a62a87ea5d78dade7 to your computer and use it in GitHub Desktop.
Frances Allen

A while back I complained on Twitter about how Ada Lovelace is used as an example of "an important woman in CS", because she's a pretty terrible example (thread in comments), and listed some better choices. In response, somebody said that public people get why Lovelace is interesting, whereas it's hard to explain why, like, Barbara Liskov matters so much. That got me interested in explaining the contributions to CS in ways that are understandable to people with no tech background. Here's my attempt to explain Frances E Allen, who did foundational work in optimizing compilers:


Without Frances Allen, our videogames would be stuck in the SNES era.

So at a fundamental level, a computer is just a bag of buckets of data (memory addresses), and a program is just instructions ot move data between the buckets. Like mov edx, [ebp + 8] means "take the data in the 8th bucket after the ebp bucket and move it to the edx bucket." All programs eventually become this "assembly" language that the computer executes. For a long time, all programmers used to program directly in assembly, manually tracking the data and moving it between buckets, but we stopped because this fucking sucks.

Instead, we use "programming languages", which are actual descriptions of what we want to do and not just bucket-juggling. A compiler then takes our program and turns it into assembly, which the computer executes. Each programming line can turn into an awful lot of instructions! Which is a problem. See, we're not just interested in programs, we're interested in fast programs. Every instruction of assembly takes time to execute. And because compilers are stupid, they have to be as "safe" as possible. This means a human, writing assembly by hand, can usually write something that's faster than what a compiler can produce from sensible code.

This usually doesn't matter too much, because computers are also pretty fast, so people could get away with using a programming language. But for things at the cutting-edge of performance–simulations, medical research, videogames– we still had to use assembly. Which sucks, and also limits how complex you can make your program. Maintaining a 10k lines of programming code is much easier than maintaining 100k lines of MOV STC POPF instructions.

Enter Frances E Allen. In the mid-1970's, she laid the foundations of the field of "optimizing compilers". Optimizing compilers use a bunch of tricks to convert programming language code into fast assembly programs. This made programming languages "sufficiently fast" for even high-performance workloads, meaning we don't have to write videogames in assembly, meaning we can make much more complex videogames than we could make with just assembly. Hooray!

(People still write stuff in raw assembly, but it's a lot less than we used to need to, and often it's just a few "performance-critical" portions of a higher-level program.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment