2012-05-17 17 views

risposta

6

Le citazioni sono una forma di meta-programmazione. Ti permettono di manipolare gli alberi di sintassi astratti a livello di codice, che possono essere convertiti in codice e valutati.

citazioni tipizzati incorporare il tipo reificata del AST nel sistema dei tipi della lingua del paese ospitante, in modo da garantire non è possibile generare frammenti mal digitati di codice. Le quotazioni non classificate non offrono tale garanzia (potrebbe non riuscire con un errore di runtime).

Le citazioni a parte sono fortemente simili alle quasiquotazioni Template Haskell.

macro Hygenic in lingue Lisp-like sono legati, nel senso che esistono per sostenere meta-programmazione. L'igiene però è per la confusione di un semplice nome, qualcosa che ha già quasi evocato le virgolette (e altro).

Quindi sì, sono simili, in quanto sono i meccanismi di meta-programmazione in tipizzati e non tipizzati lingue, rispettivamente. Sia le virgolette quasi digitate che i macro hygenic aggiungono ulteriore sicurezza alla meta programmazione non tipizzata, non corretta. Il livello di garanzia che offrono al programmatore è diverso. Le virgolette tipizzate sono rigorosamente più forti.

+3

Sono d'accordo, anche se credo di sì frase in modo diverso, come penso igiene e 'digitato' qui sono concetti ortogonali (che sia aggiungere diversi tipi di 'sicurezza'); Penso che tutte le citazioni di F # siano igieniche, e alcune aggiungono ulteriore sicurezza tramite la digitazione (meta-) statica. – Brian

7

L'aspetto meta-programmazione è l'unica somiglianza, e anche a questo proposito, c'è una grande differenza. Puoi pensare al trasformatore della macro come una funzione dalla sintassi alla sintassi come puoi manipolare le citazioni, ma i trasformatori sono coordinati globalmente in modo che i nomi utilizzati come raccoglitori seguano un protocollo specifico:

1) I raccoglitori potrebbero non essere uguali qualsiasi nome libero in ingresso alla macro (a meno che non si usi un portello di fuga antigienico)

2) I nomi associati nel contesto di una macro definizione che sono liberi nell'espansione della macro devono puntare alla stessa cosa al momento dell'uso della macro. (Questo ha bisogno di coordinamento globale)

scelte per i nomi sono fatti in modo che l'espansione non manca se è stato utilizzato il nome sbagliato (a meno che non si scopre che nome è legato).

I trasformatori di citazioni digitate non hanno questa idea di contesto temporale di definizione. Si manipolano le citazioni per formare un programma che non fa riferimento a nessun nome nel programma. Non hanno lo scopo di fornire un meccanismo di astrazione sintattica. Forme arbitrarie di sintassi? No. Tutto deve essere forme core AST.

Il codice aperto in sistemi di quotazione tipizzati può essere chiuso con qualsiasi cosa che si adatti alla struttura del tipo del contesto previsto - non esiste una composizione coordinata di diversi componenti aperti in una struttura coerente.