Egzotyczny język programowania jest język programowania wyobrazić jako test granicach stworzenia języków programowania, ćwiczeniem intelektualnym lub nawet żart , bez zamiaru stworzenia naprawdę użyteczny język. Takie języki są często hobby hakerów lub programistów . Przymiotnik „egzotyczny” odróżnia te języki od języków powszechnie używanych w przemyśle.
Łatwość użycia rzadko jest priorytetem dla tych języków, zwykle celem jest usunięcie lub zastąpienie funkcjonalności przy zachowaniu kompletnego języka Turing . Sprawiając, że czytanie takich programów jest szczególnie skomplikowane, twórcy takich języków, być może, czynią je komputerowym odpowiednikiem poezji nonsensu.
Pierwszym egzotycznym językiem był INTERCAL , stworzony w 1972 roku przez Jamesa Lyonsa i Dona Woodsa , z zamiarem stworzenia języka niepodobnego do wszystkiego, co znali.
Ponad dwadzieścia lat później, w 1993 roku, Urban Müller wynalazł Brainfuck , ośmiostopniowy język, a Chris Pressey stworzył Befunge . Te dwa języki należą do najpopularniejszych języków egzotycznych. Nic dziwnego, że oba są znacznie wzmocnione faktem, że były pierwszymi w swoim rodzaju, a jednocześnie były eleganckie.
Plandeki Turinga są językami pełnymi Turinga , co oznacza, że teoretycznie pozwalają na implementację dowolnej obliczalnej funkcji , ale są zaprojektowane w taki sposób, że nawet najbardziej podstawowe operacje są trudne do wykonania w dogodny sposób. Często używają niewielkiej liczby instrukcji, co sprawia, że programowanie jest akrobatyczne. Obejmuje to Brainfuck (osiem instrukcji bez operandów ), OISC (en) (jedno polecenie, trzy operandy) i Thue (jedno polecenie, dwa operandy, stworzone przez Johna Colagioia ).
Kompletność Turinga jest jednym z ulubionych tematów społeczności. Nie jest to oczywiste dla wszystkich języków, a demonstracje są często złożone. Nieustannie pojawiają się nowe języki, a udowodnienie ich kompletności według Turinga jest wyzwaniem.
Deterministyczny język programowania to język, w którym zawsze można przewidzieć, na podstawie aktualnego stanu programu, jaki będzie jego następny stan. Większość języków jest deterministyczna, podczas gdy języki niedeterministyczne, takie jak Java2K, często dają niewiarygodne wyniki, a tworzenie nawet trywialnych programów, które zapewniają wiarygodne wyniki, jest często monumentalnym zadaniem.
Język despotyczny to kompletny język Turinga, w którym polecenia pozwalają na wybór następnej instrukcji do wykonania spośród skończonego zestawu instrukcji. Remorse (in) , Whirl i prawdopodobnie INTERCAL są despotyczni.