Кіріспе

Маңызды қолдануға бағытталмаған бағдарламалау тілі. Эзотерикалық бағдарламалау тілі (кейде esolang деп қысқартылады) – компьютерлік бағдарламалау тілі дизайнының шектерін сынау, түсінік дәлелі ретінде, бағдарламалық өнер туындысы ретінде, басқа тілге (әсіресе функционалдық немесе процедуралық бағдарламалау тілдеріне) қатынас құралы ретінде немесе әзіл үшін жасалған бағдарламалау тілі. «Эзотерикалық» терминінің қолданылуы оларды жұмыс істейтін бағдарламашылар бағдарламалық жасақтама жазу үшін пайдаланатын тілдерден ажыратады. Көптеген эзолангтардың авторлары оларды кең таралған бағдарламалау үшін пайдалануды көздемейді, бірақ кейбір эзотерикалық мүмкіндіктер, мысалы, визуалды-пространдық синтаксис, өнер саласындағы практикалық қолданыстарға шабыттандырды. Мұндай тілдер көбінесе хакерлер мен хоббистер арасында танымал. Пайдаланудың қарапайымдылығы эзотерикалық бағдарламалау тілдерін жасаушылардың мақсаты емес; көбінесе олардың дизайны кері нәтиже береді. Олардың негізгі мақсаты – Тьюринг толық немесе тіпті есептеу класы белгісіз тілді сақтай отырып, дәстүрлі тіл мүмкіндіктерін жою немесе алмастыру.

Тарих

Эзотерикалық бағдарламалау тілінің ең алғашқы және әлі күнге дейін канондық үлгісі – 1972 жылы Дон Вудс пен Джеймс М. Лион жасаған INTERCAL тілі. Олардың мақсаты – оларға таныс кез келген бағдарламалау тілінен өзгеше бағдарламалау тілін жасау еді. Ол сол кездегі кең таралған бағдарламалау тілдерінің, мысалы, Fortran, COBOL және ассемблер тілінің элементтерін пародиялады. Көп жылдар бойы INTERCAL тек INTERCAL нұсқаулығының қағаз түрінде ғана қол жетімді болды. 1990 жылы Unix жүйесінде C тілінде іске асырылуы эзотерикалық компьютерлік тілдерді қасақана жобалауға қызығушылықты арттырды. 1993 жылы Вутэр ван Оортмерсен FALSE тілін жасады – бұл кодты түсініксіз, шатастыратын және оқуға қиын ету үшін жасалған синтаксисі бар, стекке бағытталған шағын бағдарламалау тілі. Оның компиляторының көлемі 1024 байтты құрайды. Бұл Урбан Мюллерді одан да кішкентай тіл, қазір танымал Brainfuck тілін жасауға шабыттандырды, ол тек сегіз символдан тұрады. Крис Прессинің Befunge тілімен бірге (FALSE сияқты, бірақ екі өлшемді нұсқау көрсеткішімен), Brainfuck қазір ең көп қолдау табатын эзотерикалық бағдарламалау тілдерінің бірі. Ол минималды Тьюрингтің «тарпитінің» канондық мысалдарын және қажетсіз жасырын тілдік мүмкіндіктерін ұсынады. Brainfuck Тьюринг машиналарының P" отбасымен байланысты.

Ортақ белгілері

Эзотерикалық бағдарламалау тілдері көптеген жағынан ерекшеленсе де, көптеген тілдерге тән ортақ белгілер бар, мысалы, пародия, минимализм және бағдарламалауды қиындату мақсаты. Көптеген эзотерикалық бағдарламалау тілдері, мысалы, brainfuck сияқты тілдер командалар ретінде бірнеше символдарды қолданады, бірақ тілдердің дәстүрлі бағдарламалау тілдері сияқты жол бойынша оқылуы да кездеседі.

Деректердің бірегей бейнелері

Әдеттегі императивті бағдарламалау тілдері деректерді айнымалыларда сақтауға мүмкіндік береді, бірақ эзотерикалық тілдер деректерді сақтау және қол жеткізудің басқаша әдістерін пайдалануы мүмкін. Brainfuck және Malbolge сияқты тілдер деректерді тек бір көрсеткіш арқылы оқуға рұқсат береді, оны деректерді оқу алдында қажетті жерге жылдыру қажет. Басқалары, мысалы Befunge және Shakespeare, деректерді сақтау үшін бір немесе бірнеше стектерді қолданады, бұл кері польша нотациясына ұқсас орындалу әдісіне алып келеді. Соңында, сандық өрнектеудің баламалы формаларын зерттейтін тілдер де бар: Brainfuck түрі Boolfuck тек жеке биттермен операциялар жасауға мүмкіндік береді, ал Malbolge және INTERCAL түрі TriINTERCAL биттерді толығымен 3-тік санау жүйесімен ауыстырады.

Бірегей нұсқаулық бейнелері

