/**************** (there are two programs here; uncomment one) Compiling this program gives: [sqr-bug02.diderot:22.32-38] Error: undeclared variable 'foobar' uncaught exception Fail [Fail: Error in compiling sqr-bug02.diderot] raised at common/phase-timer.sml:76.50-76.52 raised at common/phase-timer.sml:76.50-76.52 raised at driver/main.sml:27.39-27.76 So there is both the "Error" and the "Fail". When there is a descriptive Error message, why have all the uncaught exception stuff? ****************/ real eps = 1.0; strand sqroot(real val) { output real root = val; update { root = (root + val/root)/2; if (|root^2 - val|/val < foobar) stabilize; } } // Strand initialization initially { sqroot(i) | i in 1..1000 }; /**************** But compiling this program gives: ... mid-il DFA: cpu = 0.000 seconds, gc = 0.000 seconds, 4 nodes, 3 visits, 1 iterations low-il DFA: cpu = 0.000 seconds, gc = 0.000 seconds, 3 nodes, 2 visits, 1 iterations low-il DFA: cpu = 0.000 seconds, gc = 0.000 seconds, 3 nodes, 2 visits, 1 iterations low-il DFA: cpu = 0.000 seconds, gc = 0.000 seconds, 18 nodes, 17 visits, 1 iterations low-il DFA: cpu = 0.000 seconds, gc = 0.000 seconds, 4 nodes, 3 visits, 1 iterations uncaught exception Fail [Fail: no output specified for strand sqroot] raised at common/phase-timer.sml:76.50-76.52 raised at common/phase-timer.sml:76.50-76.52 raised at c-target/c-target.sml:151.37-151.83 So there is actually a descriptive error message in the "Fail", but there's no "Error". Why not put descriptive error messages in "Error", and let the "uncaught exception" signify bugs in the compiler? ****************/ /* real eps = 1.0; strand sqroot(real val) { real root = val; update { root = (root + val/root)/2; if (|root^2 - val|/val < eps) stabilize; } } // Strand initialization initially { sqroot(i) | i in 1..1000 }; */