Dio odio il termine "odore di codice", ma non riesco a pensare a nulla di più preciso.L'uso di Haskell monade un odore di codice?
Sto progettando un compilatore di lingua di alto livello & nel Whitespace nel mio tempo libero per informazioni sulla costruzione del compilatore, sulla progettazione del linguaggio e sulla programmazione funzionale (il compilatore viene scritto in Haskell).
Durante la fase di generazione del codice del compilatore, devo mantenere i dati "state" -ish mentre percorro l'albero della sintassi. Ad esempio, quando si compila le dichiarazioni di flusso di controllo ho bisogno di generare nomi unici per le etichette di saltare a (etichette generate da un contatore che è passato in, aggiornato, & restituito, e il vecchio valore del contatore non deve mai essere usato di nuovo). Un altro esempio è quando mi imbatto in letterali di stringa in linea nell'albero della sintassi, devono essere convertiti in modo permanente in variabili heap (in Whitespace, le stringhe vengono memorizzate al meglio nell'heap). Sto attualmente avvolgendo l'intero modulo di generazione del codice nella monade di stato per gestirlo.
Mi è stato detto che scrivere un compilatore è un problema adatto al paradigma funzionale, ma trovo che lo sto progettando più o meno nello stesso modo in cui lo progetterei in C (puoi davvero scrivere C in qualsiasi lingua - anche Haskell w/state monads).
Voglio imparare come pensare in Haskell (piuttosto, nel paradigma funzionale) - non in C con la sintassi di Haskell. Dovrei davvero cercare di eliminare/ridurre al minimo l'uso della monade di stato, o è un "modello di progettazione" legittimo e funzionale?
Wtf man, spazio vuoto ... –
Dovrei scrivere un compilatore per mips o x86 asm? Sarebbe un po 'più complicato. – Cybis
C++, Cybis. Le specifiche del 1999 E lo vogliamo venerdì. –