Корисник:Isidora99/песак

С Википедије, слободне енциклопедије

Езотерични програмски језици (краће енгл. esolang ) су програмски језици дизајнирани да тестирају границе дизајна програмских језика. Користи се као софтверска уметност, као хакерски интерфејс за друге језике (посебно функционалне или процедуралне програмске језике) или као шала. Реч езотерични прави разлику између ових програмских језика и програмских језика који користе програмери за писање софтвера. Најчешће, ови програмски језици нису намењени за широку употребу, иако неке карактеристике имају практичну примену у уметности. Ови језици су често популарни међу хакерима и програмерима којима је програмирање хоби. Употребљивост је ретко циљ ових програмских језика, често је сасвим супротно. Њихов циљ је да уклоне или замене стандардизоване карактеристике језика док задржавају карактеристику да су Тјуринг потпуни.

Историја[уреди | уреди извор]

Најстарији езотерични програмски језик је INTERCAL[1]. Њега су 1972. године дизајнирали Don Woods и James M. Lyon са намером да исмеју тадашње програске језике као што су Fortran, COBOL и асемблерски језици. Годинама је INTERCAL био представљан само копијама приручника INTERCAL-а. Имплементација у C-у под Unix-ом је 1990. године оживела овај језик што је подстакло талас интересовања за езотеричне програмске језике. Године 1993, Wouter van Oortmerssen је креирао FALSE, мали сложени програмски језик, са синтаксом дизајнираном да учини код збуњујућим и нечитљивим. Он је имао компајлер од само 1024 бајтова.[2] Ово је инспирисало Urban Müller-а да креира још мањи језик, сада озлоглашени Brainfuck, који се састоји од само осам препознатљивих карактера. Упоредо са Chris Pressey-овим Befunge-ом (као FALSE, али са дводимензионалним показивачем инструкција), Brainfuck је сада један од најбоље подржаних езотерничних програмских језика. Ово су канонски примери минималног Turing tarpits-а и непотребно помућених језичких карактеристика. Brainfuck је повезан са P′′ фамилијом Тјуринг машина.

Терминологија езотеричних програмских језика[уреди | уреди извор]

Turing tarpit[уреди | уреди извор]

Тјуринг тарпит (енгл. Turing tarpit) су Тјуринг потпуни програмски језици који су непрактични зато што су минималистички, тј. имају веома ограничен број инструкција.

Кодирање са стањима[уреди | уреди извор]

Кодирање са стањима (енгл. Stateful encoding) је метод кодирања где сваки подстринг кода има улогу у:

  1. локацији следеће инструкције у листи
  2. примењивање те инструкције да би се променило стање програма

Једна инструкција увек има две фазе: узимање операције и извршавање те операције. Листе операција могу бити :

  1. статичне - као што су reMorse или THRAT
  2. динамичне - попут reMorse4ever

Пример статичне операције:

Select Next Operation in list
Perform Operation

Парадигме програмирања[уреди | уреди извор]

Програмска парадигма се може сместити у више категорија као што су:

  1. императивни језици (нпр. Brainfuck) где инструкције одређују како се мењају подаци
  2. функционални језици (нпр. Unlambda) где се примењују само функције, тако што једна функција покреће другу
  3. трансформациони језици (енгл. rewriting languages)(нпр. Thue) где се трансформационе функције постављају на почетно стање

Funge[уреди | уреди извор]

Funge је езотерични програмски језик који креира своје програме као метричке просторе са координатним системом (углавном, али не нужно, Декартовим координатним системом). Програм извршава инструкције које се налазе у простору тако што помера показивач (вектор положаја који иницира тренутно покренуту инструкцију) по том простору. Различите инструкције одређују правац у ком ће се кретати показивач, и самим тим низ инструкција које ће се извршити. Тренутни званични стандард који одређује понашање ових програмских језика је Funge-98 спецификација. Ова спецификација представља генерализацију семантике језика Befunge, који има дводимензионалну торусну топологију. Језици који се држе ових стандарда, као што су Unefunge (једнодимензоналан) и Trefunge (тродимензионлан), се некада називају funges. Док се "даљи сродници" са разликама у значајнијим аспектима, попут Wierd-а, називају fungeoids.

Компјутер са једном инструкцијом[уреди | уреди извор]

Компјутер са једном инструкцијом (енгл. A one instruction set computer) је машина која подржава само једну инструкцију.

Недетерминистички језици[уреди | уреди извор]

За детерминистичне језике је карактеристично да ако је дато тренутно стање програма, следећа фаза се може увек предвидети. Ово не важи за недетерминистичке језике. Највећи део језика је детерминистички, али неки језици попут Befunge-а, подржавају уграђену инструкцију за насумичност. Штавише, језици попут Java2k имају само насумичне инструкције. Стога је добијање поузданог излаза чак и за тривијалне програме скоро немогућ задатак. Недетерминистички програмски језици се могу користити за претраживање великих простора, попут граматике, где је потпуна претрага непрактична. Генератори насумичног текста попут the Dada Engine и rmu су примери овог типа недетерминистичких језика. Недетерминистички алгоритми се користе у истрази хиперизрачунљивости.

