Moroen (Og Galskapen) Til Esoteriske Programmeringsspråk

et esoterisk programmeringsspråk er et programmeringsspråk designet for å utfordre normer for språkdesign. Det er et språk designet for å gjøre et poeng. Poenget kan være noe: utfordringen i seg selv å skape noe uvanlig, lage en forseggjort vits, skape et språk som et kunstnerisk uttrykk, teste lovende ideer for programmering, etc.

Dette bør gjøre det klart at det ikke er en enkel måte å kategorisere eller organisere alle de forskjellige esoteriske programmeringsspråkene, siden de per definisjon trosser reglene. Men vi kunne bruke noen konsepter og organisasjonsprinsipper for å få en bedre følelse av samfunnet rundt dem. Slik at vi kunne forstå hva folk bruker dem til, eller å bruke denne informasjonen som en inspirasjon til å lage ditt eget esoteriske språk.

Noen Nyttige Begreper

Turing Tarpit

En Turing tarpit er et programmeringsspråk Som Er Turing-komplett, men praktisk talt ubrukelig. Et Turing-komplett språk kan simulere Enhver Turing-maskin. I praksis kan du skrive noe program med det. Så i teorien er alle slike språk like kraftige, men De som også Er En Turing Tarpit, gjør det utrolig vanskelig å skrive noen form for program. En vanlig måte å gjøre det på er å redusere antall tilgjengelige symboler: prøv å skrive Til Og Med Et Hello World-program med bare 8 tegn.

Quine

en quine er et program som produserer som utdata en kopi av kildekoden. Programmet kan ikke være det tomme programmet, selv om det tomme programmet er et gyldig program på det bestemte språket. Lesing av kildekoden fra disk eller minne betraktes også som juks. Navnet» quine » ble laget Av Douglas Hofstadter, I sin bok Gö, Escher, Bach: En Evig Gylden Flette, til ære for filosofen Willard Van Orman Quine. Så begrepet quine er ikke unikt for esoteriske programmeringsspråk, men er likevel en typisk første utfordring å overvinne når du skriver en.

Kode Golf

en kode golf er en type konkurranse der målet er å skrive kortest mulig program som implementerer en bestemt algoritme. I denne sammenheng betyr korteste å ha den korteste kildekoden. Det betyr ikke å ha den mindre størrelsen på den binære kjørbare koden. Å spille kode golf kalles «golf scripting». Det er også alle andre typer konkurranser knyttet til programmering, som, gitt publikum, ofte oppfordrer kreativ juks. Generelt sett er en utfordring en motiverende faktor for mange esoteriske programmeringsspråk.

Obfuscation

begrepet obfuscation, det vil si å skjule den virkelige betydningen av en melding, er åpenbart ikke eksklusiv for esoteriske programmeringsspråk eller til og med programmering generelt. Men det har stor relevans i mange esoteriske programmeringsspråk. Spesielt hvis du har tenkt det i større generell forstand av misvisende eller forvirrende mottakeren. Du skjuler ikke meldingen fordi selve meldingen er viktig, men fordi den skjulte formen i seg selv er målet. En typisk måte å oppnå dette på er å minimere antall symboler på språket, men du kan også kamuflere et programmeringsspråk i det som ser ut som vanlig tekst eller et bilde.

Ikke-Determinisme

i denne større betydningen av villedende eller forvirrende publikum, kan ikke-determinisme også brukes til å oppnå det samme målet. Et ikke-deterministisk språk er et språk som, gitt programmets nåværende tilstand, ikke alltid kan forutsies. Konseptet har noe bruk i vanlige programmeringsspråk, hovedsakelig på grunn av uforutsigbare forhold ved kjøretid. Men det er tatt til ekstreme av visse esoteriske programmeringsspråk, ved å randomisere variabler eller til og med randomisere instruksjonene selv.

Grupper Av Esoteriske Programmeringsspråk

