Agora, a abordagem do KISS às linguagens de programação é uma noção engraçada, pelo menos se você considerar as linguagens de programação uma camada de abstração do conjunto de instruções de uma CPU, etc. Se você não definir "KISS" mais de perto. Só estou dizendo aqui que um carro de boi é o KISS aplicado ao carro ao máximo.
Agora, outra interpretação do KISS poderia ser algo como "feito de maneira inteligente, sem ornamentos desnecessários e não muito complicado". Especialmente, alguém poderia argumentar que não deve haver muitos casos específicos para coisas semelhantes etc. Geralmente, a matemática é muito boa para resumir as coisas à sua essência, e - o que é surpreendente - os matemáticos passaram algum tempo pensando em programação e computadores também .
Para programação, existem 2 modelos abstratos bastante famosos:
- Uma é a máquina de turing, que define uma máquina e um modelo instrucional simples, capaz de calcular tudo o que um computador poderia fazer.
- O outro é o Lambda-Calculus de Church et. al. isso é equivalente em poder
O interessante é que, embora a máquina de turing seja bastante simples em seu layout, não é um sistema fácil de manusear e não acho que se qualifique para "smart KISS". Mas o Lambda Calculus tem mais a ver com as linguagens de programação que conhecemos - e com os recursos pioneiros do Lisp and Scheme do cálculo lambda, ele chegou a muitas linguagens.
Lisp e Scheme são REALMENTE simples, pelo menos em termos de sintaxe. A sintaxe é um grande problema com linguagens de programação (que é provavelmente o motivo pelo qual elas são reinventadas o tempo todo). No caso do C ++, é quase impraticável para o cérebro humano prever como algumas linhas de origem são interpretadas pelo compilador.)
Lisps estão reduzindo completamente a complexidade sintática, introduzindo um formulário comum para comandos:
(command param1 param2 ...)
Pode ser uma chamada de método, como
(max 1 2 3 4)
bem como um ramo if, loop etc.
(if (< 1 2)
(write 4)
(write 5))
(todo o código aqui é independente de pseudo-Lisp / Dialeto)
A forma
(command param1 param2 ...)
também pode ser interpretado como uma lista
(item1 item2 item3)
E essa é a base da simplicidade e beleza dos Lisps. Como as listas aninhadas (como no if
exemplo da instrução) constituem árvores e podem ser facilmente entendidas pela máquina e pelo humano na frente da máquina.
Outro recurso do Lisps são as macros. Não vou entrar nos detalhes sujos aqui, mas como não há diferença sintática entre chamadas de funções normais e "Sintaxe (ovo para loops, declaração de variáveis etc.), tudo o que o analisador precisa manipular em outros linguagens de programação), você pode criar sua própria sintaxe: as macros são essencialmente manipulações da árvore que constituem o seu programa.
Eu acho que Lisp tem um beijo na programação. O fato de você poder manipular a sintaxe usando macros levou a um fenômeno que o Lisp evoluiu bastante dinamicamente. Precisa de um novo recurso de idioma como - digamos, orientação a objetos - basta escrever um sistema OOP com macros!
Enquanto C foi estendido pela rotunda 2 vezes com recursos OOP (C ++, Obj. C), o Lisp foi estendido várias vezes, no final houve um vencedor.
Essa é outra peculiaridade sobre o Lisp: ele evolui (consulte Clojure e Clojurescript para uma nova e interessante mutação do lisp).
Por suas propriedades do KISS, o Lisps é favorecido como ensino de idiomas por alguns. Como Fogus descreve em sua planta de uma linguagem educacional ( http://blog.fogus.me/2013/01/21/enfield-a-programming-language-designed-for-pedagogy/ )
Para começar, acredito firmemente que, ao aprender tópicos novos e, às vezes, complexos, é totalmente prejudicial sobrecarregar os alunos com regras de sintaxe frívolas. Portanto, o Enfield é projetado com regras mínimas de sintaxe e o que é mais mínimo que uma sintaxe do Lisp.