Esoteerilised programmeerimiskeeled

Esoteeriline programmeerimiskeel (inglise keeles Esoteric programing language või Esolang) on programmeerimiskeel, mis pole mõeldud praktiliseks kasutamiseks. Sellised keeled on näide arvutihuumorist. Esoteerilised keeled on loodud lõbu pärast, sageli parodeerivad need "päris" või on "tõsiste" programmeerimiskontseptsioonide absurdsed kehastused. Mõned esoteerilised keeled on tahtlikult piiratud (nt HQ9+), teised on universaalsed ja nad on Turing-täielikud (inglise keeles Turing-complete). Iga esoteerilise keele ühine omadus on see, et programmi tekst on arusaadav ainult "valgustatutele" või üldse arusaamatu, sest "töötava" ja "mõistetava" programmi koostamiseks on vaja kirjutada algoritm standardiseeritud laialdaselt kasutatavas programmeerimiskeeles. Üleüldiselt esoteerilised programmeerimiskeeled on kasutud, kuid mõni neist võib kasutada programmeerimiskoolitusena või suurepärase lõbustusmeetodina. Esoteerilised keeled on sageli programmeerimisvõistlustel lubatud. Turingi täielikkus (inglise keeles Turing-complete) tähendab masina jõudu (ehk arvuti), mis suudab piisava ajaga, mäluga ja koos vajalike juhistega lahendada mis tahes arvutusprobleemi, olenemata sellest, kui keeruline see on. Seda terminit kasutatakse tavaliselt tänapäevaste programmeerimiskeelte kirjeldamiseks, kuna enamik neist on Turingi täielikud (C++, Python, JavaScript jne). Kui keel suudab lahendada mis tahes konkreetse probleemi, isegi kui see lahendab looja probleemi, on keel ikkagi väärtuslik. Näiteks esoteeriline keel Thue (nimetatud Norra matemaatiku Axel Thue järgi) – loodud Chomsky hierarhias nulltüübi demonstreerimiseks. Need on loodud selleks, et muuta kood asjatundmatute jaoks võimalikult loetamatuks ja raskendada koodi kirjutamist. "Musta kasti" kõige silmatorkavam omadus on hägusus. See tähendab konkreetse koodilõigu tegeliku väärtuse tahtlik varjamine. Need keeled võivad ise olla ebamugavad ja mittetoimivad, kuid need on ümberlükkamatu tõend selle kohta, et kontseptsioonil on õigus eksisteerida. Sellised keeled hõlmavad näiteks Funge keeleperekonda (nt Befunge, Brainfuck, Malbolge), mis kasutab programmide mitmemõõtmelisi esitusi. Ilma hääldatava akronüümita kompilaatorikeel ehk INTERCAL on programmeerimiskeel, mille töötasid välja 1972. aastal Princetoni üliõpilased Don Woods ja James Lyon. Erinevalt teistest omaaegsetest arvutikeeltest see keel loodi paroodiana, mis sisaldas palju tarbetuid ja segadusse ajavaid elemente. Eesmärk on selle aja tarkvara disaini konventsioonide üle nalja heita. Isegi nimi INTERCAL on paroodia, kuna keele tegelik nimi ei vasta kuidagi akronüümi tähtedele. Keeledokumentatsioon on täis epigraafe filmist "Alice Imedemaal" ja labaseid kommentaare. Veakoode pole võimalik ilma teatmeraamatuta dešifreerida. Näiteks viga E127 - "Ilma võluvitsata on täiesti kasutu ütlemine" - vihjab, et standardne teek pole ühendatud. E252: "Ma unustasin, mida tahtsin öelda" - mälu ületäitumisel sisend- ja väljundtoimingute ajal. Samuti esineb INTERCALile ainulaadseid veakoode – näiteks E079: "Programmeerija pole piisavalt viisakas." Või E099: "Programmeerija on liiga viisakas." Mõlemad ilmuvad siis, kui koodis on liiga palju või liiga vähe PLEASE-käsku. Igale INTERCALi käsule saab määrata täitmise tõenäosuse ja mõned avaldused mis blokeerivad teiste käskude täitmise või keelavad muutujate muutmise. "Hello World" INTERCALi keeles: 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 PLEASE DO ,1 SUB #7 <- #48 DO ,1 SUB #8 <- #26 DO ,1 SUB #9 <- #244 PLEASE 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 1993. aastal loodud False'i keel käivitas massilise huvilaine esolangi vastu. Kui Wouter van Ortmerssen lõi False'i, siis tema eesmärgiks oli teha kõige keerulisema süntaksiga, kompilaatoriga võimsaim keel, mis saaks kergesti hägustada inimesi ja mille maht on 1 kilobait. False on üsna praktiline esolang, mida saab kasutada rakendusprobleemide lahendamiseks. Kapoti all temal on kõik põhilised aritmeetilised ja loogilised toimingud. Muutujaid tähistatakse ühe väikese ladina tähega, if konstruktsioon kirjutatakse küsimärgiga (?), while tsükkel - #. Näiteprogramm, mis prindib välja algarvud vahemikus 0–100: { writes all prime numbers between 0 and 100 } 99 9[1-$][$@$@$@$@/*=[1-$$[%1-$@]?0[$.' ,]?]?]# Brainfucki looja Urban Müller sai inspiratsiooni False'i esolangist. Ta tegi keele segasemaks ja väga tillukese kompilaatoriga. Mõned Brainfucki kompilaatorid on väiksemad kui 200 baiti. Keeles on kokku kaheksa käsku, millest igaüks on tähistatud ühe sümboliga:<,>, +, -, [,] ja ,.. Brainfucki programmi lähtekood koosneb nende kaheksa märgi jadast ilma eraldajate ja taandeta. Inimeste jaoks tavapärasel kujul tinglikke operaatoreid, korrutamis- ja jagamistehteid keeles ei ole. "Hello World" Brainfucki keeles: +++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++.+++++++++++++++++ ++++++++++++.+++++++..+++.------------------- --------------------------------------------- ---------------.+++++++++++++++++++++++++++++ ++++++++++++++++++++++++++.++++++++++++++++++ ++++++.+++.------.--------.------------------ --------------------------------------------- ----.-----------------------. See esolang maskeerib koodi Shakespeare'i näidenditeks. Programmi esimene lõik on alati epigraaf. Tähemärkide loendit kasutatakse pinu arvu deklareerimiseks ja kangelaste fraasid on I/O operatsioonid. Kui Shakespeare’i tegelased esitavad küsimusi, siis lisatakse tingimuslik operaator. Programmi üksikuid plokke nimetatakse aktideks (vaatusteks), mis on jagatud väiksemateks Rooma numbritega nummerdatud stseenideks. "Hello World" Shakespeare'i keeles: Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Hamlet, the flatterer of Andersen Insulting A/S. Act I: Hamlet's insults and flattery. Scene I: The insulting of Romeo. [Enter Hamlet and Romeo] Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind! You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind! You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind. Speak your mind! [Exit Romeo] Scene II: The praising of Juliet. [Enter Juliet] Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! [Exit Juliet] Scene III: The praising of Ophelia. [Enter Ophelia] Hamlet: Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind! Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind! [Exeunt Ophelia and Hamlet] Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation. [Enter Romeo and Juliet] Romeo: Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind! Juliet: Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind! [Exit Romeo] Scene II: Juliet and Ophelia's conversation. [Enter Ophelia] Juliet: Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind! Ophelia: Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind! [Exeunt] Piet on programmeerimiskeel, milles programmid näevad välja nagu abstraktsed maalid. Keel on nime saanud Piet Mondriani järgi, kes oli geomeetrilise abstraktse kunsti valdkonna teerajaja. Pietis kasutatakse teksti asemel mitmevärvilisi pilte. Pietil on 20 eri tooni ja heledusega värviplokki. https://web.archive.org/web/20220105140216/https://foxford.ru/wiki/informatika/ekzoticheskie-yazyki-programmirovaniya, Экзотические языки программирования https://academy.binance.com/en/glossary/turing-complete, Turing Complete https://habr.com/ru/company/spbifmo/blog/344680/, 5-минутный гид по эзотерическим языкам программирования: попробуем их классифицировать, itmo, 14. detsember 2014 http://www.catb.org/~esr/intercal/, The INTERCAL Resources Page, 11. märts 2021 https://strlen.com/false-language/, The FALSE Programming Language, Wouter van Ortmerssen https://www.muppetlabs.com/~breadbox/bf/, The Brainfuck Programming Language, Brian Raiter https://web.archive.org/web/20220105143452/https://valencia.unm.edu/campus-resources/R2S2/pdfs/introduction-to-shakespeare-programming-language.pdf, Shakespeare Programming Language, New Mexico Tech, 29. april 2021 https://www.dangermouse.net/esoteric/piet.html, Piet, David Morgan-Mar, 27. september 2018 Esolang – esoteeriliste programmeerimiskeelte teemaline viki