The official Tcl implementation doesn't throw any errors at compile  
time because it doesn't have one (not even in the sense that Perl5  
does). As a compiler, we are left with two options:
   1) Throw compile time syntax errors anyway because they're  
arguably the Right Thing To Do.
2) Fake it and output code that throws an error at runtime.
Option 2 is probably the correct one to take, but it can easily be  
made later. So for now we'll just go with option 1 because it's  
implemented.
Here's an example that shows the difference:
     puts hi
     puts [set a 4
That outputs "hi\n" with tclsh before dying with the syntax error.  
Partcl just dies without outputting anything.
--
Matt Diephouse