Perché non più lingue macro?

3

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:

  1. 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. Anche m4 ha avuto un tempo abbastanza lungo di successo e alcuni dei linguaggi del modello Web possono essere considerati come macro linguaggi.

  2. È 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.

  3. 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:

  1. 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?

  2. (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?

posta Muhammad Alkarouri 10.03.2012 - 12:29
fonte

1 risposta

3

Le domande collegate identificano un carico di problemi nei linguaggi macro correnti. Se hai intenzione di progettare una nuova lingua, dovresti risolvere quei problemi.

Ad esempio, prendi l'esempio di define TWO 1+1; TWO*TWO=3 . Puoi rendere solida la tua lingua non includendo una regola per 1+1*1+1 ; invece richiedono espressioni aritmetiche per essere esplicitamente parentesi. Ciò significa che 1+1*1+1 è un errore di sintassi e deve essere scritto come (1+1)*(1+1) .

    
risposta data 12.03.2012 - 11:13
fonte

Leggi altre domande sui tag