Ora, l'approccio KISS ai linguaggi di programmazione è una nozione divertente, almeno se si considera che i linguaggi di programmazione sono un livello di astrazione per il set di istruzioni di una CPU, ecc. Se non si definisce "KISS" più da vicino. Sto solo dicendo qui che un carro trainato da buoi è KISS applicato a un'auto al massimo.
Ora un'altra interpretazione di KISS potrebbe essere qualcosa di simile "fatto in modo intelligente senza ornamenti inutili e non eccessivamente complicato". Soprattutto si potrebbe sostenere che non dovrebbero esserci troppi casi specifici per cose simili, ecc. Di solito la matematica è abbastanza brava a ridurre le cose alla sua essenza, e - o meraviglia - i matematici hanno trascorso del tempo a pensare alla programmazione e anche ai computer .
Per la programmazione esistono 2 modelli astratti piuttosto famosi:
- Uno è il turing machine che definisce una macchina e un semplice modello didattico in grado di calcolare tutto ciò che un computer potrebbe fare.
- L'altro è il Lambda-Calculus di Church et. al. questo è equivalente al potere
La cosa divertente è: sebbene il turing machine sia abbastanza semplice nel suo layout, non è un sistema facile da gestire e non credo che si qualifichi per "KISS intelligente". 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 molti linguaggi.
Lisp e Scheme sono DAVVERO semplici, almeno per quanto riguarda la sintassi. La sintassi è un grosso problema con i linguaggi di programmazione (che è probabilmente il motivo per cui vengono reinventati continuamente). Nel caso del C ++ è quasi inattuabile per il cervello umano prevedere come alcune linee di origine vengono interpretate dal compilatore.)
I lividi stanno riducendo del tutto la complessità sintattica introducendo un modulo comune per i comandi:
(command param1 param2 ...)
Questa può essere una chiamata di metodo, ad esempio
(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 / dialettale agnostico)
Il modulo
(command param1 param2 ...)
può anche essere interpretato come un elenco
(item1 item2 item3)
E questa è la base per la semplicità e la bellezza di Lisps. Perché gli elenchi nidificati (come nell'esempio delle if
dichiarazioni) costituiscono alberi e quelli possono essere facilmente compresi sia dalla macchina che dall'essere umano di fronte alla macchina.
Un'altra caratteristica di Lisps sono le macro che non entrerò nei dettagli sporchi qui, ma poiché non vi è alcuna differenza sintattica tra le normali chiamate di funzione e "Sintassi (uovo per loop, dichiarazione di variabili, ecc., Tutto ciò che il parser deve gestire in altri linguaggi di programmazione) è possibile creare la propria sintassi Le macro sono in sostanza Manipolazioni dell'Albero che costituisce il programma.
Penso che Lisp abbia un BACIO per la programmazione. Il fatto di poter manipolare la sintassi usando le macro ha portato a un fenomeno che Lisp si è evoluto in modo abbastanza dinamico. Hai bisogno di una nuova funzionalità linguistica come - diciamo l'orientamento agli oggetti - basta scrivere un sistema OOP con macro!
Mentre la C è stata estesa la rotatoria 2 volte con le funzionalità OOP (C ++, Obj. C) Lisp è stata estesa più volte, alla fine c'è stato un vincitore.
Questa è un'altra stranezza su Lisp, si evolve (vedi Clojure e Clojurescript per l'interessante nuova mutazione di lisp).
Per le sue proprietà KISS Lisps è favorito da alcuni come l'insegnamento delle lingue. Come Fogus delinea nel suo progetto di un linguaggio educativo ( http://blog.fogus.me/2013/01/21/enfield-a-programming-language-designed-for-pedagogy/ )
Per cominciare, sono fermamente convinto che quando apprendere argomenti nuovi, a volte complessi, è assolutamente dannoso sovraccaricare gli studenti con regole di sintassi frivole. Pertanto, Enfield è progettato con regole di sintassi minime e cosa c'è di più minimale di una sintassi simile a Lisp.