Эзотерикалық тілдер бағдарламалық нұсқауларды бейнелеудің ерекше жолдарымен де көзге түседі. Мысалы, Befunge және Piet сияқты кейбір тілдер бағдарламаларды екі немесе одан көп өлшемде көрсетеді, бағдарламаны басқару бағдарлама бойынша әртүрлі бағыттарда қозғалады. Бұл бағдарламаның әдеттегі тілдердегідей нұсқаулар тізбегі ретінде емес, олардың бірінен соң бірі орындалуынан өзгеше. Басқа тілдер нұсқауларды ерекше формада өзгертеді, көбінесе адамдар оқи алатын, бірақ негізгі нұсқаулардың мәнінен өзгеше мағына беретін түрінде. Шекспир бұл мақсатқа барлық бағдарламаларды Шекспир пьесаларына ұқсату арқылы жетеді. Ал Chef тілі барлық бағдарламаларды рецепттер түрінде жасау арқылы соған қол жеткізеді.

Оқу мен жазу қиын

Көптеген эзотерикалық бағдарламалау тілдері кодты тым жасырын етіп шығару үшін жасалған, оны оқу және жазу қиынға соғады. Мұның себебі бағдарламашыларға қызықты жұмбақ немесе сынақ ұсыну болуы мүмкін: мысалы, Malbolge тілі әдейі қиын болу үшін жасалған, сондықтан оның өзін-өзі өзгертетін коды және өте түсініксіз операциялары бар. Дегенмен, пародиенің нысаны әрқашан дамыған бағдарламалау тілі бола бермейді. Шекспир тілін Шекспир пьесаларының құрылымын пародизациялау ретінде қарастыруға болады. Ал Ook! тілі – Brainfuck тілінің пародиасы, онда Brainfuck тілінің сегіз командасы орангутангтың әртүрлі дыбыстарымен, мысалы "Ook. Ook?" сияқты дыбыстармен ауыстырылған.

Бинарлық ламбдалық есептеу

Бинарлық ламбдалық есептеу алгоритмдік ақпарат теориясы тұрғысынан ең минималды құралдармен ең тығыз кодты жасау үшін жобаланған, оның ішінде 29 байттық өзін-өзі интерпретатор, 21 байттық жай сандар сүзуі және 112 байттық Brainfuck интерпретаторы бар.

Мидың егісі

Brainfuck өте минималистік болу үшін жасалған және программаларында тек сегіз түрлі таңба ғана болатын, түсініксіз кодқа алып келеді. Келесі бағдарлама "Сәлем, әлем! " дегенді шығарады: ++++++++++[>+++++++>++++++++++>+++<<<]>.>+.++++++++++.>++.<<+++++++++++++++.>.+++..>+. Барлық басқа таңбалар назарға алынбайды.

Тауық

Chicken тек үш таңбадан тұрады: "chicken" сөзі, " " (кеңдік таңбасы) және жаңа жол таңбасы. Компилятор бір жолдағы "chicken" санының мөлшерін опкод нұсқауы ретінде түсіндіреді және оны стектегі деректерді өңдеу үшін пайдаланады. Қарапайым Chicken бағдарламасында ондаған жолдар болуы мүмкін, онда тек "chicken" сөзі көптеген рет қайталанады. Chicken тілін Торбьёрн Сёдерштедт ойлап тапқан, ал тілдің идеясы ғылыми диссертацияның пародиязынан туындаған.

Шеф-аспазы

Шеф – Дэвид Морган Мар жасаған, бағдарламаларды тамақ дайындау рецепттеріне ұқсату мақсатында құрылған стекке бағытталған бағдарламалау тілі. Бағдарламалар атаудан, айнымалылар мен олардың мәндерінің тізімінен және стекпен жұмыс істеу нұсқауларынан тұрады. Бір әзіл-қалжың дизайнының қағидасы бойынша, "бағдарлама рецепттері жарамды нәтижелерді ғана емес, сонымен қатар дайындалуы оңай және дәмді болуы керек" делінеді, ал Морган Мар "Сәлем, әлем!" бағдарламасы "101 жұмыртқа" мен "111 стақан май" арқылы жасалса, "бір адамға артық азық-түлік" шығады деп атап көрсетеді.

FRACTRAN

FRACTRAN бағдарламасы – оң бөлшектердің ретті тізімі және бастапқы оң бүтін сан кірісі болып табылады. Бағдарламаны бастапқы санды тізімдегі, оның нәтижесі бүтін сан болатын бірінші бөлшекке көбейту арқылы іске қосады. Содан кейін бүтін санның орнына алынған нәтиже қойылады және осы ереже қайталанады. Егер тізімдегі ешбір бөлшекті көбейткенде бүтін сан шықпаса, бағдарлама тоқтатылады. FRACTRAN математик Джон Конвеймен ойлап табылды.

GolfScript (ойынның мәтіні)

GolfScript бағдарламалары, кодтық гольф үшін жасалған тіл, кездескен әрбір элементті стекке жібереді, айнымалылар код блогын мән ретінде ұсынса, онда сол код орындалады.

