Domanda

Conosci qualche esempio di un linguaggio esoterico usato per scrivere qualsiasi pratico da usare, vero e proprio programma -World? C'è un però oscura, dominio di informatica dove un linguaggio esoterico è stato effettivamente dimostrato utile per risolvere un problema specifico?

È stato utile?

Soluzione

apps mondo reale, eh?

Il gioco Lost Kingdom ha vinto la prima edizione del Classic 2k Testo Avventura Competizione nel 2004, ed è stato (ri) scritto e migliorato dall'autore originale in brainfuck

Come su un IRC bot in Befunge o questo editor di testo ? E suppongo che se ti piace scrivere in lingue esoteriche, si potrebbe considerare un Befunge al compilatore C o un brainfuck al compilatore C molto utile ...

Altri suggerimenti

Non v'è alcun uso pratico per un linguaggio di programmazione esoterica, quasi per definizione. Tuttavia, solo perché non si può usare di loro, non significa che essi non sono utile .

tl; dr:

  • non-deterministico esolangs evidenziano la non-determinancy di tutto filo programmazione sede
  • Turing Tarpits evidenziare come nessuno linguaggio di programmazione è più potente di qualsiasi altra (se entrambi sono < a href = "https://en.wikipedia.org/wiki/Turing_completeness" rel = "noreferrer"> Turing-completo), distinguendo quindi "potenza computazionale" da "forza espressiva."
  • pensiero laterale e sono rompicapo

Ad esempio, quando si guarda a linguaggi di programmazione esoterici, si può grosso modo dividere in categorie: alcuni sono create come uno scherzo, alcuni sono creati solo per divertimento, alcuni sono creati come Tarpits Turing, ma ci sono anche alcuni che sono creato per dimostrare o illustrare un punto. E questi sono effettivamente utile per esattamente questo: illustrare un punto, forse in una classe di linguaggi di programmazione, forse per la comunità o per l'industria. Anche se sono inutili ai fini pratici, sono l'uso ful per scopi didattici.

Prendere non deterministici linguaggi di programmazione esoterici. Si tratta di linguaggi di programmazione per i quali la semantica di valutazione di certe espressioni non sono definite in modo deterministico, ma per esempio probabilisticamente oppure in base alla fase della luna o qualcosa del genere. Se si guarda alla definizione di un tale linguaggio, si pensa subito: "Beh, questo è solo stupido." E questo è! (Per esempio, il programma Ciao Mondo in Java2k è quasi una pagina di codice, e non è nemmeno garantito per la stampa "Ciao Mondo" ogni volta, solo la maggior parte del tempo.) E tuttavia, la maggior parte dei linguaggi di programmazione tradizionali di oggi hanno modelli di concorrenza non deterministici. IOW: non appena si avvia un thread in Java, C #, Python, Ruby, Perl, anche Erlang o Clojure, il programma diventa altrettanto casuale come nel linguaggio esoterico Java2k. Quindi, perché pensiamo uno è stupido e accettare l'altro come normale, anche se sono essenzialmente la stessa cosa? Prendendo il non-determinismo alle estreme conseguenze, e il confezionamento in su in un modo divertente, esolangs ci permettono di fare questa domanda.

Un altro esempio è Tarpits Turing. Un tarpit Turing è un Tarantopedia che ha quasi nessun caratteristiche, ma è ancora Turing-completo. Tale tarpit Turing può essere utilizzata per dimostrare due cose diverse: è possibile utilizzarlo per dimostrare che cosa esattamente è che rende alcune lingue più "potente" (nel senso di forza espressiva) di altri. Se si cerca in giro sul web, troverete la gente chiede "se Lisp è molto meglio di Java, perché non mi mostri qualche programma che è possibile scrivere in Lisp, ma non posso scrivere in Java." E, naturalmente, questo è stupido: entrambe le lingue sono Turing-complete, quindi non c'è tale programma. Tuttavia, contrapponendo Java con, diciamo, Brainfuck, si può dimostrare che questo non è solo questione di significato chiedere.

E l'altra cosa che si può dimostrare con Tarpits Turing è che non si può mai fare un linguaggio più potente (in entrambi i sensi della parola: potenza di calcolo e la potenza espressiva) rimuovendo caratteristiche. Sembra ovvio, ma ci sono persone che credono in realtà che Microsoft dovrebbe semplicemente rimuovere stato mutevole da C #, e sarebbe magicamente diventato più potente.

