De un lenguaje de programación razonablemente común, ¿cuál es el más alucinante?
He estado escuchando muchos podcasts de programación y tomándome algo de tiempo para aprender algunos idiomas nuevos que se consideran próximos e importantes. No estoy necesariamente hablando de BrainFuck , pero ¿qué lenguaje considerarías que desafía los paradigmas de programación comunes?
Para mí, hice algo de programación funcional y lógica (por ejemplo, Prolog ) en la década de 1990, así que no puedo decir que encuentre algo especial allí.
Estoy lejos de ser un experto en ello, pero incluso hoy el lenguaje de programación más alucinante para mí es Perl . No porque "Hello World" sea difícil de implementar, sino que hay tanta flexibilidad léxica que algunas de las soluciones más difíciles pueden descomponerse tan poéticamente que tengo que salir de mi terminal para despejar mi cabeza. No estoy diciendo que probablemente venda una implementación de software comercial, solo que hay una razón clara por la que Perl es tan (in) famoso. Basta con mirar la lista básica de libros que contiene.
Entonces, ¿cuál es su lenguaje alucinante que promueve su mejor programación y prácticas ?
fuente
Respuestas:
APL
Este lenguaje es muy potente y muy concisa, que va a hacerle daño a su cerebro.
Para empezar, es difícil de usar sin un teclado personalizado, o al menos una superposición de teclado para mostrar todos los símbolos oscuros que usa.
Entonces el lenguaje es del paradigma basado en vectores / matrices y se especializa en álgebra lineal compleja. La versión original ni siquiera tenía construcciones de bucle, todo se hacía encadenando operadores de matriz bastante inusuales.
strip_tags()
¿cualquiera? (tomado de Wikipedia)fuente
Haskell . Está muy cerca de ser puramente funcional, a lo que la mayoría de la gente no está acostumbrada; muy exigente, lo cual es útil una vez que sabes lo que estás haciendo pero frustrante hasta entonces; tiene una sintaxis bastante críptica, altamente simbólica, que es genial una vez que la conoces, pero opaca antes de eso ... la lista continúa.
Además, es simplemente imposible formatear las cosas de una manera que me parezca bien.
fuente
Prólogo. Era tan diferente a cualquier otro idioma que había usado cuando me expuse por primera vez. Me gusta, así que no odio la sintaxis ni nada.
fuente
!
).Estaré de acuerdo contigo en Perl. Es la sintaxis más fea que he visto. Dicen que incluso los desarrolladores de Perl no pueden recordar lo que escribieron al día siguiente.
fuente
Tendría que decir Forth . La notación de que todas las operaciones son manipulaciones de pila. En su forma pura, no hay variables locales para usar.
fuente
Rubí .
Esto me da ganas de suicidarme:
(Podría tener la sintaxis exacta incorrecta, pero entiendes el punto).
fuente
DateTime.Now.AddMonths(1);
? Estas características apenas hacen que el código sea más legible. (No estoy diciendo que C # tiene la mejor sintaxis que puede cambiarlo a cualquier convención idiomas y de él todavía aplicar..)Brainfuck
Cualquiera que honestamente pueda escribir esta burla de un idioma ni siquiera debería necesitar un hilo como este.
Hola Mundo (punteros, izquierda; explicación, derecha):
fuente
Lisp es mi último lenguaje alucinante.
He llevado las mónadas y la programación funcional de Haskell conmigo, y ahora tengo macros para trabajar. Acabo de entrar en CLOS y no he tocado el sistema de condición en absoluto.
fuente
PAPERAS
Este es un lenguaje que aparece de vez en cuando en las historias en línea y tiene el honor adicional de estar en uso real de producción almacenando información crítica de seguridad de la vida (es decir, registros de pacientes). Sin embargo, este también es un lenguaje en el que se aprecia la brevedad y funciones como las siguientes pueden aparecer en el código de producción (ejemplo del artículo de Wikipedia sobre el tema):
fuente
Yo diría que Coq , u otra implementación de la teoría del tipo dependiente. El sistema de tipos de Haskell no es muy expresivo comparativamente. Pasar a un sistema de tipos más expresivo (por ejemplo, el cálculo de construcciones (CoC)) le permite hacer algunas cosas interesantes, como probar las propiedades de los programas dentro del lenguaje e incorporar invariantes fuertes en sus tipos que se pueden verificar de forma estática.
fuente
Objetivo-C . Para ser justos, solo lo estudié muy brevemente y no me gustó tanto la sintaxis a primera vista que me di por vencida.
Dado que es un lenguaje tan (relativamente) común (principalmente para el desarrollo de Mac / iPhone / iPad ), estoy seguro de que en realidad es algo decente una vez que te acostumbras.
fuente
[foo bar]
es solo azúcar sintáctico para elobjc_sendMsg(foo, "bar");
que a su vez busca el puntero de función (es una "barra" especial, no genérica). ¿Te diste cuenta de que está completamente tipeado?[receiver doStuff:arg]
se parece bastante a un Java dinámicoYo escojo mercurio .
Mercurio se inclinó al mostrarme que incluso los lenguajes puros pueden hacer E / S .
La forma en que esto funciona es que las funciones de E / S en Mercurio toman un valor de "estado del mundo" y devuelven un nuevo valor de "estado del mundo". Entonces, las funciones de E / S en Mercurio transforman el mundo y, por lo tanto, se mantiene la pureza.
fuente
Tiene que ser Scheme , seguramente. Intentar explicar
call-with-current-continuation
siempre me duele el cerebro, pero una vez que lo entiendes, puedes hacer soluciones increíblemente elegantes.¿Quiere detenerse a medio camino a través de un algoritmo y control manual para otra persona? ¡Seguro!
¿Quiere reanudar la misma continuación varias veces? ¡Por supuesto!
¿Desea pausar la ejecución de un algoritmo, redefinir una función y luego reanudar la ejecución con la pila original pero con un estado global actualizado? ¡No hay problema! ¿Y esto varias veces con diferentes cambios en el estado global pero el mismo punto de reingreso de la pila? ¡Para usted, señor, cualquier cosa!
fuente
Solía usar un antiguo editor llamado TECO (Text Editor and COmparator), que era un lenguaje de modificación de texto muy poderoso, con todo tipo de capacidad macro. No recuerdo exactamente la famosa cita al respecto, pero la esencia era "cualquier colección aleatoria de 20 caracteres es casi siempre un programa TECO legítimo, y cambiará su archivo (es un editor) de una manera fundamentalmente impredecible. Recuerdo haber escrito un convertidor de Fortran a PL1 en aproximadamente una página de código TECO.
fuente
El montaje ha sido lo más "alucinante" para mí, pero recién lo estoy comenzando.
fuente
Lisp . Aprenderlo es una serie de pequeñas epifanías, cada una de las cuales cambiará totalmente tu forma de pensar sobre la resolución de problemas de programación.
fuente
REBOL
Está construido alrededor de la noción de código como datos, como lo es Lisp . Los seguidores del lenguaje tienen dificultades para explicar cuáles son sus beneficios únicos sobre otros enfoques en esa familia, y generalmente terminan encogiéndose de hombros y diciendo algo como "Bueno, el tipo que diseñó el AmigaOS se le ocurrió, la biblioteca estándar está incluida y es microscópica, y una vez que lo consigas, será como tomar la píldora roja de Matrix y nunca querrás volver ".
El problema con esto es en parte que es peculiar y no ha definido con precisión qué programadores son su mercado. Pero también en parte porque muchas de las personas que lo defienden simplemente apestan al explicar . :)
Pero Douglas Crockford solía ser un fanático, se inspiró en él con la creación de JSON y sugirió que la gente lo investigara tan recientemente como octubre de 2010:
Creo que vale la pena mirar para cualquiera que quiera ampliar su forma de pensar sobre el diseño y la extensibilidad del lenguaje. Ahora que es de código abierto (después de 18 años de desarrollo patentado), las advertencias habituales que solía dar para mantenerlo al alcance de la mano ya no se aplican ... ¡vale la pena echarle un vistazo! La comunidad incluso salió de su programa patentado de mensajería basado en Rebol y comenzó a chatear en Stack Overflow (¡para mi sorpresa!)
fuente
Diría por lo que hacen muchas personas para evitar tener que escribirlo directamente, que los desarrolladores consideran que SQL es alucinante. Supongo que muchas personas simplemente no piensan naturalmente en términos de conjuntos.
fuente
Puro
Pure es un lenguaje funcional basado en la reescritura de términos. Me gusta, es escaso y expresivo, aunque un poco subestimado.
fuente
Puede que no sea lo más alucinante, pero ha sido con mucho lo más difícil de aprender (¡pensé que Haskell y el lenguaje ensamblador eran más fáciles!)
Ese es el conjunto de lenguajes HDL , en particular, VHDL (y Verilog en menor medida)
Superar el hecho de que cada "función" se ejecuta al mismo tiempo es increíblemente difícil y no se puede evitar el cambio a paralelizar absolutamente todo. Por supuesto, esto es solo un lenguaje de programación límite.
fuente
Tcl
Empecé a aprenderlo una vez, pero como aprendí lo suficiente como para tener sentido, realmente no me gustó la forma en que me hizo sentir el cerebro. Eso parecería calificar como alucinante.
fuente
Turing lenguaje máquina , obviamente. Es extremadamente poderoso, probablemente superior a todos los demás lenguajes de programación que existen, y garantiza que dañará su cerebro si intenta usarlo.
fuente
C
Los punteros, la gestión de la memoria y la conversión de tipos requieren mucha atención y es fácil equivocarse. La falta de estructuras de datos integradas, como tablas o listas hash, significa que debe idear la suya o buscar una biblioteca de terceros y aprender su API.
fuente
JESS (Java Expert System Shell). Integrada en un entorno Java, esta adaptación de CLIPS es un lenguaje de sistema experto basado en reglas funcionales. Intentar mapear objetos Java reales como hechos y encontrar las preguntas correctas para obtener los resultados que espera es un verdadero desafío. Menos si está familiarizado con la teoría de sistemas experta, pero cuando proviene de una mentalidad pura de OOP, no encaja bien. NOTA: CLIPS no es Lisp, pero lo parece. Otra dobladora mental.
Una vez que pasa la curva de aprendizaje inicial, es bastante poderoso y muy rápido encontrar las respuestas.
fuente
TeX cuenta como un lenguaje, ya que es Turing completo , y lo considero bastante alucinante. Un lenguaje para la composición tipográfica de matemáticas (y libros sobre programación) ...
fuente
CIL
CIL, el lenguaje intermedio común con el que compilan todos los programas .NET , una especie de ensamblaje orientado a objetos. Es interesante para mí intentar escribir o leer código en él y comparar sus construcciones con las de C # que ya conozco. Es una buena manera de aprender más sobre lo que hace .NET detrás de escena. Y puede ser útil para cosas como la generación dinámica de código o la reescritura de código compilado existente usando Mono Cecil .
fuente