Ahora, el enfoque de KISS para los lenguajes de programación es una noción divertida, al menos si considera que los lenguajes de programación son una capa de abstracción para el conjunto de instrucciones de una CPU, etc. Si no define "KISS" más de cerca. Solo digo aquí, que una carreta de bueyes es KISS aplicada a un automóvil al máximo.
Ahora, otra interpretación de KISS podría ser algo así como "hecho inteligentemente sin adornos innecesarios y no demasiado complicado". Especialmente se podría argumentar que no debería haber demasiados casos específicos para cosas similares, etc. Por lo general, las matemáticas son bastante buenas para resumir las cosas en su esencia, y, sorprende, los matemáticos también han pasado algún tiempo pensando en la programación y las computadoras. .
Para la programación, existen 2 modelos abstractos bastante famosos:
- Una es la máquina de Turing que define una máquina y un modelo de instrucción simple que es capaz de calcular todo lo que una computadora podría hacer.
- El otro es el cálculo Lambda de Church et. Alabama. eso es equivalente en poder
Lo divertido es: si bien la máquina de Turing es bastante simple en su diseño, no es un sistema fácil de manejar y no creo que califique para "KISS inteligente". Pero el cálculo Lambda tiene más que ver con los lenguajes de programación que conocemos, y con las características pioneras de Lisp y Scheme del cálculo lambda, ha llegado a muchos lenguajes.
Lisp y Scheme son REALMENTE simples, al menos en cuanto a sintaxis. La sintaxis es un problema importante con los lenguajes de programación (por lo que probablemente se reinventan todo el tiempo). En el caso de C ++, es casi inmanejable para el cerebro humano predecir cómo el compilador interpreta algunas líneas de origen).
Lisps está reduciendo la complejidad sintáctica por completo mediante la introducción de una forma común para los comandos:
(command param1 param2 ...)
Esto puede ser una llamada a un método, como
(max 1 2 3 4)
así como una rama, bucle, etc.
(if (< 1 2)
(write 4)
(write 5))
(todo el código aquí es pseudo-Lisp / Dialect agnóstico)
La forma
(command param1 param2 ...)
también se puede interpretar como una lista
(item1 item2 item3)
Y esa es la base de la simplicidad y belleza de Lisps. Debido a que las listas anidadas (como en el ifejemplo de la declaración) constituyen árboles y esos pueden ser fácilmente entendidos tanto por la máquina como por el humano frente a la máquina.
Otra característica de Lisps son las macros . No entraré en detalles sucios aquí, pero dado que no hay una diferencia sintáctica entre las llamadas a funciones normales y "Sintaxis (huevo para bucles, declaración de variables, etc.), todo lo que el analizador tiene que manejar en otros lenguajes de programación) puede crear su propia sintaxis Las macros son en esencia Manipulaciones del árbol que constituye su programa.
Creo que Lisp tiene un BESO para programar. El hecho de que pueda manipular la sintaxis mediante el uso de macros ha llevado a un fenómeno que Lisp ha evolucionado de forma bastante dinámica. Necesita una nueva función de lenguaje como, digamos orientación de objeto, ¡simplemente escriba un sistema OOP con macros!
Si bien C se extendió en la rotonda 2 veces con las características de OOP (C ++, Obj. C) Lisp se extendió varias veces, al final hubo un ganador.
Esa es otra peculiaridad de Lisp, evoluciona (ver Clojure y Clojurescript para una nueva mutación interesante de lisp).
Por sus propiedades KISS, Lisps es favorecido como enseñanza de idiomas por algunos. Como Fogus describe en su plano de un lenguaje educativo ( http://blog.fogus.me/2013/01/21/enfield-a-programming-language-designed-for-pedagogy/ )
Para empezar, creo firmemente que al aprender temas nuevos y, a veces, complejos, es totalmente perjudicial sobrecargar a los estudiantes con reglas de sintaxis frívolas. Por lo tanto, Enfield está diseñado con reglas de sintaxis mínimas y lo que es más mínimo que una sintaxis similar a Lisp.