Sembra simile a quello che alcuni dialetti Lisp chiamano futures
, sebbene la restrizione sintattica (più alcuni dei link di discussione) implichi che lo stiano facendo tramite una trasformazione CPS locale (stile passaggio continuo).
Per quanto riguarda il motivo per cui ci vuole tanto tempo, se provi da una mentalità C / C ++, probabilmente pensi che "lo stack" sia reale ; ti aspetti che le variabili vivano lì, potresti addirittura creare dei puntatori alle cose allocate allo stack. Mentre in un linguaggio di livello superiore, pensate al contesto del programma (o continuazione ), che potrebbe vivere su "lo stack", ma potrebbe essere copiato o spostato quando il language runtime si sente come se implementasse cose come continuation di prima classe, thread leggeri, ricorsione profonda e ricorsione di coda adeguata su piattaforme ostili. Sembra che .NET stia semplicemente prendendo alcune delle tecniche sviluppate per implementare linguaggi di livello superiore e portarli, in modo conservativo, in C #.