som vi allerede har sagt, kan vi ikke gi en uttømmende måte å organisere alle esoteriske programmeringsspråk på. Og selv om noen kunne finne det, ville noen andre snart oppfinne et nytt esoterisk programmeringsspråk bare for å gjøre det ugyldig. Så det vi prøver å gjøre er bare å tilby noen grupper, eller kategorier, for bedre å forstå og utforske verden av esoteriske programmeringsspråk.

  • Språk med en objektiv verdi, selv om denne verdien ikke nødvendigvis er en ytre eller typisk. Et grunnleggende eksempel er et språk designet for å vinne en kode golf konkurranse: verdien kan måles, men det har ingen mening utenfor samfunnet av esoteriske programmeringsspråk. Men den mer nyttige typen er de som er designet for å oppnå et uvanlig mål, for eksempel å omgå sikkerhetstiltak (se JSFuck) eller å definere Type-0-språk I chomsky-hierarkiet (Se Thue).
  • Ubrukelige språk. Dette er språk som er svært utfordrende å bruke. Dette kan være et eksplisitt mål for designeren eller bare en ulykke av selve designet. En bruker kan også funnet morsomt å bruke dem i noen tid. En typisk måte å oppnå et ubrukelig språk på, både ved design og ved et uhell, er med minimalisme (Se Brainfuck). Men hvis du vil ha noe nesten umulig å bruke, trenger du noe som et språk som bruker et ternært system og målrettet selvforandring, blant Annet (se Malbolge).
  • Språk for å teste en ide eller bevise noe. Dette er språk som kanskje ikke er direkte nyttige, men de er gode testarena for et nytt konsept eller for å bevise noe. For eksempel et språk der programmer er arrangert i et todimensjonalt rutenett (Se Befunge) Eller et nesten rent funksjonelt språk (Se Unlambda)
  • Kunstneriske språk. Dette er språk som er utformet med ideen om å ha noen kunstnerisk verdi. Du kan hevde at de effektivt er en del av gruppen av testspråkene eller de med en objektiv verdi. Vi legger dem i en annen kategori, fordi de ikke ser ut som programmering, men de har en tendens til å se interessant ut, selv om du kanskje ikke vil bruke dem. For eksempel ser de ut som abstrakt kunst (Se Piet) eller som Et Shakesperean-spill (Se Shakespeare).
  • Vitser språk. Dette er språk oppfunnet med folk med en merkelig sans for humor. Som en person som sier: «vil du høre en vits? – Så leser Det Krig og Fred, før vi avslutter-Hele livet vårt er en vits!». Et eksempel er et satirisk språk, hvor selv referansehåndboken er en vits (se INTERCAL)

Noen Kjente Esoteriske Språk

selvfølgelig er dette ikke en uttømmende liste over kjente esoteriske programmeringsspråk, men mer beskjedent en liste over noen få som er kjent for deres suksess eller særegenhet.

Befunge

Den viktigste esoteriske funksjonen Til Befunge er at programmene er arrangert i et todimensjonalt rutenett. Det er også en stabel basert og et reflekterende språk, så det tillater et program å endre seg selv. Hovedmålet var å designe et språk som det var så vanskelig som mulig å lage en kompilator.

den opprinnelige versjonen, nå Kalt Befunge-93, Er Ikke Turing fullført, fordi den setter en grense på 80×25 til rutenettstørrelsen. Men En ny versjon, Kalt Befunge-98, fjerner denne grensen, og Den skal Være Turing fullført. Befunge har skapt en hel klasse flerdimensjonale språk, kalt Fungeoid.

Befunge har kommandoer som styrer retningen opp, ned, venstre, høyre og dermed kan også skape en syklus, sammen med mer tradisjonelle kommandoer for utgang, binære operasjoner, etc.

Et Hei Word-program ser slik ut.

> vv ,,,,,"Hello"<>48*, vv,,,,,,"World!"<>25*,@

Brainfuck

Sannsynligvis Den mest berømte av alle esoteriske programmeringsspråk, det er kjent for sin ekstreme minimalisme. Både i antall kommandoer tilgjengelig og også i å ha en veldig liten kompilator. Faktisk er den andre betingelsen årsaken til den første, fordi forfatteren ønsket å lage et språk med minst mulig kompilator. Forfatteren opprettet en kompilator som bare brukte 240 byte. Noen ganger senere noen andre opprettet en med bare 100 byte. En naturlig konsekvens av dette målet er at språket er vanskelig å bruke, selv Om Det Er Turing komplett. Kort sagt, Det Er En Turing tarpit.

Det er noen ganger referert til med en sensurert stavemåte, for eksempel Brainf*ck eller mange andre variasjoner.

