very nice!
a good addition in my opinion.

Kobi

On 9/3/2010 05:31, Joe Groff wrote:
Hi guys. I'm working on improving Factor's stack checker so that it can check the stack effect of input quotations to higher-order words such as "each" and "if*" and give a more helpful error message when they would cause stack imbalances. Currently, if your quotation would lead to an imbalanced stack, you'll get an opaque "Unbalanced branches" or "digs arbitrarily deep into the stack" error, usually reporting some word or set of quotations from an implementation detail word five levels deep with no apparent relation to the code that caused the error. If this isn't the #1 worst usability problem for Factor, it's definitely up there. With my changes, you'll get a detailed error message that lays your sloppy stack discipline out in full detail:

( scratchpad ) [ '[ _ + ] [ + + ] if* ] infer.
The input quotations to if* don't match their expected effects
Input   Expected           Got
[ _ + ] (( ..a ? -- ..b )) (( x -- x ))
[ + + ] (( ..a -- ..b ))   (( x x x -- x ))

The "..a" and "..b" identifiers you see in the "expected" column are a new addition to the stack effect syntax that let you declare variable stack effects. You can declare these effects on input parameters in the stack effect for your combinator like so:

: if* ( ..a ? true: ( ..a ? -- ..b ) false: ( ..a -- ..b ) -- ..b )
: each ( ... seq quot: ( ... x -- ... ) -- ... )
: while ( ..a pred: ( ..a -- ..b ? ) body: ( ..b -- ..a ) -- ..b )

When the updated stack checker sees nested stack effect declarations attached to input parameters, it verifies that the corresponding quotations' stack effects actually match those declarations, with ..a, ..b, etc. standing in for some number of stack values that has to be consistent among all of the parameters. In order to get the improved error checking for your own inline combinators, you will need to add stack effect declarations to their quotation inputs. Without an effect declaration, the old stack checker mechanism still exists, and it can still give you the same old cryptic error messages. However, in many cases, even without declarations on your own combinators, you'll still get better error messages, since all the foundational loop and branching combinators in core have been given declared effects.

This change should be mostly backward compatible. There will be, however, some language changes that could break existing code:

- If you have code that use inline combinators with invalid quotations that somehow still managed to compile, that code will no longer compile with the new checks. - Similarly, if you've declared effects on the inputs of an inline combinator and then used it with quotations that don't match that exact effect, you'll now get compiler errors. You might need to add ".." variables to generalize your declared effects. - The effect parser now only allows a variable of the form "..a" to appear at the begin of the inputs or outputs list, so if you have been using "..." in your stack effects (perhaps for a macro), you will need to change the stack effect slightly to parse under the new rules. An ellipsis can still be used as a normal value name if preceded by a letter, so "quots...", "inputs...", "etc..." are valid substitutes. - If you were manually constructing stack effect objects with "effect boa", that will no longer work, because the effect object layout changed slightly to accommodate the ".." variables. However, the "<effect>" constructor word remains the same, and there are new "<terminated-effect>" and "<variable-effect>" constructors (to construct potentially throwing stack effects and effects with variables, respectively) to handle more general cases.

Any complaints or comments about these changes?

-Joe


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev


_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk


--
China: stop persecuting Falun Gong!
http://faluninfo.net

URGENT: Innocent people are being persecuted for their belief inside Communist 
China.

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to