Jimbo Lyon – jeden z twórców języka INTERCAL
INTERCAL – prawdopodobnie pierwszy ezoteryczny język programowania. Jego oficjalna nazwa to CLWNPA, czyli Compiler Language With No Pronounceable Acronym (kompilowany język o niewymawialnym skrócie). Wyglądem jest podobne asembler, lecz jego składnia jest tak skonstruowana, aby maksymalnie utrudnić pisanie programów oraz uczynić listingi jak najbardziej zagmatwanymi.
Charakterystyka
Cechy INTERCALA:
- Uprzejmość – cząstka instrukcji musimy poprzedzić słowem kluczowym PLEASE, albowiem inaczej program zostanie uznany za nieuprzejmy, a co za tym idzie – odrzucony. Nadużywanie tego słowa spowoduje natomiast zaklasyfikowanie programu jako zbyt lizusowskiego.
- Instrukcja COME FROM będąca skokiem z, a nie do etykiety. Pojawiła się w późniejszych wersjach języka oraz stała się inspiracją do stworzenia wielowątkowego INTERCALA.
- Grupowanie wyrażeń będące czymś w rodzaju nawiasów – zamiast nich używane są jednak znaki " oraz ', co pogarsza czytelność źródeł.
- Brak jawnego mechanizmu wywoływania procedur. Dostępna jest jedynie instrukcja NEXT, która wykonuje skok do etykiety oraz przypadkiem odrzuca adres na stos.
- W Intercalu nie każda użyta komenda musi na 100% oznaczać jej wykonanie. Może to oznaczać jej wykonanie np. na 80%, jeśli rozpoczyna się od "%80".
- Ignorowanie instrukcji. Przykładowo, ABSTAIN FROM STASHING spowoduje ignorowanie instrukcji STASH, natomiast REINSTATE STASHING z powrotem przywróci ją do działania.
- Brak zmiennych lokalnych. Zamiast tego możemy korzystać z mechanizmu tworzenia ramek stosu.
- Liczby są wypisywane na ekran w postaci rzymskiej.
Oficjalna specyfikacja języka jest napisana w sposób humorystyczny. Zawiera dużo paradoksalnych, nielogicznych albo zabawnych w jakiś odmienny sposób zdań. Ponadto autorzy zastosowali autorskie nazewnictwo znaków ASCII, np. apostrofy oraz cudzysłowy zwane są tam odpowiednio "iskrami" oraz "króliczymi uszkami".
Operatory
INTERCAL ma parę operatorów pracujących na słowach procesora, niespotykanych w innych językach programowania. Dwuargumentowe operatory to:
- mingle (lub interleave) ($) – przeplatanie bitów obu argumentów.
- select (~) – wybiera z pierwszego argumentu te bity, których odpowiadające im w drugim argumencie są ustawione; pozostałe są usuwane, a całość jest "upychana w prawo".
Ponadto są trzy jednoargumentowe operatory: AND, OR, EXOR. Wykonują one swą pracę na kolejnych parach bitów w argumencie.
Zupełność
Pomimo niespotykanych rozwiązań, INTERCAL jest językiem zupełnym w sensie Turinga. Oznacza to, iż posiadając odpowiednio dużą pamięć, da się w nim rozwiązać każdy problem algorytmiczny, z jakim radzą sobie maszyny Turinga (czyli m.in. komputery). Rozwiązywanie pochłania jednak wydatnie więcej czasu. Wykonany benchmark pokazał, że znajdowanie liczb pierwszych mniejszych niż 65536, które programowi w C zabiera 0,5 sekundy, analogiczny program w INTERCALU rozwiązywał w 17 godzin.
Hello World
Klasyczny program „Hello, world!” w C wygląda tak:
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
zaś w INTERCALU da się go zapisać następująco:
DO ,1 <- #13
PLEASE DO ,1SUB#1 <- #234
DO ,1SUB#2 <- #112
DO ,1SUB#3 <- #112
DO ,1SUB#4 <- #0
DO ,1SUB#5 <- #64
DO ,1SUB#6 <- #194
DO ,1SUB#7 <- #48
PLEASE DO ,1SUB#8 <- #22
DO ,1SUB#9 <- #248
DO ,1SUB#10 <- #168
DO ,1SUB#11 <- #24
DO ,1SUB#12 <- #16
DO ,1SUB#13 <- #214
PLEASE READ OUT ,1
PLEASE GIVE UP
Linki zewnętrzne