ARCANE PROGRAMMING LANGUAGES
Arcane Programming: INTERCAL
INTERCAL is one of the oldest programming languages created purely as commentary about programming and programming languages. Like all languages in this series, it has no real practical value. INTERCAL itself is a unique form of satire that captures many of the disparate and competing ideas about the future of programming that were floating around in the late 1960s.
The History of INTERCAL
INTERCAL, an acronym for “Compiler Language With No Pronounceable Acronym” (I suggest that you just don’t think about it that hard.) was born out of the desire to challenge the conventions of programming languages. Its creators Don Woods and Jim Lyon, armed with their wit and rebellious spirit, set out to create a language that defied expectations. Their baby introduced a healthy dose of absurdity into the programming landscape of the late 1960s and early 1970s.
To get an idea of the era when INTERCAL was created, the original implementation of the compiler used punched cards and the ancient EBCDIC (Extended Binary Coded Decimal Interchange) code created by IBM for their mainframe and midrange systems.
Syntax and Architecture
INTERCAL syntax is deliberately obtuse and convoluted, designed to defy conventions and leave programmers scratching their heads. Variables, for example, are declared with symbols like “.” for a 16-bit integer, and “:” for a 32-bit integer, instead of strings.
Other than 16-bit and 32-bit integers the only other datatypes available are arrays of each, declared with “,” and “;” respectively. For each datatype, there are 65535 distinct vars. Referenced using the type symbol and a number from 1 to 655535. To make things even more interesting each of these 4 types also has its own distinct stack you can push and pop values onto.
The language incorporates statements like “READ OUT,” “IGNORE,” and “FORGET,” along with the unique keyword “PLEASE.” This last keyword is particularly interesting, as its usage affects the program’s acceptance by the compiler. The program is deemed impolite if “PLEASE” doesn’t appear frequently enough. Conversely, it may be rejected for being excessively polite if it appears too often. Such quirks add an unexpected dimension to the programmer’s interaction with the language.
The INTERCAL architecture is equally intriguing. Since it was originally developed to run on punched card systems using the EBCDIC character set, it required adjustments to be compatible with ASCII-based computers. For example, the substitution of characters like “$” for “¢” and “?” allowed for smoother execution on ASCII-based machines. Recent versions of C-INTERCAL even support older operators, providing flexibility and expanding the encoding possibilities.
The Future of INTERCAL
INTERCAL, with its intentional complexity and unconventional approach, probably doesn’t have a practical place in the future of programming. But while it may not be a language that finds widespread adoption, INTERCAL has amassed a dedicated following among enthusiasts of esoteric programming languages. Its absurdity and humor continue to captivate those who seek unconventional challenges.
INTERCAL is a reminder that programming is not just a technical pursuit but an art form capable of expressing unconventional ideas and pushing the boundaries of creativity.
This article is just part of an ongoing series on Arcane and Esoteric programming languages. Follow me if you want to see more.
I write on a wide variety of topics including programming, travel, politics, books, and AI. You can see all of my stories on Medium here.
If you like my stories on Medium, you can subscribe here to get them directly in your inbox. That way you’ll never miss one!
You can also support other authors and me by joining the Medium community. Sign up for a membership using this link. For only $5 a month, you get unlimited access to all the stories on Medium and I also get a small commission at no extra cost to you.
(Some of the links in my articles may be affiliate links for which I might receive a small commission.)