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.)