Technomasochism
Getting spanked by INTERCAL
Lev Bratishenko
“Is the computer a friend or enemy of man?” asked Time in 1965. It took seven years and two freshmen at Princeton to come up with another answer: it’s his dominatrix.
Early one morning in 1972, Donald R. Woods and James M. Lyon wrote a computer language so perverse that it survives on reputation alone. They called it “Compiler Language with No Pronounceable Acronym,” which they abbreviated as INTERCAL for what they called “obvious reasons,” and it manifests nothing short of a computer-science death wish. INTERCAL was created when the goal of new languages was not flexibility or ease of use—these are contemporary ideals—but instead proficiency at a few things like logic, probability, and so on. INTERCAL, however, was not written to be particularly efficient or useful or really anything resembling the reasons a new computer language is normally created. For example, a program written in C and tested on a Sun SPARCStation-1 took less than half a second to complete an old test for computers known as the Sieve of Eratosthenes benchmark, which calculates all prime numbers less than 65,536; the same program written in INTERCAL took over seventeen hours. INTERCAL was written as a joke, but it has survived as a master’s den: those unprepared for the pain shouldn’t wander in.
Computers and programmers were still relatively new at the time of INTERCAL’s perpetration. Computers aren’t brains, but they were frequently compared with them in the early days. Perhaps this was because they seem to be better workers than we are. A computer, noted Life in October 1967, “can pay undivided attention to details that would drive a mortal right out of his mind. It can be told something and won’t forget it until told to do so. It never gets huffy.” Such relentless attention comes at a price; the power of the computer was built on the abnegations of its ascetic high priests: “Sometimes programmers just won’t go home, take a bath or anything,” continued the Life article. “They’ll sit there working with their newfound ‘friend’ 20 hours a day, just watching the lights and drinking coffee. After a while they get to looking pale and unhealthy. They sit there fascinated and just forget to eat.” Weak, awkward, but lords of the virtual realms, programmers were as powerful in the electronic world as they were impotent in the real one—until INTERCAL, the first language that didn’t respect them, the first language whose grammar turned them into subs.
INTERCAL grinds a programmer into the dirt in a few creative ways. For example, a unique and undocumented feature of the compiler (the program that translates INTERCAL syntax into the machine code that the processor understands) was its requirements for politesse. This was represented through the PLEASE qualifier, an essential aspect of INTERCAL grammar. If PLEASE was not encountered often enough, the program would be rejected; that is, ignored without explanation by the compiler. Too often and it would still be rejected, this time for sniveling. Combined with other words that are rarely used in programming languages but appear as statements in INTERCAL, the code reads like someone pleading:
(1000) PLEASE ABSTAIN FROM IGNORING +
FORGETTING
(1001) IGNORE :1
(1002) PLEASE DO 24% :1 <- #0$#256
(1003) REMEMBER :1
(1004) READ OUT :1
(1005) PLEASE DON’T GIVE UP
(1006) GIVE UP
This irritating bit of code could be understood as follows: ABSTAIN causes individual lines of code or, as in this case, specified commands (IGNORE and FORGET) to be ignored. This means that the next line (1001) wouldn’t do anything unless the compiler had ignored the previous line for some reason. It might have, but you would never know it because the INTERCAL compiler has no error output or any kind of interrupt. It just reams through the code, turning it into as much binary as it can. If what is compiled ends up executing, it’s a bonus. PLEASE DO 24% :1 <- #0$#256 would store the value 65,536 in the 32-bit variable called :1, but only twenty-four percent of the time. REMEMBER would have remembered the variable :1 if it had been ignored by line 1001, which it probably wasn’t. READ OUT :1 would print the value of :1 in extended Roman numerals or Sanskrit, while line 1005, PLEASE DON’T GIVE UP, is obviously a non-starter. Mercifully, the last line ends the program.
Despite its torturous protocols, INTERCAL survives in libraries of subroutines available for download. (The current implementation, known as C-INTERCAL, was created in 1998 by Eric S. Raymond, author of The New Hacker’s Dictionary; the language I’ve been referring to is technically called INTERCAL-72 and it requires a mainframe to run.) Why this continuing interest? Perhaps because computers are no longer mysterious, or awesome, or threatening. There are now millions of programmers working in easy languages; the priesthood’s secret texts are taught in middle schools, and teenagers release successful iPhone applications. How else can you distinguish yourself as a real nerd other than by conquering a masochistic language? So a select few, the technomasochists, tend the flame of difficulty, and await an even stricter master.
Lev Bratishenko is a Montreal-based author, curator, and classical music critic. He is a researcher at the Canadian Centre for Architecture, where he has collaborated on exhibitions including Intermission: Films From a Heroic Future (2009) and Actions: What You Can Do With The City (2008).