språket består av åtte forskjellige kommandoer som manipulerer en datapeker og to strøm av byte for inngang og utgang. Den støtter også løkker. Andre tegn, i tillegg til de som representerer kommandoene, betraktes som kommentarer og ignoreres av kompilatoren.

Dette er et eksempel på hvordan språket fungerer (hentet Fra esolangs wiki).

Code: Pseudo code:>> Move the pointer to cell2 Set cell2 to 0 << Move the pointer back to cell0 End while

Et Hello World-program ser slik ut.

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

hvis du vil finne ut mer, kan du se på den tilsvarende Wikipedia-siden eller Esolangs-siden.

INTERCAL

INTERCAL har kanskje ikke vært det første esoteriske programmeringsspråket, men det er absolutt det første kjente. Hvor gammel er den? Den ble opprettet i 1972, og den første implementeringen ble laget med stansede kort. Språket var ment som en parodi, men også å gjøre noe helt nytt, en fremmed til programmeringsverdenen. Navnet er ikke et akronym, ifølge forfatterne:

det fulle navnet på kompilatoren er «Kompilator Språk Uten Uttale Akronym,» som er, av åpenbare grunner, forkortet » INTERCAL.»

resten AV INTERCAL Reference Manual (PS-format) er også full av nonsens eller humoristiske uttalelser. Dette er både for språket de beskriver og for hvordan de gjør det. FOR eksempel er dette en seksjon på Variabler

INTERCAL tillater bare 2 forskjellige typer variabler, 16-biters heltall og 32-biters heltall. Disse
er representert av et sted ( . ) eller to-spot (:), henholdsvis, etterfulgt av et hvilket som helst tall mellom 1 og 65535,
inkludert. Disse variablene kan inneholde bare ikke-negative tall; dermed har de respektive områder av
verdier: 0 til 65535 og 0 til 4294967295. Merk: .123 og 123 er to forskjellige variabler. På den annen side,
.1 og .0001 er identiske. Videre kan sistnevnte ikke skrives SOM 1E-3 .

språket tillater også bruk av en modifikator PLEASE. Det krever imidlertid også bruk av riktig mengde av dette søkeordet. Det kan ikke brukes for lite eller for mye, det vil si at du må vise riktig mengde høflighet. Den virkelig unfunny delen er at det var en udokumentert funksjon i den opprinnelige håndboken. En spøk manual for en spøk manual kan være greit, men en som det er ufullstendig er uakseptabelt.

Dette Er En Hei Verden i en versjon AV INTERCAL implementert 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 veldig forseggjort vits. Den slags spøk som kan føre deg til å beundre sin skaper for utholdenhet eller å tvile på sin sunnhet, eller kanskje begge deler.

JSFuck

Suksessen Til Brainfuck er ansporet etableringen av mange derivater språk, for mange til å nevne dem alle. Men Den mest bemerkelsesverdige Er JSFuck.

JSFuck er ikke et riktig språk, Men Det er mer en esoterisk programmeringsstil Av Javascript som krever å bruke bare 6 tegn. De resulterende programmene er gyldige JavaScript-programmer, og faktisk ble det oppfunnet for å omgå sikkerhetsteknikker som malware deteksjon. Dens egenskaper gjorde det også nyttig for kode obfuscation.

det fungerer fordi du kan evaluere ethvert uttrykk I Javascript som en hvilken som helst type. Så representerer og tom array, men ved å prependere den med en + kan du tvinge den til å evaluere som tallet 0. For å få et brev som a kan du manipulere verdien false, etc. Sluttresultatet er et ekstremt verbose språk: tilsvarende alert("Hello World!") er 22948 tegn langt.

Malbolge

Malbolge Er et språk spesielt designet for å være nesten umulig å bruke:

via en bakvendt ‘gal operasjon’, base-tre aritmetiske, og selvendrende kode

i ordene til sin egen skaper.

faktisk skrev forfatteren aldri et arbeidsprogram med det. Det første programmet ble generert av et annet program som implementerte en heuristisk søkealgoritme. Språket Er ikke Turing komplett, og det er også basert på en feilstaving Av Malebolge, de åtte sirkel av helvete I Dante Alighieris Inferno. Så det har egentlig ingen innløsende kvalitet.

