El término "Lisp" (o "Lisp-like") es un paraguas para muchos idiomas diferentes, como Common Lisp, Scheme y Arc. Hay una fragmentación similar en otras comunidades lingüísticas, como en ML.
Sin embargo, Ruby y Python han logrado evitar este destino, donde la innovación se produjo más en la implementación (como PyPy o YARV) en lugar de realizar cambios en el lenguaje en sí.
¿Las comunidades Ruby y Python hicieron algo especial para prevenir la fragmentación del lenguaje?
programming-languages
language-design
chrisaycock
fuente
fuente
Respuestas:
Ruby y Python tienen dictadores benevolentes al frente. Son idiomas profundamente arraigados en preocupaciones pragmáticas. Esos son probablemente los factores más importantes que inhiben la fragmentación. Lisp y ML, por otro lado, son más como lenguajes de "diseño por comité", concebidos en la academia, con fines teóricos.
Lisp fue diseñado originalmente por John McCarthy como una notación matemática práctica para programas de computadora. Nunca lo implementó como un lenguaje de programación real; Steve Russell desarrolló la primera implementación , pero no fue un dictador benevolente. Con el tiempo, aparecieron muchas implementaciones diferentes de Lisp; Common Lisp fue un intento de estandarizarlos.
Lisp es más una "familia" de idiomas. También lo es ML, que siguió un camino evolutivo similar a Lisp.
fuente
Un factor probable es simplemente la edad. Lisp y ML son mucho más antiguos que Python y Ruby:
Lisp: 1958
ML: 1973
Python: 1991
Rubí: 1995
Lisp y ML obviamente han visto un cambio mucho mayor en las capacidades de hardware, más tendencias en informática y muchos más estudiantes de doctorado que buscan algo en qué trabajar.
fuente
Son esencialmente todos los lenguajes definidos de implementación
Cuando es fácil crear una nueva implementación de un lenguaje que sea ampliamente compatible con el código existente, los piratas informáticos son piratas informáticos, continúan y lo hacen. Todos escriben una implementación de Lisp en algún momento. Los compiladores de ML son casi obligatorios para los estudiantes de posgrado en diseño de idiomas: después de todo, el idioma está muy bien documentado .
Por otro lado, tenemos los lenguajes ad hoc y definidos por la implementación. O lenguajes que son tan complejos que es una barrera importante para producir una implementación alternativa viable:
Este aparente inconveniente: los lenguajes que son demasiado difíciles de producir alternativas viables, tienen la ventaja masiva : los escasos recursos para desarrolladores se concentran en la única implementación real.
Como nota histórica, varios miembros de la comunidad de Haskell buscaron activamente fusiones y concentración del esfuerzo de desarrollo, reconociendo que cualquier fragmentación de la comunidad de desarrollo significaría que no tendríamos éxito. GHC fue elegido y defendido.
fuente
cabal
no es una herramienta divertida de usar y bastante fácil de romper: Incluso Yesod lo reconoce: yesodweb.com/blog/2012/04/cabal-meta Python y Ruby son mucho mejores en lo que respecta a la gestión de paquetes.Yo diría que un factor es una plataforma definitoria . Para Haskell, la plataforma es el estándar de Haskell y el GHC (me imagino). Para Ruby, fue Ruby on Rails quien "definió" la plataforma de desarrollo Ruby. Para C fue Unix.
Compare eso con Lisp, donde no había una plataforma original que definiera cómo era el lenguaje. Si recuerdo correctamente, cada máquina Lisp tenía ligeras diferencias según el modelo y el fabricante. Common Lisp fue por alguna razón no definitoria. Posiblemente debido a demasiada competencia y renuencia a mudarse a otra plataforma.
Esto es, por supuesto, completamente especulativo de mi parte. El pensamiento surgió de las respuestas al comentario sobre la respuesta de Harvey. Sin embargo, parece que la plataforma de definición tiene muchas formas, pero la propiedad común parece ser que es lo que gana popularidad.
fuente
No olvides sopesar la cultura que impulsa el desarrollo de un idioma.
También consideraría el hecho de que el desarrollo en python / php se realiza activamente en público. Tiene un grupo de personas que establecen una especificación estándar que está disponible gratuitamente para cualquiera / todos.
Al igual que el W3C hace con el estándar HTML / CSS. Tienes un pequeño grupo de personas motivadas que controlan los detalles más finos de lo que el lenguaje está diseñado para lograr. Todo entra en una especificación claramente definida antes de ser lanzado al público.
OTOH, idiomas como LISP son bifurcados a puertas cerradas por profesores u otras personas que realmente creen que su perspectiva sobre el "mejor uso" del lenguaje es correcta. Pueden ser simultáneamente correctos e incorrectos al mismo tiempo porque algunas implementaciones son excelentes en ciertas cosas; mientras que ninguno es el mejor en todo.
Eso no es necesariamente algo malo porque la diversidad genera innovación. Los idiomas como LISP son y seguirán siendo excelentes idiomas para el aprendizaje y la investigación, ya que superan los límites de la comprensión.
Pero las cualidades que hacen que un entorno sea bueno para la innovación no son necesariamente beneficiosas para la estabilidad; Por el contrario, las cualidades que hacen que un entorno sea bueno para la estabilidad no son necesariamente buenas para la creatividad.
Cuando el desarrollo se basa en una colaboración activa, a veces las personas se ven obligadas a conceder en beneficio del todo mayor. Malo para la investigación / bueno para la consistencia.
El hecho es que todavía estamos viviendo en el salvaje oeste del desarrollo del lenguaje de programación. El problema de diseñar el 'lenguaje ideal' es tan grande que, a pesar de los esfuerzos monumentales, nadie se ha acercado a resolverlo.
En el sector de investigación / academia, todavía hay mucho margen de mejora e innovación. En el sector comercial, donde hay un crecimiento exponencial del software que se utiliza en aplicaciones prácticas y la fuerza impulsora es la simplicidad y la coherencia.
Algunos idiomas se especializan en el primero, algunos se especializan en el segundo. Aquellos que intentan especializarse en ambos generalmente no lo hacen muy bien y mueren.
Por ambos, me refiero a lenguajes monolíticos como VB / C # / Java. Es demasiado pronto para decirlo, pero me gustaría ver cómo se ven C # y Python en 10 años. Al ritmo actual, C # está aumentando la funcionalidad y la inconsistencia a un ritmo que lo hace parecer bastante sombrío. Incluso con una excelente documentación, es demasiado doloroso recordar todos los detalles sutiles y las peculiaridades incluidas en el lenguaje. Es genial para un solo desarrollador, pero tan pronto como agregue más desarrolladores con estilos únicos, la inconsistencia en la base de código aumenta, la calidad sufre y nadie gana. Creo que hay mucho que aprender de las dificultades que presenta Perl en un entorno de producción.
fuente
No creo que sea correcto decir que lenguajes como Python y Ruby no están fragmentados. Ya estamos empezando a ver algunos efectos de fragmentación. Por ejemplo, Python 3 no es totalmente compatible con Python 2, por lo que ambas versiones deben mantenerse y muchos de los códigos existentes solo funcionan con Python 2. También hay algunas derivaciones de Python, incluido PyPy.
Otro factor es la edad de los idiomas. Los más sujetos a la fragmentación son los idiomas más antiguos y, por lo tanto, están sujetos a presiones de evolución y revisión. Lisp se inventó hace varias décadas, por lo que ha habido tiempo suficiente para tomar algunas de sus ideas e incorporarlas a nuevos idiomas. C es otro ejemplo de lenguaje fragmentado. Si bien C solo tuvo una revisión realmente importante del lenguaje en sí (K&R a ANSI), ha habido numerosos spin-offs que incluyen C ++, Not Quite C y todos los demás que comparten una sintaxis similar a C.
Ruby en sí es una "fragmentación" (si lo desea) de los idiomas anteriores. Ya que incorpora las ideas de C, Smalltalk, y Perl (entre otros), que es actualmente el idioma haciendo la fragmentación. No veo por qué podríamos no ver una mayor convolución de Ruby con otros idiomas en el futuro.
fuente
Lisp está fragmentado porque es un modelo tan poderoso, el lenguaje más sorprendente jamás concebido. La mayoría de los idiomas actuales toman prestados elementos que se implementaron por primera vez en Lisp, por lo que, de alguna manera, se puede decir que cada idioma es parte de esta fragmentación particular. Smalltalk, por ejemplo, estuvo fuertemente inspirado por Lisp, y Ruby está fuertemente inspirado por Smalltalk. JavaScript es Lisp con un disfraz de Java, etc. Todo está conectado y cada inventor de idiomas selecciona sus piezas favoritas de otros idiomas.
Otro factor es que Lisp es probablemente el concepto de programación más fácil de implementar, razón por la cual se hace una y otra vez.
fuente
Los lenguajes similares a Lisp son demasiado básicos y teóricos para cambiarlos dramáticamente. Los cambios gramaticales (no me refiero a solo cambiar los nombres de los comandos) simplemente no encajarían en la teoría de la programación funcional detrás de ellos.
Pero el hecho de que haya idiomas como lisp muestra que los "cambios" ya se hicieron para lisp de todos modos. En otras palabras, hay idiomas creados por personas que se inspiraron en el lisp o su teoría y crearon un lenguaje nuevo similar.
También hay muchos lenguajes inspirados en Python. Por ejemplo, Julia, CoffeeScript, etc., que formarían su propia familia de lenguajes orientados a objetos sensibles al espacio en blanco.
Creo que los fundamentos básicos de un lenguaje como Python nunca cambiarán realmente. Python está orientado a objetos y, por lo tanto, tiene similitudes con C ++ y Java, pero es dinámico y, por lo tanto, también es similar a muchos lenguajes de script.
Bueno, ¿a quién le importan los idiomas? Lo que cuenta es el propósito: el francés es similar al latín, pero las chicas que entienden el francés son mucho más populares;)
fuente