Recentemente ho refactoring grossi blocchi di codice e li ho sostituiti con query Linq.
Rimozione del bias della lingua: Linq è essenzialmente un insieme di operazioni Mappa / Filtro e Riduci che operano su una sequenza di dati.
Questo mi ha fatto pensare, fino a dove teoricamente sarei in grado di portarlo. Sarei in grado di riscrivere l'intera base di codice in una serie (o anche una singola) di operazioni Mappa / Filtro e Riduci.
Sfortunatamente vengo pagato per fare cose utili, quindi non sono stato in grado di sperimentare molto di più, ma non riesco a pensare a nessuna struttura di codice che non possa essere ristrutturata come tale. Il codice con effetto laterale può essere gestito tramite monadi. Anche l'output essenzialmente sta mappando gli indirizzi di memoria sugli indirizzi dello schermo.
C'è qualcosa che non potrebbe essere (teoricamente) riscritto come una query Linq?
my_list.map(_ignored => a copy of my_list)
, sembra che l'uso dello spazio di un tale programma sia limitato da un polinomio (a seconda della lunghezza del programma). Quindi un linguaggio del genere non potrebbe certamente calcolare problemi che non sono presenti in PSPACE. Tuttavia, poiché molti problemi in PSPACE sono considerati intrattabili, per non parlare di classi più grandi, questa potrebbe non essere una limitazione molto seria.