jeg vil ikke forsøke å beskrive det fordi det hele er eksplisitt en øvelse i frustrasjon. Men det er en bemerkelsesverdig «gal operasjon» som er verdt å nevne: kryptering. Språket skal fungere på en ternær virtuell maskin og har tre registre, hvorav en inneholder en peker til gjeldende instruksjon og kalles . Etter at instruksjonen er utført modulo 94 av verdien i erstatter det som er i , blir resultatet kryptert i henhold til et krypteringstabell. Velkommen til helvete, faktisk.

noen modige sjel har skapt Et Hello World-program.

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

Piet

Piet er et språk der programmer er representert som abstrakte kunstmalerier, i stil Med Piet Mondrian. Det er stack basert Og Turing komplett.

det er 18 farger bestilt i henhold til fargetone og lysstyrke, pluss svart og hvitt. Disse to siste har spesiell betydning og brukes til kontrollflyt. Programutførelsen er avhengig av to «pekere» : En Retningspeker og En Fargeblokkvelger. DP kan peke opp, ned, venstre og høyre, MENS CC bare kan peke til venstre og høyre. Kombinasjonen av disse to pekerne styrer utførelsen av programmet: i utgangspunktet hvilken fargeblokk som utføres neste. Størrelsen på en fargeblokk representerer et heltall. Når programovergangen mellom forskjellige fargeblokker, bestemmer forskjellen i fargetone og lysstyrke hvilken type kommando som utføres. Kommandoene er de vanlige, som utdata en verdi, multiplisere, etc.

Hello World-programmet har en viss skjønnhet.

Hei, Verden I Piet Av Thomas Schoch

Shakespeare

Shakespeare Er et språk designet for å ha: «vakker kildekode som lignet Shakespeare spiller». Språket har få kommandoer, og det er funksjonelt lik assembly språk, men det er ikke overraskende ganske ordrik.

variablene må deklareres i en innledende del, og navnene deres må være gyldige Shakespeare-tegn, for Eksempel Romeo eller Juliet. Disse variablene er stabler som senere vil bli utført operasjoner som pop, push og input/output. Navnet på handlinger og scener fungerer som goto etiketter og målet for visse betingede uttalelser. Tegn, det vil si variabler, må kalles på scenen for å bli manipulert, og det kan bare være to om gangen på scenen.

linjene representerer vanligvis numeriske konstanter: noen substantiver og adjektiv konverteres i numeriske verdier.

Hamlet: You lying stupid fatherless big smelly half-witted coward!Juliet: You are as villainous as the square root of Romeo!

Spesielle ord, som «Husk», eller kombinasjoner av disse, som «Snakk ditt sinn», utfører kommandoer. Dette er normale kommandoer som å skyve verdier på stack-tegnet, gi ut verdien av den nåværende variabelen eller det tilsvarende ASCII-tegnet.

en betinget setning er representert av et spørsmål fra ett tegn og et svar fra det andre tegnet som bestemmer hvor du skal gå, hvis tilstanden til spørsmålet vurderes til sann.

Juliet: Am I better than you?Hamlet: If so, let us proceed to scene III.

Hello World er like lang Og produktiv som Et Shakespeare-spill.

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 programmeringsspråk basert på en streng omskrivning system, kalt semi-Thue system. Det er ikke-deterministisk og følger begrensningsprogrammeringsparadigmet. Som betyr at variablene er definert i form av begrensning (ex. noe er sant eller usant). Det er En Turing tarpit.

i Tilfelle Av Thue costraints er representert ved en liste over substitusjonsregler i skjemaet:

<string>::=<replacement>

Spesielle formater av dette skjemaet representerer inngang, utgang eller slutt på listen over regler.

språkets ikke-deterministiske natur kan vises ved å indikere to mulige erstatning for samme streng. Eksempelvis:

  • du skriver en regel som sier at strengen a kan erstattes med stupid
  • du skriver også en regel som sier at strengen a kan erstattes med you are

når et program kjøres strengen a kan erstattes av en av de to alternativene.

listen over regler følges av en streng som representerer opprinnelig tilstand.

mens du skriver et nyttig program kan være vanskelig, er den typiske Hello World ganske lett og forståelig, i hvert fall etter standarden på esoteriske programmeringsspråk.

a::=~Hello World!::=a

Unlambda

