Cos'è questo stile di programmazione? “Monoide-ic”?

1

In un blog post moderatamente vecchio , Conal Elliot rende interessante ( se meno che serio) argomento che C è un linguaggio puramente funzionale, disegnando un parallelo tra la combinazione del preprocessore C e C stesso, e quella del puro linguaggio di espressione di Haskell e dei suoi impuri valori di azione IO. È stato osservato più in basso che la separazione di fase tra i componenti di C rende effettivamente ciò che cpp fa abbastanza diverso da Haskell, però, quindi cpp+C non è dopotutto monadico.

Nei progetti di programmazione reali, i programmatori C preferiscono minimizzare il più possibile l'uso di cpp . Il linguaggio macro può essere capace di cose incredibili , ma è un ambiente di programmazione abbastanza ostile. Quindi, per quanto posso dire, questo concetto è per lo più inesplorato da una prospettiva C.

Tuttavia, basandoci sull'esempio di C, potremmo immaginare un linguaggio in cui il modo principale di programmazione è che lo sviluppatore scriva un programma puramente funzionale che costruisce una sequenza fissa di valori e stringhe di azioni li insieme in un programma finito. Distinto dal modello di Haskell in quanto il programma funzionale esiste solo a "tempo di compilazione", con una netta separazione tra le due fasi di valutazione ed esecuzione; distinto dal modello di C (o Lisp's) principalmente nell'enfasi sullo stage "macro" come strumento di programmazione primary (e con uno stage macro che non è .. sai, orribile - piuttosto, sembra e funziona come un vero e proprio linguaggio), con il programma finale costituito da una sequenza fissa di blocchi di "azione" che lo sviluppatore è scoraggiato (o addirittura impedito) dall'authoring direttamente.

  • Esiste questo paradigma di programmazione? In tal caso, come si chiama e quali sono gli esempi esistenti? C'è qualche letteratura su questo argomento?

("Metaprogramming" è la risposta ovvia, ma che sembra troppo ampia e fuori target: cpp o C ++ template così come sono attualmente poco utilizzati anche loro ricadono sotto, mentre Haskell IO non lo fa.)

    
posta Leushenko 17.03.2014 - 02:06
fonte

1 risposta

4

Risulta che il paradigma descritto (male) nella domanda esiste ed è noto come "programmazione multi-stage", "metaprogrammazione in scena" o parole simili a tale effetto. Secondo questa tassonomia , la domanda è la previsione del "generatore statico" (al contrario di quei sistemi che utilizzare la gestione temporanea per la generazione di codice dinamico).

La programmazione in scena è distinta dalle macro classiche in quanto implica una comprensione più profonda da parte del compilatore del codice in elaborazione: le macro sono tradizionalmente sintattiche, il codice come dati è una semplice struttura di atomi, mentre "MSP" mantiene e controlla le informazioni sul tipo e sull'ambito e gestisce solo espressioni intere valide come valori singoli; da questi è in grado di generare output ben tipizzati e sintatticamente validi. (Si potrebbe certamente scrivere macro Lisp / Scheme per fare questo - è stato fatto - ma non è parte della loro funzionalità di base.) La stadiazione sembra quindi essere più strettamente correlata alla valutazione parziale rispetto alle macro.

Sapendo come si chiama, ci sono molti esempi e documenti da esaminare:

(nota a posteriori: in effetti, la domanda prevedeva l'utilizzo di qualcosa come MetaML per il metalinguaggio con C come linguaggio di output, eseguendo il metalinguaggio solo in fase di compilazione.)

    
risposta data 18.03.2014 - 01:56
fonte

Leggi altre domande sui tag