INTERCAL

INTERCAL, "Айтылмалы аббревиатурасы жоқ компилятор тілі" деген сөздердің қысқартылған түрі, 1972 жылы сол кездегі бағдарламалау тілдерінің кейбір ерекшеліктерін пародизациялау мақсатымен жасалған. Оның eBay сияқты веб-сайттарға жасалған сайттар аралық скрипттеу (XSS) шабуылдарында қолданылуына себебі, оның сайттар аралық скрипттеуді анықтау сүзгілерінен қашу қабілеті болды.

Мальболге

Malbolge (тозақтың 8-ші шеңберінің атымен аталған) ең қиын және эзотерикалық бағдарламалау тілі болу үшін жасалған. Басқа мүмкіндіктермен қатар, код өзін-өзі өзгертеді және нұсқаудың әсері жадтағы орнына байланысты.

Пиет

Piet - Дэвид Морган Мар жасаған тіл, оның бағдарламалары абстрактілі суреттерге ұқсайтын биттік карталар. Орындалуы "нұсқауыш" арқылы басқарылады, ол сурет ішінде бір үздіріссіз түсті аймақтан екіншісіне қозғалады. Нұсқауыш аймақтан шыққанда процедуралар орындалады. Мінез-құлқы анықталған 20 түс бар: 18 "түсті" түс, олар 6 қадамдық реңк циклімен және 3 қадамдық жарықтық циклімен реттелген; сондай-ақ, реттелмеген қара және ақ түстер. "Түсті" түстен шығып, басқа түске өткенде орындалатын процедура реңк пен жарықтықтың өзгеру қадамдарының санына байланысты анықталады. Қара түске өтуге болмайды; егер нұсқауыш қара түске өтуге тырысса, келесі блокты таңдау ережелері өзгереді. Егер барлық мүмкін ережелер қолданылса, бағдарлама тоқтатылады. Сурет шекарасының сыртындағы аймақтар да қара түс ретінде қарастырылады. Ақ түс операциялар жасамайды, бірақ нұсқауыштың "өтіп кетуіне" мүмкіндік береді. 20 түстен басқа түстердің мінез-құлқы компиляторға немесе интерпретаторға қалдырылады. Piet голланд суретшісі Пит Мондрианның құрметіне аталған. Алғашқы ниеттегі Mondrian атауы ашық дереккөзді статистикалық деректерді визуализациялау жүйесімен қолданылған еді.

Шекспир

Шекспир бағдарламаларды Шекспир пьесаларына ұқсатып жасауға арналған. Мысалы, келесі жазба бағдарламада GOTO түріндегі команда арқылы қолжетімді болатын нүктені көрсетеді:

I акт: Гамлеттің айыптаулары мен мақтаулары.

Қисса айтушы

Storyteller – бағдарламаларды көркем, эмоционалды әңгіме түрінде көрсетуге арналған компьютерлік бағдарламалау тілі.

Аңқақты

Unlambda — SKI есептеуіне негізделген, бірақ бірінші дәрежедегі жалғастырулармен және императивті I/O (кіріс әдетте жалғастыруларды қолдануды қажет етеді) біріктірілген минималистік функционалдық бағдарламалау тілі.

Ақ өрістер

Ақ кеңістік тек ақ кеңістік символдарын (бос орын, табулация және жолдың басына қайту) ғана пайдаланады, қалған барлық символдарды назарға алмайды, оларды түсініктемелер үшін қолдануға болады. Бұл көптеген дәстүрлі тілдерден өзгеше, себебі олар әртүрлі ақ кеңістік символдары арасында айырма жасамайды, табулация мен бос орынды бірдей қарастырады. Бұл сондай-ақ, C сияқты тілдердегі бағдарламалардың бастапқы кодында Ақ кеңістік бағдарламаларын жасыруға мүмкіндік береді.

Мәдени контекст

Эзолангтардың мәдени контекстін Джефф Кокс зерттеді, ол эзолангтардың "басқару мен бақылаудан мәдени өрнекке және наразылыққа назар аударатынын" жазады, эзолангтарды кодтық өнер мен кодтық поэзияға, мысалы Mez Breeze-дің mezangelle-іне ұқсас деп санайды, және осы пікірді саланың басқа да өкілдері бөліседі. Дэниел Темкин Brainfuck-ті "адамдық өрнек пен құрастыру кодын бөліп тұратын шекараны жеңілдетуден бас тарту арқылы, бізді логиканың абсурдты саяхатына жетелеу" деп сипаттайды, соның арқылы адам ойлауы мен компьютерлік логика арасындағы туатын қайшылықты ашады. Ол эзолангтарда бағдарламалауды Флюкс қозғалысының оқиғалық партитураларымен байланыстырады, онда кодтағы логиканың ретсіз ережелерін орындау тілдің тұжырымдамасын аңғартпақ.