La "famiglia" di lingue Lisp è più strettamente imparentata della famiglia "C-like-syntax"?

7

Di recente stavo pensando alla grande varietà di linguaggi di Lisp, in particolare il fatto che tutti hanno una sintassi simile e che tutti potrebbero in teoria essere implementati dallo stesso piccolo insieme di funzioni primitive, il modo in cui si utilizza tipicamente ogni il lisp può variare ampiamente rispetto a tutti gli altri. Mi sono reso conto che si potrebbe plausibilmente fare la stessa affermazione sulla famiglia di lingue con la sintassi "C-like". Tuttavia, la maggior parte dei linguaggi "simili a C" sono comunemente distinti l'uno dall'altro, mentre è comune riferirsi a "lisp" in generale, e non a nessuna variante specifica di lisp.

Quindi, le lingue di tipo C sono molto più diverse le une dalle altre lingue simili a quelle di tipo Lisp? Oppure appaiono così perché hanno una maggiore variabilità nella sintassi? Perché le lingue simili al lisp sono più spesso raggruppate in "lisp"? Nessuno si riferirebbe mai a C, C ++, C #, Java come solo "C".

    
posta Ryan Thompson 09.04.2011 - 03:32
fonte

2 risposte

7

Si tratta davvero dell'uso delle espressioni S della famiglia Lisp. Un potente sistema macro è una caratteristica distintiva di un Lisp, quindi queste espressioni S possono essere facilmente manipolate al momento della macro-espansione per, ad esempio, trasformare leggermente un programma Common Lisp in un programma Scheme.

Ho sviluppato alcuni sistemi in cui un requisito esplicito era quello di eseguire entrambi in SBCL e Chez Scheme. Le lingue sono abbastanza simili da poter scrivere il codice in SBCL, quindi eseguirlo in Scheme caricando un front-end di < 200 e caricando direttamente i file .lisp .

Ancora più importante, si sviluppano particolari modelli di pensiero quando si apprendono qualsiasi Lisp che sia direttamente trasferibile all'apprendimento di un altro. Il "modello di progettazione" principale di Lisp è pensare ai programmi stessi come a cose fluide da manipolare con macro e trasformazioni di elenchi diretti. Troverai questo modello ovunque trovi le S-espressioni, semplicemente perché la omoiconicity lo rende possibile.

Al contrario, i pattern delle lingue delle parentesi graffe non sono tipicamente guidati dalle caratteristiche di una particolare lingua. Invece, alcune lingue supportano paradigmi generali come OOP, e i programmatori in quelle lingue aderiscono a loro a vari livelli a seconda dei loro domini problematici.

Questo può essere un vantaggio per la specializzazione, ma significa anche che non c'è molta coerenza tra i programmatori di una singola lingua. Ho lavorato su grandi applicazioni Java aziendali, ma mi chiede di armeggiare con un grande programma Java desktop come OpenOffice Eclipse e fondamentalmente sto imparando da zero.

Quindi, direi che la famiglia Lisp è in effetti più strettamente correlata, probabilmente a causa del numero notevolmente inferiore di Lisper praticanti, ma anche per il modo unico in cui ogni Lisp fa pensare un programmatore.

    
risposta data 09.04.2011 - 05:07
fonte
1

I linguaggi "simili a C" variano ampiamente nella loro semantica e nelle loro applicazioni: C e C ++ sono linguaggi di sistema di basso livello e JavaScript è molto più vicino a Lisp che a C.

D'altra parte, i linguaggi Lisp (Scheme, Common Lisp, Clojure) sono molto più vicini l'uno all'altro.

    
risposta data 09.04.2011 - 04:24
fonte

Leggi altre domande sui tag