In generale, Tarpits Turing sono buone per dimostrare la distinzione tra la potenza di calcolo e la forza espressiva di un linguaggio di programmazione.

altri modi in cui esolangspuò essere utile è che possono servire da ispirazione per la ricerca linguaggio di programmazione. Pensate a Unlambda, che, come suggerisce il nome, è un linguaggio funzionale che è non basato sul lambda calcolo. In altre parole: si tratta di un linguaggio funzionale che non hanno funzioni

.

E, ultimo ma non meno importante, esolangs possono costringerti a guardare un problema da una prospettiva completamente diversa (sì, lo ammetto, è per lo più un angolo scomodo, ma hey, alcuni registi (Hitchcock, per esempio) devono la loro intera carriera a guardare le cose da angolazioni scomode) e prendono in giro il vostro cervello come un buon puzzle. Cioè, per esempio, tutta la ragione per l'esistenza e il nome di Brainfuck.

la sicurezza del lavoro !!!

Se c'è un pratica l'uso di una lingua che non sarebbe stato chiamato esoterica . I due termini sono reciprocamente esclusivi.

Understanding macchina di Turing, Calcolabilita ed avente un senso pratico di ciò che è implicito nella teoria della computazione. Tutti i vantaggi pratici possono essere raccolti se si utilizza un linguaggio esoterico come il cervello ****.

Sono sicuro, ci sono anche altri.

Alcune classi di linguaggi di programmazione esoterici hanno applicazioni in informatica teorica.

Turing Tarpits hanno usi per illustrare alcuni risultati nella teoria della computabilità e il problema della terminazione. Si veda ad esempio il lavoro di Ianov (c'è un riassunto un po 'più accessibile parzialmente premuto < a href = "http://rjlipton.wordpress.com/2009/04/22/fads-and-the-theory-of-computation/" rel = "noreferrer"> questo articolo ).

risultati fondamentali per classi di macchine di Turing sono un'altra applicazione pratica. Ad esempio, Wikipedia osserva che P '' fu "il primo 'GOTO-less' programmazione imperativa strutturata linguaggio per essere provata Turing-complete ".

binaria combinatoria logica è uno strumento utile per analizzare Kolmogorov complessità .

, e la sua risposta, anche io ho trovato un uso pratico per tale lingua: GolfScript , un linguaggio progettato specificamente per il golf codice:

  

GolfScript è una pila orientato   linguaggio di programmazione esoterico volto a   risolvere i problemi (fori) in soli   battiture possibili. Essa mira anche   per essere semplice e facile da scrivere.

Il gioco è fatto, direttamente dalle persone che hanno scritto di esso. Anche se potrebbe essere discutibile se o meno il codice di golf è una questione pratica, la mia convinzione personale è che si ottiene il più vicino come si arriva a qualcosa che io e te potrebbe effettivamente scrivere e di incontro, per non parlare che è un esercizio di programmazione divertente, e un concorso con un sacco di fan. Quindi ... se gioco, il calcio, e tutti i tipi di altre attività di intrattenimento sono in un modo o nell'altro ... pratica ... Mi sento libero di includere il codice di golf troppo:)

L'unico vantaggio pratico che vedo, è che se hai scritto il codice in un linguaggio esoterico, causerebbe a pensare a problemi in modi nuovi e interessanti. Imparare nuovi modi di affrontare i problemi potranno beneficiare anche quando si torna la programmazione in un linguaggio mainstream.

L'anno scorso ho letto di Charles Petzold 'Turing commentata'. Io certamente ho alcuna intenzione di programmare mai una macchina di Turing, almeno come la descrive. Ma pensare a risolvere i problemi con il suo 'linguaggio' allungato la mia mente. Sono una migliore programmatore C # per esso.

Certo; Fungot, il bot IRC: http://zem.fi/~fis/fungot.b98. txt

Lo sviluppo del linguaggio esoterico è come la creazione di Mandala . Dopo terminazioni di lavoro si può dimenticare o addirittura distruggere.

Se si giudica solo da il link Wikipedia :

  

Un linguaggio di programmazione esoterica   (Talvolta abbreviato in Tarantopedia) è un   linguaggio di programmazione progettato come   prova dei confini del calcolatore   disegno linguaggio di programmazione, come   prova di concetto, o come uno scherzo. Là   di solito è alcuna intenzione di   lingua in corso di adozione per mondo reale   programmazione.

dunque, non , non v'è alcuna applicazione pratica di un tale linguaggio ad un problema reale.

