Le macro supportano il dialetto Scala a Lisp?

3

Recentemente ho letto che il supporto macro in Scala è ora ufficiale. Ho controllato la pagina di documentazione e sono reminiscenze a quelle del LISP. In uno dei suoi saggi Paul Graham scrive che quando "aggiungi questo ultimo incremento di potere" a un linguaggio non è più uno nuovo ma un dialetto lisp.

È questo il caso di Scala? Non mi sembra un dialetto LISP per me e il supporto macro in Scala è alquanto imbarazzante per me.

    
posta Adam Arold 30.08.2013 - 14:34
fonte

3 risposte

10

La famiglia di lingue Lisp è un concetto fuzzy. Gli aspetti chiave sembrano essere

  1. Supporto per la programmazione funzionale
  2. Macro
  3. Homoiconic (The text < = > The AST, es. Lisp's love of parens)
  4. Digitato dinamicamente
  5. Garbage Collected

Il grande posto in cui Scala cade è 3. La scala è esilarante non omoiconica e questa non è necessariamente una cosa negativa.

Tuttavia ha un effetto importante: in Lisps, parte di ciò che rende le macro così potenti è che sono così facili. In Common Lisp una macro è letteralmente una funzione che restituisce una lista. Questo è tutto.

In Scala o Haskell (Template Haskell), la meta-programmazione della compilazione del tempo è qualcosa che gli esperti fanno, in Lisp, le macro sono ciò che fanno tutti.

Anche Scala non riesce a scrivere 4 in modo strongmente statico. Esistono modi pragmatici per convincere il compilatore ad accettare un certo livello di digitazione dinamica, ma in questo caso sicuramente stai combattendo la lingua.

Il mio pensiero è che Scala, come molti, è influenzato da Lisp, ma non è un dialetto.

    
risposta data 30.08.2013 - 14:45
fonte
5

No, Scala non è ovviamente un dialetto Lisp in alcun senso significativo. Se guardi cosa dice:

I mention this mostly as a joke, but it is quite true. If you define a language that has car, cdr, cons, quote, cond, atom, eq, and a notation for functions expressed as lists, then you can build all the rest of Lisp out of it.

Quindi, puoi scrivere un dialetto di Lisp basato su Scala, forse anche come DSL interno, ma ciò non significa che tutti i programmi di Scala appartengano a questo dialetto.

    
risposta data 30.08.2013 - 14:45
fonte
2

Non in alcun modo che si possa identificare normalmente un Lisp. Credo che Paul Graham sia un po 'iperbolico qui. È un grande sostenitore delle lingue della famiglia Lisp (ne ha scritto uno lui stesso).

Per quanto ne so, questi sono alcuni dei tratti generali condivisi da tutti i Lisp:

  • Homoiconicity (il codice è dato, il dato è codice - questo è visivamente ovvio dalla struttura di un programma Lisp)
  • Digitazione dinamica (eventualmente con annotazioni di tipo facoltative)
  • Notazione polacca per tutte le chiamate di funzione (solo prefisso, non operatori infissi)

Potresti essere in grado di rimuovere un elemento o più da quelli e continuare a sostenere che la tua lingua è abbastanza vicina alla famiglia Lisp da essere considerata un Lisp. Scala, d'altra parte:

  • Non è omoiconico (con una sintassi più simile a Java)
  • È strongmente tipizzato staticamente
  • Supporta prefissi, infissi e postfissi "operatori" (funzioni)

A meno che tu non definisca semplicemente un Lisp come "Una lingua con le macro", Scala non si adatta al disegno di legge.

    
risposta data 30.08.2013 - 14:43
fonte

Leggi altre domande sui tag