¿Hay algún lenguaje de programación que siga un enfoque de desarrollo minimalista?

26

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.

Joan Venge
fuente
77
Un campo de trabajo de la mayoría de los desarrolladores es resolver problemas de manera efectiva. La efectividad requiere aprender cosas nuevas, constantemente. Nuevas características del lenguaje, nuevos marcos, nuevas herramientas se desarrollan para ser más efectivas. Al aprenderlos, en realidad te estás enfocando en tu trabajo.
Arseni Mourzenko
44
Bueno, no todos los que programan son necesariamente programadores de tiempo completo. Es solo otra herramienta para muchas otras profesiones.
Joan Venge
44
Entonces, de nuevo, nadie te obliga a aprender nada. Si C # 1.0 resuelve sus requisitos, no pierda su tiempo aprendiendo algo que no necesita.
Arseni Mourzenko
11
Creo que la pregunta es legítima: ¿por qué deberíamos aplicar los principios KISS y YAGNI a los artefactos de software pero no a los lenguajes de programación? Cuando un idioma tiene suficientes características centrales, el desarrollo posterior (IMHO) se debe principalmente al marketing (competencia con otros idiomas que obliga a las empresas a rellenar idiomas con características para mantener a sus clientes).
Giorgio
2
@MainMa: "La efectividad requiere aprender cosas nuevas, constantemente": un lenguaje de programación complejo, repleto de demasiadas funciones puede disminuir la efectividad en lugar de aumentarla. Por ejemplo, en un equipo, puede llevar a diferentes desarrolladores a usar diferentes subconjuntos del lenguaje, haciendo que las revisiones de código, la corrección de errores y el mantenimiento sean menos eficientes.
Giorgio

Respuestas:

32

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: condfunction in lisp; ifTrue:/ ifFalse:family of messages en Smalltalk implementan un condicional, donde otros idiomas tienen ifpalabras 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).

herby
fuente
44
Las buenas implementaciones de Lisp pueden competir con C, las buenas implementaciones de Smalltalk pueden competir con C ++. Heck, HotSopt JVM de Oracle, la VM más rápida del planeta, es una VM Smalltalk, ni siquiera usa información de tipo estático para sus optimizaciones.
Jörg W Mittag
99
Esta respuesta es demasiado pequeña para ser constructiva. Carece de detalles o evidencia de apoyo.
Jimmy Hoffa
2
-1 Lisp? LISP ? ¿Seriamente? Después de las Guerras LISP de la década de 1970, los repetidos intentos de una Unidad LISP, y finalmente Common Lisp? No, incluso LISP no llegó a "hecho" en 1.0.
Ross Patterson
1
Creo que señaló una idea muy importante: que un lenguaje debe construirse alrededor de una (o algunas) metáforas unificadoras fuertes, es decir, un lenguaje de programación debe ofrecerle una forma de organizar sus pensamientos. Creo que la complejidad de algunos idiomas se debe en parte a la falta de una metáfora: estos lenguajes siguen creciendo al incorporar nuevas características porque no tienen una visión unificadora subyacente.
Giorgio
6

TeX , el sistema de composición tipográfica, ha sido muy estable desde la versión 3.

Desde la versión 3, TeX ha utilizado un sistema de numeración de versiones idiosincrásico, donde las actualizaciones se han indicado agregando un dígito adicional al final del decimal, para que el número de versión se acerque asintóticamente a π. Esto es un reflejo del hecho de que TeX ahora es muy estable y solo se anticipan actualizaciones menores. La versión actual de TeX es 3.1415926; se actualizó por última vez en marzo de 2008. El diseño se congeló después de la versión 3.0, y no se agregarán nuevas características o cambios fundamentales, por lo que todas las versiones más nuevas contendrán solo correcciones de errores. Aunque el propio Donald Knuth ha sugerido algunas áreas en las que TeX podría haber mejorado, indicó que cree firmemente que tener un sistema sin cambios que produzca la misma salida ahora y en el futuro es más importante que la introducción de nuevas características. Por esta razón, ha declarado que el "

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.

Steven Schlansker
fuente
6

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.

