esoteric languages - language - ¿Hay algún uso práctico para un lenguaje esotérico?
esolang (16)
¿Conoces algún ejemplo de un lenguaje esotérico usado para escribir cualquier programa del mundo real de uso práctico? ¿Existe algún dominio de la informática, aunque oscuro, en el que un lenguaje esotérico haya demostrado ser útil para resolver un problema específico?
¡¡¡seguridad en el empleo!!!
Algunas clases de lenguajes de programación esotérica tienen aplicaciones en informática teórica.
Los tarpits de Turing tienen usos para ilustrar ciertos resultados en la teoría de la computabilidad y el problema de la detención. Vea, por ejemplo, el trabajo de Ianov (hay un resumen un poco más accesible en la mitad de este artículo ).
Los resultados fundamentales para las clases de máquinas de Turing son otra aplicación práctica. Por ejemplo, Wikipedia señala que P'''' fue "el primer lenguaje de programación estructurado imperativo ''sin GOTO'' que se probó como Turing-completo".
La lógica combinatoria binaria es una herramienta útil para analizar la complejidad de Kolmogorov .
Aplicaciones del mundo real, ¿eh?
El juego Lost Kingdom ganó el Primer Concurso Anual de Aventura de Texto 2k Clásico en 2004, y ha sido (re) escrito y mejorado por el autor original en brainfuck
¿Qué tal un bot IRC en Befunge o este editor de texto ? Y supongo que si te gusta escribir en lenguajes esotéricos, podrías considerar muy útil un compilador de C o un compilador de C o muy bueno ...
Desarrollar un lenguaje esotérico es como crear un Mandala . Después de las terminaciones del trabajo puedes olvidarlo o incluso destruirlo.
Eiffel, Erlang, Ocaml, Haskell. Estos son todos los lenguajes "nicho" para la mayoría de los programadores, pero son prácticos dentro de sus dominios. Su pregunta simplemente no tiene sentido, podría estar bien preguntando "¿Hay algún idioma bueno que no usemos en los dominios de problemas populares?"
El único beneficio práctico que veo, es que si escribiera código en un lenguaje esotérico, causaría que piense en los problemas de maneras nuevas e interesantes. Aprender nuevas formas de abordar los problemas se beneficiará incluso cuando vuelva a programar en un lenguaje general.
El año pasado leí "Annotated Turing" de Charles Petzold. Ciertamente no tengo ninguna intención de programar una máquina de Turing, al menos como él la describe. Pero pensar en resolver los problemas con su "lenguaje" estiró mi mente. Soy un mejor programador de C # para ello.
Entendiendo la máquina de Turing, la computabilidad y teniendo un sentido práctico de lo que implica la teoría de la computación. Todos los beneficios prácticos se pueden obtener si utiliza un lenguaje esotérico como cerebro ****.
Estoy seguro, hay otros también.
Entre otros usos, el mínimo podría usarse como (cajas negras) / (lenguajes de algoritmo de espacio aislado) para búsquedas algorítmicas, para usos de búsqueda tales como programación basada en restricciones y soluciones en evolución.
Existe un lenguaje llamado piloto. Es un lenguaje interpretativo escrito en Dartmouth BASIC (un lenguaje interpetivo). Su uso inicial fue para profesores que no estaban programados para poder programar sus exámenes. Todos los comandos en el idioma son letras individuales y la letra utilizada define qué opciones están disponibles. Es antiguo (lo aprendí en 1976) y, por lo que puedo decir, ya no tiene ningún uso.
Inspirado por esta pregunta y su respuesta, yo también he encontrado un uso práctico para ese lenguaje: GolfScript , un lenguaje diseñado específicamente para el código de golf:
GolfScript es un lenguaje de programación esotérico orientado a la pila destinado a resolver problemas (agujeros) con la menor cantidad de pulsaciones posibles. También pretende ser simple y fácil de escribir.
Ahí lo tienes, directamente de la gente que lo escribió. Aunque podría ser discutible si el código del golf es un asunto práctico, mi creencia personal es que se acerca lo más posible a algo que tú y yo podríamos escribir y encontrar, sin mencionar que es un ejercicio de programación divertido y una competencia. Con muchos fans. Así que ... si los juegos, el fútbol y todo tipo de otras actividades de entretenimiento son de alguna manera u ... prácticas ... Me siento libre de incluir el código de golf también :)
La ofuscación de códigos es un uso práctico muy común :-p
Y no sé si la familia APL / J / K podría llamarse esotérica, pero se han utilizado en sistemas de producción desde hace mucho tiempo.
No hay un uso práctico para un lenguaje de programación esotérico, casi por definición. Sin embargo, solo porque no puedas usarlos , no significa que no sean útiles .
tl; dr:
- Los resultados no deterministas resaltan la no determinancia de toda la programación basada en thread
- Los tarpits de Turing destacan cómo ningún lenguaje de programación es más poderoso que cualquier otro (si ambos son Turing-complete ), distinguiendo así el "poder computacional" del "poder expresivo".
- Forzan el pensamiento lateral y son enigmas.
Por ejemplo, cuando observa los lenguajes de programación esotéricos, puede dividirlos en categorías: algunos se crean como bromas, algunos se crean solo por diversión, algunos se crean como tarpits de Turing, pero también se crean algunos para demostrar o ilustrar un punto. Y estos son realmente útiles para exactamente eso: ilustrar un punto, tal vez en una clase de lenguajes de programación, tal vez para la comunidad o para la industria. A pesar de que son inútiles para propósitos prácticos, son útiles para propósitos educativos.
Tomar lenguajes de programación esotéricos no deterministas. Estos son lenguajes de programación para los cuales la semántica de evaluación de ciertas expresiones no está definida de manera determinista, sino por ejemplo, probabilísticamente o basada en la fase de la luna o algo así. Si te fijas en la definición de tal lenguaje, inmediatamente pensarás: "Bueno, eso es simplemente estúpido". ¡Y es! (Por ejemplo, el programa Hello World en Java2k es casi una página de código, y ni siquiera se garantiza que imprima "Hello World" todas las veces, solo la mayor parte del tiempo). Y, sin embargo, la mayoría de los lenguajes de programación actuales tienen Modelos de concurrencia no deterministas. IOW: tan pronto como inicias un hilo en Java, C #, Python, Ruby, Perl, incluso Erlang o Clojure, tu programa se vuelve tan aleatorio como en el lenguaje esotérico Java2k. Entonces, ¿por qué pensamos que uno es estúpido y aceptamos el otro como normal, a pesar de que son esencialmente lo mismo? Al llevar el no determinismo al extremo y empaquetarlo de una manera divertida, esolangs nos permite hacer esa pregunta.
Otro ejemplo son los tarpits de Turing. Un tarpit de Turing es un eslogan que casi no tiene características pero aún es Turing completo. Tal tarpit de Turing se puede usar para demostrar dos cosas diferentes: puede usarlo para demostrar qué es exactamente lo que hace que algunas lenguas sean más "poderosas" (en el sentido de poder expresivo) que otras. Si buscas en la web, encontrarás personas que preguntan "si Lisp es mucho mejor que Java, ¿por qué no me muestras un programa que puedes escribir en Lisp pero no puedo escribir en Java?". Y, por supuesto, eso es estúpido: ambos idiomas son Turing-completos, por lo que no existe tal programa. Sin embargo, al contrastar Java con, digamos, Brainfuck, puedes mostrar que esto no es una pregunta significativa para hacer.
Y la otra cosa que puede demostrar con los objetivos de Turing es que nunca puede hacer que un lenguaje sea más poderoso (en ambos sentidos de la palabra: potencia computacional y potencia expresiva) mediante la eliminación de características. Parece obvio, pero hay personas que realmente creen que Microsoft debería eliminar el estado mutable de C #, y mágicamente se volvería más poderoso.
En general, los tarpits de Turing son buenos para demostrar la distinción entre el poder computacional y el poder expresivo de un lenguaje de programación.
Otras formas en que eso puede ser útil es que pueden servir como una inspiración para la investigación del lenguaje de programación. Piense en Unlambda, que, como su nombre lo indica, es un lenguaje funcional que no se basa en el cálculo lambda. En otras palabras: es un lenguaje funcional que no tiene funciones.
Y por último, pero no menos importante, esolangs puede obligarte a ver un problema desde un ángulo completamente diferente (sí, lo admito, es sobre todo un ángulo incómodo, pero algunos directores de cine (Hitchcock, por ejemplo) deben toda su carrera a mirar a las cosas desde ángulos incómodos) y se burlan de tu cerebro como un buen rompecabezas. Es decir, por ejemplo, toda la razón de la existencia y el nombre de Brainfuck.
Por supuesto; Fungot, el bot IRC: http://zem.fi/~fis/fungot.b98.txt
Si hay un uso práctico de un lenguaje, no se llamaría esotérico . Los dos términos son mutuamente excluyentes.
Si juzgas solo por el enlace de Wikipedia :
Un lenguaje de programación esotérico (a veces acortado a esolang) es un lenguaje de programación diseñado como una prueba de los límites del diseño del lenguaje de programación de una computadora, como una prueba de concepto o como una broma. Generalmente no hay intención de que el lenguaje sea adoptado para la programación del mundo real.
entonces, no , no hay una aplicación práctica de tal lenguaje a un problema real.
Las razones no son insultos a los idiomas, se centran en "práctico":
- En la práctica, si estás resolviendo un problema, necesitas poder convencerte de que lo has resuelto. Si está usando un lenguaje que está diseñado específicamente para ser difícil de leer, será difícil inspeccionar visualmente su solución y decir "Sí, esto es correcto".
- En la práctica, no estás trabajando en el vacío. En la vida real, siempre estás trabajando con un grupo distinto de cero de otras personas (incluso si solo eres tú en el futuro). Alguien más tendrá que mantener su solución, agregando una característica aquí, solucionando un problema allí o, peor aún, tratando de documentar lo que hizo y por qué.
- Si ni 1 ni 2 se aplican, ha creado una solución a un problema que es (a) trivialmente fácil de inspeccionar y (b) nunca requiere mantenimiento porque nunca se usa en la práctica. Es, por lo tanto, un problema trivial / no práctico.
Colorforth es muy potente y práctico.
OKAD y GA4 en 290K