Unlambda er et (nesten) rent funksjonelt språk designet for å vise et rent funksjonelt språk (og sannsynligvis hvor upraktisk det ville være). Den er basert på kombinatorisk logikk. Det Er Turing complete og den første funksjonelle Turing tarpit. Den er avhengig av noen få funksjoner, en apply-operatør ` (backquote-tegnet) og den støtter også inngang/utgang. Teknisk fungerer det bare på funksjoner med et enkelt argument, men multi-argument funksjoner kan oversettes til en sekvens av funksjoner.

Et Hello World-program ser nesten lesbart ut.

`r```````````.H.e.l.l.o. .w.o.r.l.di

Andre Interessante Esoteriske Språk

Fuge er et språk som bruker MIDI-filer som kildekode. Intervallene mellom hver note er oversatt til bestemte tradisjonelle kommandoer, for eksempel input/output eller addisjon.

Beatnik er en stabel basert språk som består av en rekke engelske ord; mellomrom og tegnsetting ignoreres. Ordene konverteres i tradisjonelle kommandoer i henhold til deres verdi i spillet Scrabble.

Mellomrom Er et spøkespråk der bare tegn i mellomrom, for eksempel faner og mellomrom, er gyldige og alle andre tegn ignoreres. Dette er selvfølgelig den inverse av den vanlige oppførselen til kompilatorer som ignorerer mellomrom. Gitt disse egenskapene, kan den brukes i Et Polyglotprogram, det vil si et program som er gyldig for mer enn ett språk. Så lenge det andre språket ikke Er Python, eller et hvilket som helst språk hvor mellomrom betyr noe.

GolfScript Er et sammenkoblet programmeringsspråk designet for å vinne kode-golf konkurranser, som Også Er Turing fullført.

Snowflake Er et reversibelt selvmodifiserende språk der både tolken og programmet endres ved hvert løp.

FRACTRAN ER et språk der programmer er en liste over fraksjoner og et innledende tall. Jeg er ikke sikker på hva det gjør, men det gjør noe, siden Det har En Wikipedia-side.

Iota og Jot er to formelle språk, hvert av dem designet for å være det enkleste formelle systemet. Av deres natur kan de også betraktes som like minimalistiske, Turing tarpit, programmeringsspråk. Begge bruker bare to symboler og utfører to operasjoner. En etterfolger, kalt Zot, stotter ogsa inngang / utgang.

Entropi Er et veldig passende programmeringsspråk designet for å akseptere ideen om å gi opp kontroll. Enhver utgang av programmet vil bli tilnærmet, og hver gang dataene er tilgjengelig det er tilfeldig endret. Språket endrer ikke det opprinnelige programmet, så hver gang kjøres utgangen vil være annerledes, men den opprinnelige tilstanden vil bli bevart. En nysgjerrig bivirkning av randomisering av data Er Drunk Eliza, en webversjon av Det klassiske Eliza-programmet der terapeuten ser ut til å være full.

Monicelli Er et spøkspråk basert på Komediefilmen My Friends. Et typisk program ser ut som en rekke nonsens italienske setninger. Overraskende dette er fornuftig siden filmen brukes som inspirasjon har også nonsens setninger. Det er sirkelen av galskap.

Sammendrag

verden av esoterisk programmeringsspråk er like spennende som det er galning: det er ingen regler, men mange interessante ting. Jeg håper å ha gitt deg et litt sane vindu på hva du kan forvente.

hvis du vil vite mer eller delta i dette fellesskapet, foreslår Jeg at Du ser På Esolangs. Denne nettsiden, Sammen Med Wikipedia, er kilden til de fleste eksemplene som vises i denne artikkelen. Der kan du også finne litt inspirasjon i en liste over ideer til et esoterisk programmeringsspråk.

Du kan også finne Interessant bloggen Til Marc C. Chu-Carroll i sine mange inkarnasjoner i løpet av årene. Som Navnet Good Math, Bad Math innebærer, er det hovedsakelig dedikert til matematikk. Likevel har det også mange analyser av esoteriske programmeringsspråk i en serie kalt Patologisk Programmering (Språk). Du kan for eksempel se en dedikert til det minste programmeringsspråket.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.

Previous post Hjemmelaget Tørket Sitrus Hjul
Next post Blod Og Sjokolade (2007)