INTERCAL

programmeertaal

De Compiler Language With No Pronounceable Acronym (INTERCAL) is een esoterische programmeertaal die als parodie is gemaakt door Don Woods en James M. Lyon, twee studenten van Princeton University, in 1972. Een aantal aspecten van de verschillende programmeertalen uit die tijd worden op satirische wijze in INTERCAL gebruikt.

Don Woods, een van de makers van INTERCAL, in 2010
Jim Lyon, de andere maker van INTERCAL, in 2005

Kenmerken bewerken

Volgens de originele handleiding van de auteurs:

De volledige naam van de compiler is "Compiler Language With No Pronounceable Acronym", hetgeen, om voor de hand liggende redenen, afgekort wordt tot "INTERCAL".

De originele Princeton-implementatie gebruikte ponskaarten en de EBCDIC-tekenset.

INTERCAL was bedoeld om compleet anders te zijn dan alle andere computertalen. Veel voorkomende bewerkingen in andere talen hebben een cryptische en overbodige syntaxis in INTERCAL.

INTERCAL heeft veel andere functies die zijn ontworpen om het esthetisch nog onaangenamer te maken voor de programmeur: het gebruikt commando's zoals "READ OUT", "IGNORE", "FORGET", en modifiers zoals "PLEASE". Dit laatste sleutelwoord moet af en toe een commando voorafgaan, als "PLEASE" niet vaak genoeg verschijnt, wordt het programma als onvoldoende beleefd beschouwd, en krijg je een compileerfout. Echter, als het te vaak voorkomt, wordt het programma als overdreven beleefd beschouwd, en krijg je eveneens een fout. Hoewel deze functie aanwezig was in de originele INTERCAL-compiler, was deze niet gedocumenteerd.

Ondanks de opzettelijk duistere en omslachtige syntaxis van de taal, is INTERCAL niettemin Turing-compleet: met voldoende geheugen kan INTERCAL elk probleem oplossen dat een universele Turing-machine kan oplossen. De meeste implementaties van INTERCAL doen dit echter zeer langzaam. Een benchmark voor de Zeef van Eratosthenes, die alle priemgetallen kleiner dan 65536 berekent, werd in 1992 getest op een Sun SPARCstation 1. In C duurde het minder dan een halve seconde; hetzelfde programma in INTERCAL duurde meer dan zeventien uur.

Hello world bewerken

De traditionele "Hello world!"-programma laat zien hoe verschillend INTERCAL is van standaard programmeertalen. In C zou het als volgt kunnen luiden:

#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");

    return 0;
}

Het equivalente programma in C-INTERCAL is langer en moeilijker te lezen:

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP