et esoterisk programmeringssprog er et programmeringssprog designet til at udfordre normerne for sprogdesign. Det er et sprog designet til at gøre et punkt. Pointen kan være hvad som helst: selve udfordringen med at skabe noget usædvanligt, lave en detaljeret vittighed, skabe et sprog som et kunstnerisk udtryk, teste lovende ideer til programmering osv.
dette skal gøre det klart, at der ikke er en nem måde at kategorisere eller organisere alle de forskellige esoteriske programmeringssprog korrekt, da de pr. Men vi kunne bruge nogle begreber og organisere principper for at få en bedre fornemmelse af samfundet omkring dem. Så vi kunne forstå, hvad Folket bruger dem til, eller at bruge disse oplysninger som inspiration til at skabe dit eget esoteriske sprog.
Hent guiden med 68 ressourcer på at skabe programmeringssprog
Modtag guiden til din indbakke for at læse den på alle dine enheder, når du har tid
nogle nyttige begreber
Turing Tarpit
en Turing tarpit er et programmeringssprog, der er Turing-komplet, men praktisk talt ubrugelig. Et Turing-komplet sprog kan simulere enhver Turing-maskine. I praksis kan du skrive ethvert program med det. Så i teorien er alle sådanne sprog lige så magtfulde, men dem, der også er en Turing Tarpit, gør det utroligt svært at skrive nogen form for program. En almindelig måde at gøre det på er at reducere antallet af tilgængelige symboler: prøv at skrive endda et Hej Verdensprogram med kun 8 tegn.
Kvin
en kvin er et program, der producerer som output en kopi af sin kildekode. Programmet kan ikke være det tomme program, selvom det tomme program er et gyldigt program på det specifikke sprog. Læsning af kildekoden fra disk eller hukommelse betragtes også som snyd. Navnet” kvine ” blev opfundet af Douglas Hofstadter, i sin bog G. K., Escher, Bach: en evig gylden fletning, til ære for filosofen Vilard Van Orman Kvine. Så begrebet kvine er ikke unikt for esoteriske programmeringssprog, men er ikke desto mindre en typisk første udfordring at overvinde, når man skriver en.
Code Golf
en code golf er en type konkurrence, hvor målet er at skrive det kortest mulige program, der implementerer en bestemt algoritme. I denne sammenhæng betyder korteste at have den korteste kildekode. Det betyder ikke at have den mindre størrelse af den binære eksekverbare kode. Spille kode golf kaldes”golf scripting”. Der er også alle andre former for konkurrencer relateret til programmering, som i betragtning af publikum ofte tilskynder til kreativ snyd. Generelt er en udfordring en motiverende faktor for mange esoteriske programmeringssprog.
tilsløring
begrebet tilsløring, det vil sige at skjule den virkelige betydning af et budskab, er naturligvis ikke eksklusivt for esoteriske programmeringssprog eller endda programmering generelt. Men det har stor relevans i mange esoteriske programmeringssprog. Især hvis du har til hensigt det i større generel forstand at vildlede eller forvirre modtageren. Du skjuler ikke beskeden, fordi selve meddelelsen er vigtig, men fordi den skjulte form i sig selv er målet. En typisk måde at opnå dette på er ved at minimere antallet af symboler på sproget, men du kan også camouflere et programmeringssprog i det, der ligner normal tekst eller et billede.
ikke-determinisme
i denne større betydning af vildledende eller forvirrende publikum kan ikke-determinisme også bruges til at nå det samme mål. Et ikke-deterministisk sprog er et, for hvilket den næste tilstand ikke altid kan forudsiges i betragtning af den aktuelle tilstand af et program. Konceptet har en vis anvendelse i normale programmeringssprog, hovedsagelig på grund af uforudsigelige forhold på kørselstidspunktet. Men det er taget til det yderste af visse esoteriske programmeringssprog, ved at randomisere variabler eller endda randomisere instruktionerne selv.
grupper af esoteriske programmeringssprog
som vi allerede har sagt, kan vi ikke give en udtømmende måde at organisere alle de esoteriske programmeringssprog på. Og selvom nogen kunne finde det, ville snart en anden opfinde et nyt esoterisk programmeringssprog bare for at gøre det ugyldigt. Så hvad vi forsøger at gøre er simpelthen at tilbyde nogle grupper eller kategorier for bedre at forstå og udforske verden af esoteriske programmeringssprog.
- sprog med en objektiv værdi, selvom denne værdi ikke nødvendigvis er en ydre eller typisk. Et grundlæggende eksempel er et sprog designet til at vinde en kode golf konkurrence: dens værdi kan måles, men det har ingen betydning uden for Fællesskabet af esoteriske programmeringssprog. Men den mere nyttige slags er dem, der er designet til at nå et usædvanligt mål, såsom at omgå sikkerhedsforanstaltninger (Se JSFuck) eller at definere Type-0-sprog i Chomsky-hierarkiet (se Thue).
- ubrugelige sprog. Dette er sprog, der er meget udfordrende at bruge. Dette kan være et eksplicit mål for designeren eller blot en ulykke med selve designet. En bruger kan endda finde det sjovt at bruge dem i nogen tid. En typisk måde at opnå et ubrugeligt sprog, både ved design og ved et uheld, er med minimalisme (se Brainfuck). Men hvis du vil have noget næsten umuligt at bruge, Har du brug for noget som et sprog, der bruger et ternært system og målrettet selv-ændrer sig selv, blandt andet (se Malbolge).
- sprog til at teste en ide eller bevise noget. Dette er sprog, der måske ikke er direkte nyttige, men de er en god testplads for et nyt koncept eller for at bevise noget. For eksempel et sprog, hvor programmer er arrangeret i et todimensionelt gitter (se Befunge) eller et næsten rent funktionelt sprog (se Unlambda)
- kunstneriske sprog. Dette er sprog, der er designet med ideen om at have en vis kunstnerisk værdi. Du kan argumentere for, at de effektivt er en del af gruppen af testsprogene eller dem med en objektiv værdi. Vi sætter dem i en anden kategori, fordi de ikke ligner programmering, men de har tendens til at se interessante ud, selvom du måske ikke vil bruge dem. For eksempel ligner de abstrakt kunst (se Piet) eller som et Shakesperean-stykke (se Shakespeare).
- vittigheder sprog. Dette er sprog opfundet med mennesker med en underlig sans for humor. Som en person, der siger: “vil du høre en vittighed? – så læser det Krig og fred, inden vi afslutter – hele vores liv er en vittighed!”. Et eksempel er et satirisk sprog, hvor selv referencehåndbogen er en vittighed (se INTERCAL)
nogle bemærkelsesværdige esoteriske sprog
selvfølgelig er dette ikke en udtømmende liste over bemærkelsesværdige esoteriske programmeringssprog, men mere beskedent en liste over nogle få bemærkelsesværdige for deres succes eller særegenhed.
Befunge
det vigtigste esoteriske træk ved Befunge er, at programmer er arrangeret i et todimensionelt gitter. Det er også en stak baseret og en reflekterende sprog, så det giver et program til at ændre sig selv. Hovedformålet var at designe et sprog, hvor det var så svært som muligt at oprette en kompilator.
den oprindelige version, nu kaldet Befunge-93, Det er ikke Turing komplet, fordi det sætter en grænse på 80 liter 25 til gitteret størrelse. Men en ny version, kaldet Befunge-98, fjerner denne grænse, og den skal være Turing komplet. Befunge har skabt en hel klasse multidimensionelle sprog, kaldet Fungeoid.
Befunge har kommandoer, der styrer retningen op, ned, venstre, højre og dermed også kan skabe en cyklus sammen med mere traditionelle kommandoer til output, binære operationer osv.
et Hej Ordprogram ser sådan ud.
> vv ,,,,,"Hello"<>48*, vv,,,,,,"World!"<>25*,@
Brainfuck
sandsynligvis den mest berømte af alle esoteriske programmeringssprog, det er bemærkelsesværdigt for hans ekstreme Minimalisme. Både i antallet af tilgængelige kommandoer og også i at have en meget lille kompilator. Faktisk er den anden betingelse årsagen til den første, fordi forfatteren ønskede at skabe et sprog med den mindste mulige kompilator. Forfatteren oprettede en kompilator, der kun brugte 240 bytes. Nogle gange senere skabte en anden en med kun 100 bytes. En naturlig konsekvens af dette mål er, at sproget er svært at bruge, selvom det er Turing komplet. Kort sagt, det er en Turing tarpit.
det omtales undertiden med en censureret stavemåde, såsom Brainf*ck eller mange andre variationer.
sproget består af otte forskellige kommandoer, der manipulerer en datapeger og to strøm af bytes til input og output. Det understøtter også sløjfer. Andre tegn, udover dem, der repræsenterer kommandoerne, betragtes som kommentarer og ignoreres af kompilatoren.
dette er et eksempel på, hvordan sproget fungerer.
Code: Pseudo code:>> Move the pointer to cell2 Set cell2 to 0 << Move the pointer back to cell0 End while
et Hej Verdensprogram ser sådan ud.
++++++++>+>+>->>+<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
hvis du vil finde ud af mere, kan du se på den tilsvarende side.
INTERCAL
INTERCAL har måske ikke været det første esoteriske programmeringssprog, men det er bestemt det første berømte. Hvor gammel er den? Det blev oprettet i 1972, og den første implementering blev lavet med stansede kort. Sproget var tænkt som en parodi, men også at gøre noget helt nyt, en fremmed for programmeringsverdenen. Navnet er ikke et akronym, ifølge forfatterne:
det fulde navn på kompilatoren er” Kompilatorsprog uden udtalt akronym, “hvilket er, af åbenlyse grunde, forkortet” INTERCAL.”
resten af INTERCAL Reference Manual (PS-format) er også fuld af meningsløse eller humoristiske udsagn. Dette er både for det sprog, de beskriver, og for hvordan de gør det. For eksempel er dette et afsnit om variabler
INTERCAL tillader kun 2 forskellige typer variabler, 16-bit heltal og 32-bit heltal. Disse
er repræsenteret af en plet (. ) eller to-spot (:), henholdsvis efterfulgt af et hvilket som helst tal mellem 1 og 65535,
inklusive. Disse variabler kan kun indeholde ikke-negative tal; således har de de respektive intervaller på
værdier: 0 til 65535 og 0 til 4294967295. Bemærke: .123 og 123 er to forskellige variabler. På den anden side
.1 og .0001 er identiske. Desuden kan sidstnævnte ikke skrives som 1E – 3 .
sproget tillader også brug af en modifikator PLEASE
. Det kræver dog også brugen af den korrekte mængde af dette søgeord. Det kan ikke bruges for lidt eller for meget, det vil sige, at du skal vise den rette mængde høflighed. Den virkelig unfunny del er, at det var en udokumenteret funktion i den oprindelige manual. En vittighedsmanual til en vittighedsmanual kan være okay, men en, at den er ufuldstændig, er uacceptabel.
dette er en Hej Verden i en version af INTERCAL implementeret med C: C-INTERCAL.
DO ,1 <- #13PLEASE DO ,1 SUB #1 <- #238DO ,1 SUB #2 <- #108DO ,1 SUB #3 <- #112DO ,1 SUB #4 <- #0DO ,1 SUB #5 <- #64DO ,1 SUB #6 <- #194DO ,1 SUB #7 <- #48PLEASE DO ,1 SUB #8 <- #22DO ,1 SUB #9 <- #248DO ,1 SUB #10 <- #168DO ,1 SUB #11 <- #24DO ,1 SUB #12 <- #16DO ,1 SUB #13 <- #162PLEASE READ OUT ,1PLEASE GIVE UP
kort sagt, INTERCAL er en meget udførlig vittighed. Den slags vittighed, der kan få dig til at beundre dens skaber for dens udholdenhed eller tvivle på dens fornuft, eller måske begge dele.
JSFuck
succesen med Brainfuck er ansporet oprettelsen af mange derivater sprog, for mange til at nævne dem alle. Men den mest bemærkelsesværdige er JSFuck.
JSFuck er ikke et ordentligt sprog, men det er mere en esoterisk programmeringsstil af Javascript, der kræver kun at bruge 6 tegn. De resulterende programmer er gyldige JavaScript-programmer, og det blev faktisk opfundet for at omgå sikkerhedsteknikker som f.eks. Dens egenskaber gjorde det også nyttigt for kode tilsløring.
det virker, fordi du kan evaluere ethvert udtryk i Javascript som enhver type. Så repræsenterer og tomt array, men ved at forberede det med en
+
kan du tvinge det til at evaluere som tallet 0. For at få et brev som a
kan du manipulere værdien false
osv. Slutresultatet er et ekstremt verbose sprog: svarende til alert("Hello World!")
er 22948 tegn lang.
Malbolge
Malbolge er et sprog specielt designet til at være næsten umuligt at bruge:
via en modintuitiv ‘skør operation’, base-Tre aritmetiske og selvændrende kode
med ordene fra sin egen skaber.
faktisk skrev forfatteren aldrig et arbejdsprogram med det. Det første program blev genereret af et andet program, der implementerede en heuristisk søgealgoritme. Sproget er ikke Turing komplet, og det er også baseret på en stavefejl i Malebolge, den otte cirkel af helvede i Dante Alighieris Inferno. Så det har virkelig ingen forløsende kvalitet.
jeg vil ikke forsøge at beskrive det, fordi det hele er eksplicit en øvelse i frustration. Der er dog en bemærkelsesværdig” skør operation”, der er værd at nævne: kryptering. Sproget skal arbejde på en ternær virtuel maskine og har tre registre, hvoraf den ene indeholder en peger til den aktuelle instruktion og kaldes . Efter instruktionen er udført modulo 94 af værdien i
erstatter det, der er i
, krypteres resultatet i henhold til en krypteringstabel. Velkommen til helvede.
nogle modige sjæl har skabt en Hej Verden program.
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc
Piet
Piet er et sprog, hvor programmer er repræsenteret som abstrakte kunstmalerier i stil med Piet Mondrian. Det er stak baseret og Turing komplet.
der er 18 farver bestilt efter farvetone og lysstyrke plus sort / hvid. Disse sidste to har særlig betydning og bruges til kontrolstrøm. Programudførelsen er afhængig af to” pointers”: en Retningspeger og en Farveblokvælger. DP kan pege op, ned, venstre og højre, mens CC kun kan pege til venstre og højre. Kombinationen af disse to pointers styrer udførelsen af programmet: dybest set hvilken farveblok udføres næste. Størrelsen på en Farveblok repræsenterer et heltal. Når programmet overgang mellem forskellige blokke af farve, deres forskel i nuance og lysstyrke bestemmer den slags kommando, der udføres. Kommandoerne er de sædvanlige, som output en værdi, multiplicere osv.
Hej verdensprogrammet har en vis skønhed.
Shakespeare
Shakespeare er et sprog designet til at have: “smuk kildekode, der lignede Shakespeare spiller”. Sproget har få kommandoer, og det ligner funktionelt samlingssprog, men det er overraskende ret detaljeret.
variablerne skal deklareres i et indledende afsnit, og deres navne skal være gyldige Shakespeare-tegn, såsom Romeo eller Juliet. Disse variabler er stakke, som senere vil blive udført operationer som pop, push og input/output. Navnet på handlinger og scener fungerer som goto etiketter og destinationen for visse betingede udsagn. Tegn, det vil sige variabler, skal kaldes på scenen for at blive manipuleret, og der kan kun være to ad gangen på scenen.
linjerne repræsenterer normalt numeriske konstanter: nogle navneord og adjektiv konverteres i numeriske værdier.
Hamlet: You lying stupid fatherless big smelly half-witted coward!Juliet: You are as villainous as the square root of Romeo!
særlige ord, som “Husk” eller kombinationer deraf, som “Tal dit sind”, udfør kommandoer. Dette er normale kommandoer, såsom at skubbe værdier på staktegnet, udsende værdien af den aktuelle variabel eller det tilsvarende ASCII-tegn.
en betinget erklæring er repræsenteret af et spørgsmål fra et tegn og et svar fra det andet tegn, der bestemmer, hvor man skal hen, hvis betingelsen for spørgsmålet evalueres til sandt.
Juliet: Am I better than you?Hamlet: If so, let us proceed to scene III.
Hej Verden er lige så lang og produktiv som et Shakespeare-spil.
The Infamous Hello World Program.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.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! Scene II: The praising of Juliet.Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! Scene III: The praising of 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! Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation.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! Scene II: Juliet and Ophelia's conversation.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!
Thue
Thue er et programmeringssprog baseret på en streng omskrivning system, kaldet semi-Thue system. Det er ikke-deterministisk og følger begrænsningsprogrammeringsparadigmet. Hvilket betyder, at variablerne er defineret i form af begrænsning (f.eks. noget er sandt eller falsk). Det er en Turing tarpit.
i tilfælde af Thue er costraints repræsenteret af en liste over substitutionsregler i formularen:
<string>::=<replacement>
særlige formater af denne formular repræsenterer input, output eller slutningen af listen over regler.
sprogets ikke-deterministiske karakter kan vises ved at angive to mulige erstatning for den samme streng. Eksempel:
- du skriver en regel, der siger, at strengen
a
kan erstattes medstupid
- du skriver også en regel, der siger, at strengen
a
kan erstattes medyou are
når ET program udføres strengen a
kunne erstattes af en af de to muligheder.
listen over regler efterfølges af en streng, der repræsenterer den oprindelige tilstand.
mens det kan være svært at skrive et nyttigt program, er den typiske Hej Verden ganske let og forståelig, i det mindste efter standarden for esoteriske programmeringssprog.
a::=~Hello World!::=a
Unlambda
Unlambda er et (næsten) rent funktionelt sprog designet til at vise et rent funktionelt sprog (og sandsynligvis hvor upraktisk det ville være). Det er baseret på kombinatorisk logik. Det er Turing komplet og den første funktionelle Turing tarpit. Den er afhængig af nogle få funktioner, en anvend operatør `
(backcitattegnet), og det understøtter også input/output. Teknisk fungerer det kun på funktioner med et enkelt argument, men multiargumentfunktioner kan oversættes til en række funktioner.
et Hej Verdensprogram ser næsten læsbart ud.
`r```````````.H.e.l.l.o. .w.o.r.l.di
andre interessante esoteriske sprog
Fugue er et sprog, der bruger MIDI-filer som kildekode. Intervallerne mellem hver note oversættes til specifikke traditionelle kommandoer, såsom input/output eller tilføjelse.
Beatnik er en stak baseret sprog, som består i en række engelske ord; mellemrum og tegnsætning ignoreres. Ordene konverteres i traditionelle kommandoer i henhold til deres værdi i spillet Scrabble.
hvidt rum er et vittighedssprog, hvor kun hvide tegn, såsom faner og mellemrum, er gyldige, og ethvert andet tegn ignoreres. Dette er selvfølgelig det omvendte af den sædvanlige opførsel af kompilatorer, der ignorerer hvide rum. I betragtning af disse egenskaber kan det bruges i et Polyglot-program, det vil sige et program, der er gyldigt for mere end et sprog. Så længe det andet sprog ikke er Python, eller ethvert sprog, hvor hvidt rum betyder noget.
GolfScript er en sammenkædede programmeringssprog designet til at vinde kode-golf konkurrencer, der er også Turing komplet.
snefnug er et reversibelt selvmodificerende sprog, hvor både tolken og programmet ændres ved hver kørsel.
FRACTRAN er et sprog, hvor programmer er en liste over fraktioner og et indledende tal. Jeg er ikke sikker på, hvad det gør, men det gør noget, da det har en Facebook-side.
Iota og Jot er to formelle sprog, der hver især er designet til at være det enkleste formelle system. Af deres natur kan de også betragtes som lige så minimalistiske, Turing tarpit, programmeringssprog. Begge bruger kun to symboler og udfører to operationer. En efterfølger, kaldet Sot, understøtter også input / output.
entropi er et meget passende navngivet programmeringssprog designet til at acceptere ideen om at opgive kontrol. Enhver output af programmet vil blive tilnærmet, og hver gang dataene er adgang til det er tilfældigt ændret. Sproget ændrer ikke det oprindelige program, så hver gang kører output vil være anderledes, men den oprindelige tilstand vil blive bevaret. En nysgerrig bivirkning af randomiseringen af data er Drunk Elisa, en netversion af det klassiske Elisa-program, hvor terapeuten ser ud til at være beruset.
Monicelli er et vittighedssprog baseret på komediefilmen mine venner. Et typisk program ligner en række meningsløse italienske sætninger. Overraskende giver dette mening, da filmen, der bruges som inspiration, også indeholder meningsløse sætninger. Det er galskabens cirkel.
Resume
verden af esoterisk programmeringssprog er lige så spændende som det er vanvittigt: der er ingen regler, men en masse interessante ting. Jeg håber at have givet dig et lidt fornuftigt vindue på, hvad du kunne forvente.
hvis du vil vide mere eller deltage i dette samfund, foreslår jeg at se på Esolangs. Denne hjemmeside, sammen med
du kan også finde interessant bloggen til Marc C. Chu-Carroll i dens mange inkarnationer i årenes løb. Som navnet Good Math, Bad Math antyder, er det hovedsageligt dedikeret til matematik. Ikke desto mindre har det også mange analyser af esoteriske programmeringssprog i en serie kaldet patologisk Programmering (Sprog). Du kan for eksempel se en dedikeret til det mindste programmeringssprog.