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® 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® 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