In questo risponde a una mia precedente domanda sull'idoneità dei linguaggi di scripting come shell, DigitalRoss identifica la differenza tra i linguaggi macro e i linguaggi "parsed typed" in termini di trattamento delle stringhe come la ragione principale per cui i linguaggi di scripting sono non adatto per scopi shell. Le lingue macro includono nroff e m4 per esempio.
Quali sono le decisioni di progettazione (o compromessi) necessarie per creare un linguaggio di programmazione macro? E perché la maggior parte dei linguaggi mainstream è analizzata piuttosto che macro?
Questa domanda molto simile ( e la risposta accettata ) copre abbastanza bene il motivo per cui i linguaggi digitati analizzati, ad esempio C, soffrono dell'uso di macro. Credo che la mia domanda qui riguardi motivi diversi:
-
I linguaggi macro o quelli che lavorano a livello testuale non sono del tutto falliti. Probabilmente, includono
bash
,Tcl
e altri linguaggi di shell. E lavorano in una nicchia specifica come le conchiglie, come spiegato nei miei link sopra. Anchem4
ha avuto un tempo abbastanza lungo di successo e alcuni dei linguaggi del modello Web possono essere considerati come macro linguaggi. -
È abbastanza probabile che le macro e la tipizzazione analizzata non vadano bene insieme ed è per questo che le macro "rompono" le lingue comuni. Nella risposta alla domanda collegata, una macro come
#define TWO 1+1
sarebbe stata coperta dalle regole comuni del linguaggio piuttosto che in conflitto con quelle della lingua ospite. E problemi come "i macro non sono stati digitati" e "il codice non viene compilato" non sono rilevanti nel contesto di un linguaggio progettato come non tipizzato e interpretato con scarsa attenzione all'efficienza. -
La domanda sulle decisioni di progettazione necessarie per creare un linguaggio macro si riferisce a un progetto di hobby al quale sto attualmente lavorando per progettare una nuova shell. Prendere la domanda precedente nel contesto chiarirebbe la differenza tra l'aggiunta di macro a un linguaggio analizzato e il mio obiettivo.
Spero che il chiarimento dimostri che la domanda collegata non copre questa domanda, che è composta da due parti:
-
Se voglio creare un linguaggio macro (per esempio una shell o un modello web), quali limitazioni e compromessi (e le linee guida, se esistono) devono essere fatte?
-
(Probabilmente risponde con un link o un riferimento) Perché le lingue macro non riescono a diventare mainstream tranne che in particolari nicchie? Che cosa rende le lingue tipizzate utilizzate con successo in una programmazione di grandi dimensioni, mentre le lingue "tipizzate a stringere" hanno successo in shell e ambienti di tipo one-liner?