Peter Smith
fuente
1
Estoy de acuerdo con el diseño minimalista de C. Incluso si el lenguaje se actualizó durante los años, el diseño básico y el modelo de programación del lenguaje siguen siendo reconocibles (otros idiomas experimentan una revolución cada 5 a 10 años). Por supuesto, C no es un lenguaje de propósito general como solía serlo, porque ha sido reemplazado por otros lenguajes en dominios de aplicación específicos (aplicaciones de escritorio, aplicaciones web, etc.).
Giorgio
@ Jorge: No todos. Los mínimos (como los que mencioné) no lo hacen. No hubo cambios en la sintaxis de Smalltalk desde su inicio, excepto uno, introducido por Squeak: las matrices calculadas con rizado. La biblioteca también es muy estable en el núcleo ( Behaviory las Collectionjerarquías). Me parece que C es mucho menos estable con todos esos C89, C99 y demás.
herby
1
@herby: Probablemente tenga razón en que otros lenguajes como Smalltalk son más estables que C. Sin embargo, el modelo básico de programación de C es el mismo que era, digamos, hace 20 años. Otros idiomas han sufrido cambios profundos. Entonces, de nuevo, no afirmo que C sea el lenguaje más estable, sin embargo, IMO es mucho más estable que muchos otros lenguajes convencionales.
Giorgio
6

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:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Luego ejecutarlo con : squiral -50 50 g 20 0 do 100 f 21 t loop ;te da:

espiral

Crédito al blog de este empleado de Microsoft .

Austin Henley
fuente
1
¿Cómo se votó esto nuevamente? Forth podría ser un buen candidato, pero el ejemplo dado no es mucho mejor que el ruido de línea ejecutable; Un excelente ejemplo de por qué la obsesión de PLT con la brevedad es contraria a lo que los profesionales realmente necesitan.
Telastyn
44
@Telastyn Esa no era su pregunta.
Austin Henley
4

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.

Ramzi Kahil
fuente
2

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.

Egryan
fuente
3
Esto me parece preciso, pero las respuestas de una sola línea sin información o detalles de apoyo son de muy baja calidad para ser útiles para cualquier persona. Agregue algunos buenos detalles (y no solo un enlace sin un resumen) y obtendrá un voto positivo de mí
Jimmy Hoffa
ok, sin embargo, debido a que la pregunta está cerrada, no sé cuánto esfuerzo vale la pena
Egryan
1
Con suerte, se volverá a abrir con los votos. Es una buena pregunta Podría publicar en Meta para tratar de volver a abrirlo si la comunidad no lo vuelve a abrir pronto.
Jimmy Hoffa
Estoy de acuerdo y planeo agregar más a la publicación una vez que salga del trabajo, no tengo ninguna suerte rápida para encontrar los enlaces relevantes
Egryan
Busque en Google "Un estudio de caso sobre el lenguaje TCL", "Tcl: un lenguaje de comando incrustable" y tcl.tk/about/history.html : ofrecen algunos puntos clave. Sin embargo, no estoy seguro de que una copia de seguridad el deseo de la OP - parece que TCL se ha extendido de su original 1.0 (ver wiki.tcl.tk/1721 )
2

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
2

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).

Paul D. Waite
fuente
La fecha de respuesta de diciembre de 2012 le da un pase gratis, porque desde entonces tenemos la monstruosidad conocida como Python 3, que rivaliza con C ++ al querer agregar un montón de basura, al tiempo que elimina la simplicidad. Ahora es uno de los lenguajes infestados de complementos más extraños en informática.
Thomas Browne
-1

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.

usuario132043
fuente
esto simplemente repite el punto hecho y explicado en una respuesta publicada hace dos años
mosquito
Refiriéndome a la publicación original, supongo que solo puedo decir ortogonalidad = historia (la familia de los lenguajes C) y la asimilación reciente en varios idiomas; He visto en todo el sistema operativo un enfoque entre todos los lenguajes para marcos web generalizados MVC, corutinas, etc. Fuera de esa tendencia, puedo notar la notable adición de cierres a C11 y la próxima lambda de Java (que reflejan el desarrollo en el sistema operativo "scripting" langs).
user132043