Creo que cuando los idiomas se consideran iguales que el software comercial, siempre hay una necesidad constante de agregar nuevas funciones para justificar nuevos lanzamientos.
¿Puede haber o hay idiomas donde la versión 1.0 es la versión final? Por supuesto, las correcciones de errores están exentas de esto, pero ¿el conjunto de características sigue siendo el mismo?
De esta manera, todas las características del lenguaje se ajustan bien y no parece que estén atornilladas después del hecho con características obsoletas todavía existentes debido a la compatibilidad con versiones anteriores.
¿Asumo que algunos idiomas académicos son así? Pero, ¿hay idiomas comercialmente exitosos que sigan esta idea? La biblioteca que lo acompaña también es gratuita para obtener nuevas funciones, pero el lenguaje siempre permanece constante.
Un ejemplo que puedo dar es que, uno de mis lenguajes favoritos C #, que uso con bastante frecuencia, cada vez se agregan más funciones. Para aprovechar estas ventajas, tengo que dejar las tareas reales en la mano y dedicar un tiempo considerable a aprenderlas en lugar de poder captar conceptos triviales y combinarlos yo mismo para resolver problemas más complejos con facilidad.
Así que supongo que estoy buscando un enfoque minimalista donde todo sea consistente, tenga sentido y sea lo más ortogonal posible.
Respuestas:
Lisp, Smalltalk. Casualmente, esos también son los mejores idiomas de todo el grupo.
Tanto Lisp como Smalltalk son lenguajes que se basan en una fuerte metáfora unificadora. La metáfora de Lisp es "todo es una lista; esta lista representa tanto datos como código (como funciones)". La metáfora de Smalltalk es "todo es un objeto; la única forma de invocar un comportamiento es pasar un mensaje a un objeto". Estas metáforas permiten que los idiomas sean estables, mínimos y potentes. El resto está en la biblioteca.
Las cosas que se llaman "estructuras de control" en todos los lenguajes no mínimos (quería escribir "hinchado") son partes de la biblioteca aquí (como un ejemplo:
cond
function in lisp;ifTrue:
/ifFalse:
family of messages en Smalltalk implementan un condicional, donde otros idiomas tienenif
palabras clave).Se puede ver que Lisp / Smalltalk son realizaciones casi mínimas de su paradigma y nada más (Lisp: programación funcional; Smalltalk: programación orientada a objetos).
fuente
TeX , el sistema de composición tipográfica, ha sido muy estable desde la versión 3.
No afirmaré que cumple con su "Así que supongo que estoy buscando un enfoque minimalista donde todo sea consistente, tenga sentido y sea lo más ortogonal posible". declaración, pero cumple con la mayoría de sus otros criterios.
fuente
C y Fortran son lenguajes que vienen a la mente. Son muy estables y su sintaxis está fácilmente contenida en la mente. Además de escribir un código incorrecto, hay muy pocas sorpresas al usar estos idiomas. Pero no los consideraría buenos lenguajes para el desarrollo rápido de aplicaciones.
Prefiero el rápido avance de los idiomas con características que una vez que paso un poco de tiempo en ellos, hacen que mi trabajo sea mucho más fácil y que el código sea menos complejo mientras mantengo la expresividad.
fuente
Behavior
y lasCollection
jerarquías). Me parece que C es mucho menos estable con todos esos C89, C99 y demás.Otros ya han dicho Lisp, así que debo mencionar a Forth . Es muy fácil de implementar y las reglas del lenguaje son fáciles de seguir.
Es un lenguaje basado en la pila con un diccionario de "palabras". Puede ampliar fácilmente el idioma utilizando algunas funciones de herencia.
Un ejemplo MUY breve de gráficos de tortuga:
Luego ejecutarlo con
: squiral -50 50 g 20 0 do 100 f 21 t loop ;
te da:Crédito al blog de este empleado de Microsoft .
fuente
Aunque se mencionó a Lisp, el lenguaje más minimalista que conozco es el esquema . Me costó entenderlo en los cursos universitarios donde tenía que hacerlo. Pero cambió mi forma de pensar acerca de la programación, y es muy mínimo. Tan mínimo como toda su sintaxis son paréntesis
()
y espacios.El único cambio en el lenguaje fue la decisión de convertir los primitivos como
+
,define
(y algunos otros) en elementos integrados. Lo que significa que están disponibles en el lanzamiento, pero se pueden redefinir durante el tiempo de ejecución.fuente
Tcl, que fue diseñado para ser minimalista en primer lugar
A partir de ahí, sobre la página http://www.tcl.tk/about/features.html , una de las características es que es muy fácil de aprender y donde los programadores casuales o incluso los no programadores pueden usarlo.
fuente
Hay pocos idiomas que han permanecido relativamente sin cambios desde su inicio fuera del esotérico fuera de los idiomas que es poco probable que sean lo que se desea (odiaría intentar escribir algo significativo en Befunge (aunque también se ha modificado desde su versión original 1.0) lanzamiento)).
Los idiomas que tienen más probabilidades de satisfacer el deseo de no tener que aprender nada nuevo son los idiomas que se especializan en 'pegar' entre otros programas. Idiomas como jcl , bash y similares. Los lenguajes de secuencias de comandos simples también pueden caer en esto: awk es uno de los líderes.
Una vez que uno abandona este reino, ocurre el desarrollo. Ya sea el lenguaje o los marcos. En algunas situaciones, es "difícil" codificar el lenguaje sin obtener parte del marco que se está acelerando rápidamente.
Muchos idiomas tienen cierto grado de compatibilidad con versiones anteriores. Todavía se puede escribir Java 1.4 hoy, aunque probablemente no sea recomendable: los marcos que las personas escriben para él están cambiando más rápido que el idioma. Todavía se pueden encontrar compiladores f77 y f90 para una especificación de idioma que no ha cambiado en 20 o 40 años. C, Objetivo C, C ++ todavía se pueden codificar según las especificaciones más antiguas del lenguaje: no es necesario seguir actualizando el código porque se lanzó una nueva especificación o existe un nuevo marco.
Algunos idiomas tienen una historia bastante larga sin cambios porque el lenguaje en sí es lo suficientemente poderoso como para hacer lo que uno quiera. Lisp es el principal candidato en esta área. Forth también cae en el reino de "no ha cambiado mucho".
Yendo a lenguajes de script más tradicionales, mira TCL, Perl y Python. Evite las cosas que están actualmente en el reino de la 'moda' que están experimentando una explosión de popularidad por alguna razón u otra (ruby y javascript, te estoy mirando). TCL ha cambiado a lo largo de los años , aunque uno de sus objetivos es tratar de mantener una coherencia en el diseño. Perl y Python modernos tienen cierta consistencia de diseño, aunque es cierto que las nuevas características pueden sentirse atornilladas (aunque no es necesario usarlas).
fuente
Creo que Python es un candidato razonable para un lenguaje con minimalismo como uno de sus objetivos de diseño. Se basa en un número relativamente pequeño de los conceptos básicos, y la versión 3 intentado, entre otras cosas, simplificar el lenguaje un poco por la eliminación de algunas de las características.
(De acuerdo, eso no es lo mismo que un conjunto de características que permaneció igual desde la versión 1, pero creo que es una forma bastante arbitraria de evaluar idiomas, dado que los autores de idiomas pueden llamarlo versión 1 cuando lo deseen).
fuente
Creo que el enfoque de diseño "minimalista" sería ejemplificado por Tcl. Como ejemplo, puede usar el comando {catch} con valores {return -code n} para implementar cualquier estructura de control que su imaginación pueda concebir, Perl tuvo que esperar una década para obtener (oficialmente) {switch} - (no ese Perl alguna vez lo necesité) También verá que Dodekalogue http://wiki.tcl.tk/10259 cubre completamente la gramática de Tcl; el resto, sea cual sea el paradigma de programación con el que desee trabajar, puede expresarse en esta gramática.
fuente