Примери[уреди | уреди извор]

У наставку се налазе примери езотеричних програмских језика:

Arnoldc[уреди | уреди извор]

Арнолд Шварценегер

Arnoldc је езотерични програмски језик базиран на цитатима Арнолда Шварценегера. У наставку се налази синтакса за програм који исписује "Hello, World!".

IT'S SHOWTIME
TALK TO THE HAND "Hello, World!"
YOU HAVE BEEN TERMINATED

Неке од команди у овом програмском језику су:

False - I LIED

True - NO PROBLEMO

If - BECAUSE I'M GOING TO SAY PLEASE

ModuloOperator - I LET HIM GO

EqualTo - YOU ARE NOT YOU YOU ARE ME

Or - CONSIDER THAT A DIVORCE

And - KNOCK KNOCK

DeclareMethod - LISTEN TO ME VERY CAREFULLY

MethodArguments - I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE

Return - I'LL BE BACK

EndMethodDeclaration - HASTA LA VISTA, BABY

CallMethod - DO IT NOW

AssignVariableFromMethodCall - GET YOUR ASS TO MARS

SetInitialValue - YOU SET US UP

BeginMain - IT'S SHOWTIME

EndMain - YOU HAVE BEEN TERMINATED

Print - TALK TO THE HAND

ReadInteger - I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY

AssignVariable - GET TO THE CHOPPER

SetValue - HERE IS MY INVITATION

EndAssignVariable - ENOUGH TALK

ParseError - WHAT THE FUCK DID I DO WRONG

АsciiDots[уреди | уреди извор]

АsciiDots је езотерични програмски језик који је заснован на аски уметности. Испод се налази пример "code-golf" програма.

/#$<.
*-[+]
\#1/

Befunge[уреди | уреди извор]

Befunge је програм који дозвољава да се показивач инструкција пребаци у више димензије кроз код. На пример, следећи програм приказује "Hello World" избацајући знакове наслагане у обрнутом редоследу и штампајући их у петљи која циркулише у смеру казаљке на сату кроз инструкције [>], [:], [v], [_], [,], и [^].

 "dlroW olleH">:v
              ^,_@

Binary lambda calculus[уреди | уреди извор]

Бинарни ламбда рачун је дизајниран из перспективе алгоритамске информационе теорије која дозвољава најгушћи могући код са најмањим могућим средствима. Програмски језик између осталог укључује 29 бајтова интерпретатора и 112 бајтова Brainfuck интерпретатора.

Brainfuck[уреди | уреди извор]

Brainfuck је екстремно минимлистички језик који се састоји од 8 карактера и код је обично нечитљив. Овај језик захтева посебан компајлер или интерпретатор. Следећи пример исписује "Hello World":

++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
 ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Chef[уреди | уреди извор]

Chef је стек-орјентисан програмски језик који је David Morgan-Mar дизајнирао да прави програме који изгледају као кухињски рецепти.[3] Програм се састоји од наслова, листе променљивих и њихових вредности података и од листе упутстава са манипулационим инструкцијама.[4] Принцип шаљивог дизајна се састоји у томе да "програмски рецепти не би требало да генеришу само валидан излаз већ да буду и лаки за припремање и укусни". David Morgan-Mar, творац овог програмског језика, напомиње да би један пример Hello World program програма са "101 јајетом" и "111 чаша уља" произвео "много хране за једну особу." [4][5]

FALSE[уреди | уреди извор]

FALSE је стек-орјентисан програмски језик (енг. Stack-oriented programming) чије се команде и променљиве састоје од једног карактера.[6] На пример 3 + 1 се може написати на следећи начин (λ x → x + 1)(3).

3[1+]!

Fim++[уреди | уреди извор]

Fim++ је објектно-орјентисан програмски језик који је инспирисан телевизијским програмом "My Little Pony".[7] FiM++ програми се пишу у стилу "friedship reports" .Следећи пример исписује "Hello world":

Dear Princess Celestia: Hello World!

Today I learned how to say Hello World!
I said "Hello World!".
That's all about how to say Hello World.

Your faithful student, Twilight Sparkle.

FRACTRAN[уреди | уреди извор]

Програм FRACTRAN је уређена листа позитивних разломака са иницијалним позитивним целобројним улазом n. Програм се покреће множењем броја n са првим разломком f на листи за који је nf цео број. Број n је тада замењен са nf и правило се понавља. Ако ниједан разломак у листи не производи цео број када се помножи са n, онда се програм заустави. FRACTRAN је креирао математичар John Conway .

