INTERCAL

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 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 FROM bę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 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 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

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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.