Le ragioni non sono insulti alle lingue, si concentrano su "pratico":

  1. In pratica, se si sta risolvendo un problema, è necessario essere in grado di convincere te stesso che hai risolto. Se stai usando un linguaggio che è specificamente progettato per essere difficile da leggere, che sta per essere difficile da controllare visivamente la soluzione e dire "Sì, questo è corretto."
  2. In pratica, si sta lavorando non in un vuoto. Nella vita reale, si sta sempre lavorando con una serie non-zero di altre persone (anche se è solo voi-in-the-future). Qualcun altro sta per avere per mantenere la vostra soluzione, l'aggiunta di una funzione di qui, la fissazione di un problema lì o, peggio ancora, cercando di documentare quello che hai fatto e perché.
  3. Se non si applicano né 1 né 2, è stata creata una soluzione ad un problema che è (a) banalmente facile da ispezionare e (b) non richiede manutenzione, in quanto non viene mai utilizzato nella pratica. È, pertanto, un / problema non pratico banale.

colorforth è molto potente, ed è pratico.

OKAD e GA4 a 290K

Codice offuscamento è molto comune pratico utilizzo :-p

E non so se la famiglia APL / J / K potrebbe essere chiamato esoterica, ma sono stati utilizzati in sistemi di produzione da un lungo periodo di tempo.

Esiste un linguaggio chiamato Pilot. Si tratta di un linguaggio interpretativo scritta a Dartmouth BASIC (un linguaggio interpetive). E 'uso iniziale era per la programmazione non-insegnanti per essere in grado di programmare le loro prove. Tutti i comandi nella lingua sono singole lettere e la lettera utilizzata definisce le opzioni disponibili. E 'antica, (ho imparato nel 1976) e, per quanto posso dire, non ha più alcuna utilità.

Tra gli altri usi, il più minimale potrebbe essere utilizzato come (scatole nere) / (lingue algoritmo in modalità sandbox) per le ricerche algoritmiche, per ricerca utilizza come programmazione con vincoli based e soluzioni in continua evoluzione.

Questa risposta indirizzi 3 tipi di linguaggi di programmazione esoterici:

  • lingue golf
  • Tarpits Turing
  • Lingue nei giochi

Lingue golf sono utili quando si deve incidere qualcosa insieme per un uso di una volta. Piuttosto che lo script di un programma Python 100-line o di passare attraverso una baldoria di debug perché hai fatto un errore su qualcosa che è un incorporato in una lingua del golf, è sufficiente collegare un paio di comandi incorporati e ottenere il lavoro fatto più veloce.

Tarpits Turing sono utili per la creatività. Devi pensare fuori della scatola con i pochi comandi i Tarpits Turing hanno. In BF come è possibile fare per convertire i numeri interi dato a voi tramite il programma (che sono solo un mucchio di valori ASCII) a qualcosa che si poteva gestire (come un singolo valore di una cella)? Come si controlla per l'uguaglianza? Come si dovrebbe aggiungere due numeri?

Tarpits Turing sono utili anche per praticare l'organizzazione del codice. Quando un compito semplice come l'aggiunta di due numeri che serve per rendere il codice pseudo e avere un layout di tutto il programma, è necessario organizzare il vostro programma. In BF aggiungere due valori delle celle, si avrebbe bisogno di: 1. Decremento il primo addendo 2. Incremento del secondo addendo 3. Loop fino primo addendo è vuoto

.

Lingue in giochi sono utili per migliorare l'esperienza di mondi / livelli per i giocatori di quel mondo / livello. In Roblox (anche se io non lo chiamerei questo linguaggio di scripting "esoterica"), se hai appena messo in alcune parti e modelli nel vostro mondo, sarebbe divertente? No. Se con script quei modelli di combattere voi e dotarvi di una pistola? Può essere. In geometria Dash si potrebbe fare il livello più difficile da che sia necessario fare clic su un certo numero di volte in essa di "linguaggio di programmazione", o renderlo utilizzare attacchi pseudo casuali in una lotta capo. linguaggi di programmazione Esoterico in giochi possono migliorare notevolmente l'regno delle possibilità in un livello / mondo.

Eiffel, Erlang, OCaml, Haskell. Queste sono tutte le lingue "di nicchia" per la maggior parte dei programmatori là fuori, ma sono pratici all'interno delle loro domini. La tua domanda semplicemente non ha senso, si potrebbe ben chiedere "Ci sono buone lingue che noi non usiamo in domini problema popolari?"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top