.Gertrude[уреди | уреди извор]

.Gertrude[8] је осмислио Gerson Kurz. Програми написани у овом језику имају елементе поезије Gertrude Stein, по којој је овај програмски језик назван.

GolfScript[уреди | уреди извор]

GolfScript се састоји од листа које се смештају у стек, а променљиве су представљене помоћу блокова кода.

Grass[уреди | уреди извор]

Grass је функционалан програмски језик који користи једино карактере "W", "w", и "v". Према томе, програми у Grass-у изгледају као трава. Grass има формалне спецификације засноване на неутврђеном ламбда рачуну и SECD машини. Grass не треба мешати са GRASS-ом, другачијим програмским језиком.

INTERCAL[уреди | уреди извор]

INTERCAL, скраћено од "Compiler Language With No Pronounceable Acronym", је настао 1972. године као пародија са намером да сатирично исмеје разне програмске језике тадашњег времена.[9]

Jsfuck[уреди | уреди извор]

Jsfuck је езотерични ЈаваСкрипт, где се код састоји од 6 карактера: [, ], (, ), !, +. За разлику од Brainfuck-a, Jsfuck је валидан ЈаваСкрипт код што значи да се сви програми који се напишу у овом језику могу покренути у било ком интернет претраживачу који интерпретира ЈаваСкрипт.[10]

LOLCODE[уреди | уреди извор]

LOLCODE је често критикован што није толико езотеричан, већ више личи на обичан процедурални језик са необичним речником. Следећи пример је "Hello,World!"

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

[11]

Malbolge[уреди | уреди извор]

Malbolge (осми круг пакла) је дизајниран да буде најтежи и најезотеричнији програмски језик. Између осталог, код се сам модификује по дизајну, а дејство инструкције зависи од њеног места у меморији.

Modiscript[уреди | уреди извор]

Modiscript[12] је езотеричан програмски језик који се састоји од цитата индијског министра Narendra Modi. Овај језик садржи много његових идеологија као на пример цитат "No important rule" који је део његове кампање "Make in India". Следећи код исписује "Mandir Wahin Banayenge":

mitrooon
UP "BJP governed state hai"
SP "opposition me hai"
agar ye sach hai
	bhaiyo aur behno "Mandir wahin banayenge"
nahi toh
	bhaiyo aur behno "Abhi decision nahi liya gaya hai"
achhe din aa gaye

Piet[уреди | уреди извор]

Piet program that prints 'Piet'
A "Hello World" program in Piet

Piet је језик који је дизајнирао David Morgan-Mar, чији су програми мапе битова које изгледају као апстрактна уметност.[13] Састављањем мапа руководи показивач који се креће око слике, од једног континуалног обојеног региона до следећег. Процедуре се преносе када показивач напушта регион. Постоји 20 боја за чије понашање је одређено: 18 "шарених" боја, које се наручују циклусом нијансе од 6 корака и циклусом осветљења од 3 корака, и црна и бела које нису наручене. Када се напушта "шарена" боја и улази у нову боју, извршени поступак је одређен бројем корака промене у нијанси и осветљености. У црно поље се не може ући. Када показивач покуша да уђе у црну регију правила бирања следећег поља се мењају. Ако су сва могућа правила испробана, програм се завршава. Регије ван граница слике такође се третирају као црне. Бела не врши операције, али омогућава показивачу да "пролази" кроз њу. Понашање осталих боја ван ових 20 специфичних је препуштено компајлеру или интерпретатору. Променљиве се чувају у меморији као означени цели бројеви у једном стеку. Већина процедура се односи на операције на том стеку, друге се односе на улаз/излаз и на правила којима се показивач помера. Piet је добио име по холандском сликару Питу Мондријану.[14] Првобитно име које је било намењено, Mondrian, је већ било заузето.

Pikachu[уреди | уреди извор]

Pikachu

Pikachu је програмски језик развијен од стране Nilabhro Datta, чији програм изгледа као дијалекат пикачуа. Његова сврха је да може бити коришћен од стране било ког пикачуа.[15] У том циљу, Pikachu користи само 3 валидна синтаксна елемента- "pi", "pika" и "pikachu".[16][15]

Rockstar[уреди | уреди извор]

Rockstar је језик чији се код састоји од речи балада или хард рок песама из 1980-их година. Овај језик је динамичан и Тјуринг потпун. Следећи пример множи вредност "your heart" са "the whole" и чува је у "my hands".

  • "your heart", "the whole" и "my hand" су варијабле
  • of се користи за множење
  • put/into комбинација се користи при додели
Put the whole of your heart into my hands

Shakespeare[уреди | уреди извор]

