Come sviluppatore di con una certa conoscenza del mondo esterno, sarei curioso dell'utilità / delle insidie nell'implementare macro in stile Lisp in Rebol (e / o Red) .
La mia comprensione (sempre felice di rivedere) è che Lisp è in grado di pre-elaborare il codice prima della valutazione / compilazione, modificando quel codice in base alle regole delle macro applicabili. Ciò può consentire affermazioni più complesse / espressive rispetto al contrario, con efficienze poiché tali istruzioni vengono espanse una sola volta quando viene caricato un corpo di codice. Le macro regole stesse sono relativamente semplici in quanto l'omoiconicity di Lisp consente di manipolare il codice con gli stessi termini con cui si modificherebbero i dati.
Poiché Rebol è anche un linguaggio omoiconico, è evidente che anch'esso potrebbe contenere macro tra caricamento e valutazione con grammatica di trasformazione espressamente similare (sebbene io ritenga che le più dichiarazioni di modello di valutazione di Rebol non generalmente vincolate da parentesi - lo renda più difficile identificare le parti del codice da trasformare).
La mia inclinazione è che, in generale, le macro non sono realmente necessarie in Rebol: puoi già creare strutture di codice complesse che sono abbastanza efficienti e, laddove è richiesta una maggiore efficienza, Rebol ha le capacità per adattarsi senza perdite significative di espressività. D'altra parte, 'equamente' e 'nessuna perdita significativa' potrebbero essere considerati donnole e le macro offrono un aumento dell'efficienza / espressività, ma a quale costo di implementazione?
Inoltre, come in Rebol è possibile caricare il codice prima della valutazione, sarebbe possibile implementare un meccanismo per load-expand-evaluation a livello di utente che consente implementazioni di macro di terze parti.
Questo post è in parte una risposta a questa domanda e tutto (più o meno) so di macro proviene da questo scambio .
Aggiornamento
Red ha introdotto un rudimentale sistema di macro nella versione 0.6.2. Li ho usati in modo efficace per creare script cross-compatibili che hanno come target sia il Ren-C ramo di Rebol 3 e Red.