Ora, l'approccio KISS ai linguaggi di programmazione è una nozione divertente, almeno se si considera che i linguaggi di programmazione siano un livello di astrazione per il set di istruzioni di una CPU, ecc. Se non si definisce "KISS" più da vicino. Sto solo dicendo che un carro da buoi è KISS applicato a un'auto al massimo.
Ora un'altra interpretazione di KISS potrebbe essere qualcosa come "elegantemente fatto senza ornamenti inutili e non eccessivamente complicato". Soprattutto si potrebbe obiettare che non ci dovrebbero essere troppi casi specifici per cose simili, ecc. Di solito la matematica è abbastanza brava a far bollire le cose nella sua essenza, e - o chiedo - i matematici hanno passato un po 'di tempo a pensare anche alla programmazione e ai computer .
Per la programmazione esistono 2 modelli astratti piuttosto famosi:
- Uno è il turing machine che definisce una macchina e un semplice modello di istruzione in grado di calcolare tutto ciò che un computer potrebbe fare.
- L'altro è il Lambda-Calculus di Church et. al. è equivalente in potenza
La cosa divertente è che, sebbene il turing machine sia piuttosto semplice nel suo layout, non è un sistema facile da gestire e non credo che sia adatto per "smart KISS". Ma Lambda Calculus ha più a che fare con i linguaggi di programmazione che conosciamo - e con le caratteristiche pionieristiche di Lisp e Scheme del calcolo lambda si è fatto strada in molte lingue.
Lisp e Scheme sono REALMENTE semplici, almeno per quanto riguarda la sintassi. La sintassi è un grosso problema con i linguaggi di programmazione (che è probabilmente il motivo per cui sono reinventati in ogni momento). Nel caso del C ++ è quasi impossibile per il cervello umano prevedere come alcune linee di origine vengono interpretate dal compilatore.)
I Lisps stanno riducendo la complessità sintattica del tutto introducendo un modulo comune per i comandi:
(command param1 param2 ...)
Questa può essere una chiamata al metodo, come
(max 1 2 3 4)
così come un ramo if, loop ecc.
(if (< 1 2)
(write 4)
(write 5))
(tutto il codice qui è pseudo-Lisp / Dialect agnostic)
Il modulo
(command param1 param2 ...)
può anche essere interpretato come una lista
(item1 item2 item3)
E questa è la base della semplicità e della bellezza di Lisps. Poiché gli elenchi annidati (come nell'esempio di istruzione if
) costituiscono alberi e possono essere facilmente compresi sia dalla macchina che dall'essere umano davanti alla macchina.
Un'altra caratteristica dei Lisps sono macro non entrerò nei dettagli sporchi qui, ma poiché non c'è differenza sintattica tra le normali chiamate di funzione e "Sintassi (egg for loops, dichiarazione delle variabili, ecc. ., tutto ciò che il parser deve gestire in altri linguaggi di programmazione) è possibile creare la propria sintassi. I macro sono in pratica Manipolazioni dell'albero che costituisce il programma.
Penso che Lisp abbia un BACIO di programmazione. Il fatto che sia possibile manipolare la sintassi utilizzando le macro ha portato a un fenomeno che il Lisp si è evoluto in modo abbastanza dinamico. Hai bisogno di una nuova funzionalità di linguaggio come - diciamo orientamento agli oggetti - basta scrivere un sistema OOP con macro!
Mentre C è stato esteso a rotatoria 2 volte con le funzionalità OOP (C ++, Obj. C) Lisp è stato esteso più volte, alla fine c'è stato un vincitore.
Questa è un'altra stranezza su Lisp, si evolve (vedi Clojure e Clojurescript per interessanti nuove Mutation of lisp).
Per le sue proprietà KISS, il Lisps è preferito come lingua di insegnamento da alcuni. Come Fogus delinea nel suo progetto di un linguaggio educativo ( link )
To start, I’m strong believer that when learning new, and at times complex topics it’s outright detrimental to overload students with frivolous syntax rules. Therefore, Enfield is designed with minimal syntax rules and what’s more minimal than a Lisp like syntax.