Shakespeare је дизајниран да прави програме који личе на Шекспирове комаде. На пример, следећа команда декларише тачку у програму која може да се достигне путем команде GOTO-типа:

                                                 Акт 1: Хамлетова вређања и ласкање.

Unlambda[уреди | уреди извор]

Unlambda је минималистички функционални програмски језик. Већина програма се састоји искључиво од карактера "s", "k", и "`".

Whitespace[уреди | уреди извор]

Whitespace користи само белине (space, tab, return), при чему игнорише све остале карактере. Овај језик представаља супротност у односу на традиционалне програмске језике који не разликују белине, што омогућава да се ови програми крију у кодовима других језика као што је C.

Пример функционалних езотеричних програмских језика[уреди | уреди извор]

~ath[уреди | уреди извор]

~ath је програмски језик који користе "Earthlings" и "Alternians" из веб стрипа "Homestuck". Име је добио на основу шале која представља "tilde ath" као "til death". Иако му је синтакса прилично једноставна, заправо је компликовано радити са њим. Програм се може компајлирати само ако садржи бесконачне петље. Овај језик такође разликује боју текста којим је написан програм и прихвата необичне карактере.

Културни контекст есоланга[уреди | уреди извор]

Културни контекст есоланга су проучавали људи попут Geoff Cox-a, који наводи да езоланг "скреће пажњу са команди и контроле на културни израз и одбијање".[17] Он види сличност између езоланга и уметности кода и поезије кода, попут mezangelle Mez Breeze-а. Daniel Temkin описује brainfuck као "одбијање да ублажи границу између људског израза и асемблерског кода чиме нас води на смешно путовање логике".[18] Он тиме открива нераздвојиво неслагање између људског размишљања и компјутерске логике и повезује програмирање у склопу езоланга са резултатом извођења догађаја попут Fluxus-а, где игра изван правила логике чини тачку гледишта јасноће језика.[19]

Референце[уреди | уреди извор]

  1. ^ Matthew FullerSoftware Studies, MIT Press, 2008
  2. ^ „Interview with Wouter van Oortmerssen”. esoteric.codes. 1. 7. 2015. Приступљено 1. 12. 2015. 
  3. ^ Cozens, Simon (2005). Advanced Perl programming. O'Reilly Media. стр. 269. ISBN 978-0-596-00456-9. „A final Acme curiosity, and one of my favourites, is Acme: :Chef, an implementation of David Morgan-Mar's Chef programming language. In Chef, programs are expressed in the form of recipes: ... 
  4. ^ а б Morgan-Mar, David (2011-03-24). „Chef”. DM's Esoteric Programming Languages. Self-published. Приступљено 2014-06-28. 
  5. ^ Morgan-Mar, David (2014-06-28). „Chef Sample Program: Hello World Souffle”. DM's Esoteric Programming Languages. Self-published. Приступљено 2014-06-28. 
  6. ^ van Oortmerssen, Wouter. „The FALSE Programming Language”. Self-published. Приступљено 11. 2. 2016. 
  7. ^ Sethisto. „Editorial: FiM++, A Pony Programming Language”. www.equestriadaily.com. Приступљено 2018-01-07. 
  8. ^ https://esolangs.org/wiki/.Gertrude
  9. ^ Woods, Donald R.; Lyon, James M. (1973), The INTERCAL Programming Language Reference Manual, Muppetlabs.com, Архивирано из оригинала 2009-04-24. г., Приступљено 2009-04-24 
  10. ^ JSFuck
  11. ^ „LOLCODE#Criticism”. Esolangs.org. Приступљено 30. 11. 2015. „LOLCODE is often criticized for not being Esoteric enough. By design, LOLCODE is actually a normal procedural language behind its lulzy syntax. This is a stark contrast from "True" Esolangs like Befunge, which features a two-dimensional, almost game board-like syntax. For this reason, LOLCODE is technically categorized as a Weirdlang. 
  12. ^ „VPanjeta/ModiScript”. GitHub (на језику: енглески). Приступљено 2018-04-18. 
  13. ^ Morgan-Mar, David (25. 1. 2008). „Piet programming language”. Приступљено 18. 5. 2013. 
  14. ^ Cox 2013, стр. 6
  15. ^ а б „Introducing The Pikachu Programming Language – A Programming Language Made For Pikachus”. 
  16. ^ „Pikachu Programming Language - Syntax Rules”. Trove 42 (на језику: енглески). 2017-08-21. Приступљено 2017-08-22. 
  17. ^ Cox 2013, стр. 5
  18. ^ Temkin, Daniel (15. 1. 2014). „Glitch && Human/Computer Interaction”. NOOART: The Journal of Objectless Art (1). 
  19. ^ Temkin, Daniel. „brainfuck”. Media-N Journal (Spring 2013). Приступљено 2014-05-06. 

Види још[уреди | уреди извор]

Спољашње везе[уреди | уреди извор]