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 przypomina asembler, lecz jego składnia jest tak skonstruowana, aby maksymalnie utrudnić pisanie programów i uczynić listingi jak najbardziej zagmatwanymi.
Charakterystyka
Cechy INTERCALA:
- Uprzejmość – część instrukcji musimy poprzedzić słowem kluczowym
PLEASE, gdyż 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 FROMbędąca skokiem z, a nie do etykiety. Pojawiła się w późniejszych wersjach języka i 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 " i ', co pogarsza czytelność źródeł.
- Brak jawnego mechanizmu wywoływania procedur. Dostępna jest wyłącznie instrukcja
NEXT, która wykonuje skok do etykiety i 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 STASHINGspowoduje ignorowanie instrukcjiSTASH, natomiastREINSTATE STASHINGz 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 lub zabawnych w jakiś inny sposób zdań. Ponadto autorzy zastosowali autorskie nazewnictwo znaków ASCII, np. apostrofy i cudzysłowy zwane są tam odpowiednio "iskrami" oraz "króliczymi uszkami".
Operatory
INTERCAL posiada kilka 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 istnieją 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ęć, można w nim rozwiązać każdy problem algorytmiczny, z jakim radzą sobie maszyny Turinga (czyli m.in. komputery). Rozwiązywanie pochłania jednak znacznie 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 można 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
- Eric Raymond: The INTERCAL Resources Page. [zarchiwizowane z tego adresu].
- Donald R. Woods, James M. Lyon: The INTERCAL Programming Language Reference Manual. [dostęp 2024-05-29].
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.