Pergunta

Você conhece algum exemplo de linguagem esotérica usado para escrever qualquer programa de uso prático no mundo real?Existe algum domínio da ciência da computação, por mais obscuro que seja, onde uma linguagem esotérica tenha realmente se mostrado útil para resolver um problema específico?

Foi útil?

Solução

Aplicativos do mundo real, hein?

O jogo Reino perdido Ganhou o primeiro concurso anual de aventura de texto 2k clássico em 2004 e foi (re) escrito e aprimorado pelo autor original em Brainfuck

Que tal um IRC Bot em conquista ou Este editor de texto? E suponho que se você gosta de escrever em línguas esotéricas, você pode considerar um Compilador de Capunção para C ou a Brainfuck para C Compilador muito útil...

Outras dicas

Não há uso prático para uma linguagem de programação esotérica, praticamente por definição. No entanto, só porque você não pode usar eles, não significa que eles não são útil.

tl; dr:

Por exemplo, quando você olha para linguagens de programação esotérica, você pode dividi -las aproximadamente em categorias: alguns são criados como uma piada, outros são criados apenas por diversão, outros são criados como lonas de Turing, mas também existem alguns que são criados para provar ou ilustrar um ponto. E esses são Na verdade, é útil exatamente isso: ilustrar um ponto, talvez em uma aula de linguagens de programação, talvez para a comunidade ou para o setor. Mesmo que sejam inúteis para fins práticos, eles são usadosful Para fins educacionais.

Tome linguagens de programação esotérica não determinísticas. Essas são linguagens de programação para as quais a semântica de avaliação de certas expressões não é definida deterministicamente, mas por exemplo, probabilisticamente ou baseada na fase da lua ou algo assim. Se você olhar para a definição de tal idioma, pensará imediatamente: "Bem, isso é apenas estúpido". E isso é! (Por exemplo, o Hello World Program em Java2K é quase uma página de código, e nem é garantido imprimir "Hello World" sempre, apenas na maioria das vezes.) E, no entanto, a maioria das linguagens de programação de hoje têm Modelos de simultaneidade não determinística. IOW: Assim que você inicia um tópico em Java, C#, Python, Ruby, Perl, até Erlang ou Clojure, seu programa se torna tão aleatório quanto na linguagem esotérica Java2K. Então, por que achamos que um é estúpido e aceitamos o outro normalmente, mesmo sendo essencialmente a mesma coisa? Ao levar o não determinismo ao extremo e empacotá-lo de uma maneira divertida, os ESOLANGS nos permitem fazer essa pergunta.

Outro exemplo é Turing Tarpits. Um tarpit de Turing é um Esolang que quase não possui recursos, mas ainda é preenchido. Esse lona Turing pode ser usado para demonstrar duas coisas diferentes: você pode usá -lo para demonstrar exatamente o que torna alguns idiomas mais "poderosos" (no sentido de poder expressivo) do que outros. Se você pesquisar na web, encontrará as pessoas perguntando: "Se o LISP é muito melhor que o Java, por que você não me mostra algum programa que pode escrever no LISP, mas não posso escrever em Java". E, é claro, isso é estúpido: ambos os idiomas são completos, então não existe esse programa. No entanto, ao contrastar o Java com, digamos, o Brainfuck, você pode mostrar que isso não é uma pergunta significativa a fazer.

E a outra coisa que você pode demonstrar com lonas Turing é que você nunca pode tornar um idioma mais poderoso (nos dois sentidos da palavra: poder computacional e poder expressivo) removendo os recursos. Parece óbvio, mas há pessoas que realmente acreditam que a Microsoft deve remover o estado mutável de C#, e magicamente se tornaria mais poderoso.

Em geral, as lonas de Turing são boas para demonstrar a distinção entre o poder computacional e o poder expressivo de uma linguagem de programação.

Outras maneiras pelas quais as eSolangs podem ser úteis são que eles podem servir de inspiração para a programação da pesquisa de linguagem. Pense em Unlambda, que, como o nome indica, é uma linguagem funcional que é não com base no cálculo lambda. Em outras palavras: é uma linguagem funcional que não possui funções.

E por último, mas não menos importante, as eSolangs podem forçá -lo a olhar para um problema de um ângulo completamente diferente (sim, admito, é principalmente um ângulo estranho, mas ei, alguns diretores de filmes (Hitchcock, por exemplo) devem toda a sua carreira a olhar em coisas de ângulos estranhos) e eles provocam seu cérebro como um bom quebra -cabeça. Ou seja, por exemplo, toda a razão para a existência e o nome do Brainfuck.

seguro desemprego!!!

Se houver um prático Use a um idioma que não seria chamado esotérico. Os dois termos são mutuamente exclusivos.

Compreendendo a máquina de Turing, computabilidade e ter um senso prático do que está implícito na teoria da computação. Todos os benefícios práticos podem ser coletados se você usar uma linguagem esotérica como o cérebro.

Tenho certeza de que existem outros também.

Algumas classes de linguagens de programação esotérica têm aplicações na ciência da computação teórica.

Lonas de Turing têm usos para ilustrar certos resultados na teoria da computação e no problema de parada. Veja, por exemplo, o trabalho de IANOV (Há um resumo um pouco mais acessível Partway Este artigo).

Resultados fundamentais para classes de máquinas de Turing são outra aplicação prática. Por exemplo, a Wikipedia observa que P '' foi "a primeira linguagem de programação estruturada" sem goto-sem "a ser comprovada".

Lógica combinatória binária é uma ferramenta útil para analisar Complexidade Kolmogorov.

Inspirado por essa questão, e sua resposta, eu também encontrei um uso prático para esse idioma: Golfscript, um idioma projetado especificamente para o código de golfe:

O GolfScript é uma linguagem de programação esotérica orientada para a pilha, destinada a resolver problemas (buracos) no menor número possível de teclas. Também pretende ser simples e fácil de escrever.

Lá está você, direto das pessoas que escreveram. Embora possa ser discutível se o Code Golf é ou não uma questão prática, minha crença pessoal é que ele chega o mais próximo possível de algo que você e eu possa realmente escrever e encontrar, sem mencionar que é um exercício de programação divertido e uma competição com muitos fãs. Então ... se os jogos, o futebol e todos os tipos de outras atividades divertidas são de uma maneira ou de outra ... prática ... estou me sentindo livre para incluir o código de golfe também :)

O único benefício prático que vejo é que, se você escrevesse código em uma linguagem esotérica, isso faria você pensar em problemas de maneiras novas e interessantes. Aprender novas maneiras de abordar os problemas se beneficiará mesmo quando você estiver de volta programando em uma linguagem convencional.

No ano passado, li 'Turing anotado' de Charles Petzold. Eu certamente não tenho intenção de programar uma máquina de Turing, pelo menos como ele descreve. Mas pensar em resolver problemas com a 'linguagem' dele esticou minha mente. Sou um programador C# melhor para isso.

Claro; Fungot, o BOT IRC: http://zem.fi/~fis/fungot.b98.txt

Desenvolver de linguagem esotérica é como criar Mandala. Após finais de trabalho, você pode esquecê -lo ou até destruir.

Se você julgar apenas por O link da Wikipedia:

Uma linguagem de programação esotérica (às vezes encurtada para a Esolang) é uma linguagem de programação projetada como um teste dos limites do design da linguagem de programação de computadores, como prova de conceito ou uma piada. Geralmente, não há intenção de o idioma adotado para a programação do mundo real.

então, não, não há aplicação prática de tal linguagem a um problema real.

Os motivos não são insultos para os idiomas, eles se concentram em "prático":

  1. Na prática, se você está resolvendo um problema, precisa se convencer de que você resolveu. Se você estiver usando um idioma que seja projetado especificamente para ser difícil de ler, será difícil inspecionar visualmente sua solução e dizer "sim, isso está correto".
  2. Na prática, você não está trabalhando no vácuo. Na vida real, você está sempre trabalhando com um conjunto diferente de zero de outras pessoas (mesmo que seja apenas você no futuro). Alguém mais terá que manter sua solução, adicionando um recurso aqui, corrigindo um problema lá ou, pior, tentando documentar o que você fez e por quê.
  3. Se nem 1 nem 2 se aplicarem, você criou uma solução para um problema que é (a) trivialmente fácil de inspecionar e (b) nunca requer manutenção porque nunca é usado na prática. É, portanto, um problema trivial / não prático.

colorforth é muito poderoso e prático.

Okad e GA4 em 290K

A ofuscação de código é um uso prático muito comum :-p

E não sei se a família APL/J/K poderia ser chamada de esotérica, mas eles são usados ​​em sistemas de produção há muito tempo.

Existe um idioma chamado piloto. É uma linguagem interpretativa escrita no Dartmouth Basic (uma linguagem interpetiva). Seu uso inicial foi para os professores não programadores poderem programar seus testes. Todos os comandos no idioma são letras únicas e a letra usada define quais opções estão disponíveis. É antigo (eu aprendi em 1976) e até onde eu sei, não tem mais uso.

Entre outros usos, o mínimo pode ser usado como (caixas pretas)/(idiomas de algoritmo de caixa de areia) para pesquisas algorítmicas, para usos de pesquisa, como soluções de programação e evolução baseadas em restrições.

Esta resposta aborda 3 tipos de linguagens de programação esotérica:

  • Idiomas de golfe
  • Lonas de Turing
  • Idiomas em jogos

Os idiomas de golfe são úteis quando você precisa invadir algo para uso único. Em vez de script um programa Python de 100 linhas ou passar por uma onda de depuração porque você cometeu um erro em algo que é incorporado em um idioma de golfe, basta conectar algumas construções e fazer o trabalho mais rápido.

Turpas de Turing são úteis para a criatividade. Você precisa pensar fora da caixa com os poucos comandos que as lonas Turing têm. Em BF, como você converteria os números inteiros dados a você através do programa (que são apenas um monte de valores ASCII) para algo que você poderia lidar (como um único valor de célula)? Como você verificaria a igualdade? Como você adicionaria dois números?

Turpes Turing também são úteis para praticar a organização de código. Quando uma tarefa simples, como adicionar dois números, leva você para criar código PSUDO e ter um layout de todo o programa, você deve organizar seu programa. No BF para adicionar dois valores de células, você precisaria: 1. Decreme o primeiro adendo 2. Incrementar o segundo adendo 3. Loop até que o primeiro adendo esteja vazio.

Os idiomas nos jogos são úteis para melhorar a experiência em mundos/níveis para jogadores desse mundo/nível. No Roblox (embora eu não chamasse sua linguagem de script de "esotérica"), se você apenas colocar algumas partes e modelos em seu mundo, seria divertido? Não. Se você escreveu esses modelos para lutar com você e se equipar com uma arma? Pode ser. No Dash Geometry, você pode dificultar o nível, exigindo que você clique em uma certa quantidade de vezes em sua "linguagem de programação" ou fazê -lo usar pseudo ataques aleatórios em uma luta contra chefes. As linguagens de programação esotérica nos jogos podem melhorar bastante o campo das possibilidades em um nível/mundo.

Eiffel, Erlang, Ocaml, Haskell. Todos esses são idiomas "nicho" para a maioria dos programadores por aí, mas são práticos dentro de seus domínios. Sua pergunta simplesmente não faz sentido, pode estar bem perguntando: "Existem bons idiomas que não usamos em domínios de problemas populares?"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top