Also, when I worked on protyping an analysis module a long time ago, it is actually pretty easy to validate and "warn" people about possible combination explosions (of course like all warnings, people are free to ignore them) - but at least this means people are aware of the dangers.
<br><br><div><span class="gmail_quote">On 3/21/07, <b class="gmail_sendername">Edson Tirelli</b> &lt;<a href="mailto:tirelli@post.com">tirelli@post.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>&nbsp;&nbsp; Yes, that is the part that I agreed.... :)<br>&nbsp;&nbsp;&nbsp;&nbsp;I just would NOT want:<br><br>Cheese( name == Person().favouriteCheese )<br><br>&nbsp;&nbsp; []s<br>&nbsp;&nbsp; Edson<br><br>Michael Neale wrote:<br><br>&gt; I am not sure about the &quot;danger&quot;, but I do like anything that avoids
<br>&gt; extra binding.<br>&gt; So lets not throw the baby out with the bathwater.<br>&gt;<br>&gt; I really like:<br>&gt; $p : Person()<br>&gt; Cheese( name == $p.favouriteCheese )<br>&gt;<br>&gt; I think that should definately be allowed.
<br>&gt;<br>&gt;<br>&gt; On 3/21/07, *Edson Tirelli* &lt;<a href="mailto:tirelli@post.com">tirelli@post.com</a><br>&gt; &lt;mailto:<a href="mailto:tirelli@post.com">tirelli@post.com</a>&gt;&gt; wrote:<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I think it is a dangerous move.
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It is easy for users to understand that each pattern matches a<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; fact:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; A( ... )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; B( ... )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; C( ... )<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If you start moving patterns to inside other patterns, you risk to
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; lose the legibility:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; A( b == B( ... ), c == C(...) )<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main problem I see is with cross product abuses:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; A( oneb == B(...), thesameb == B(...) )<br>
&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The above may match the same B as intended, but may also match<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; other<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Bs, leading to errors and bugs that will be hard to track.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I would continue making patterns explicit and not nested.
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Although, the object navigability is desired and much waited I<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; think:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; $b : B(...)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; A( c == $b.c )<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Also, there are some cases that we would do good allowing nesting:
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; $c : Cheesery( ... )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; $s : List( size &lt; 3 ) from collect( Cheese( type == &quot;stilton&quot; ) from<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; $c.getCheeses() )<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Just my .02 c.<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; []s
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Edson<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Olenin, Vladimir (MOH) wrote:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Don&#39;t have any antlr experience, but I&#39;d say that would be a very<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; valuable<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;addition - probably more BAs would be able to pick it up this way
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; (without<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;having to fallback on custom DSL)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Vlad<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;-----Original Message-----<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;From: <a href="mailto:rules-dev-bounces@lists.jboss.org">
rules-dev-bounces@lists.jboss.org</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mailto:<a href="mailto:rules-dev-bounces@lists.jboss.org">rules-dev-bounces@lists.jboss.org</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;[mailto:<a href="mailto:rules-dev-bounces@lists.jboss.org">
rules-dev-bounces@lists.jboss.org</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mailto:<a href="mailto:rules-dev-bounces@lists.jboss.org">rules-dev-bounces@lists.jboss.org</a>&gt;] On Behalf Of Mark Proctor<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Sent: 20 March 2007 15:54
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;To: Rules Dev List<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Subject: Re: [rules-dev] sugar<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Could also allow:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Cheese( name = Person( location == &quot;london&quot;).favourCheese )<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Can also use this to constrain on the fact itself, instead of<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; just a field:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Person( cheese = Cheese( type == &quot;stilton ) )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;This could be use in config options:
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Call( duration &lt; CallConf().minDuration )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;But as Edson pointed out it is open to abuse and<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; misunderstanding, how<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;long till people do:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Call( duration &lt; CallConf().maxDuration, duration &gt;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; CallConf().maxDuration )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Which is more like doing the following which has cross product<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; issues:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;CallConf( $maxDuration1 : maxDuration )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;CallConf( $maxDuration2 : maxDuration )
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Call( duration &lt; ,$maxDuration1 duration &gt; $maxDuration2 )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Mark<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;Mark Proctor wrote:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;I&#39;ve been thinking of an idea to make rules more expressive, its
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; just<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;syntax sugar at the parser level, but thought i&#39;d ask feedback - if<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;anyone with antlr skills wants to make this work, let us know :)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Instead of doing:
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;$p : Person($favouriteCheese : favouriteCheese )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Cheese( name == $favouriteCheese )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;We should allow the following:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;$p : Person()
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Cheese( name == $p.favouriteCheese )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;We could take this further and in places where a pattern is not<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; used<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;elsewhere allow:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Cheese( name == Person().favouriteCheese )
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Mark<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;_______________________________________________<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;rules-dev mailing list<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<a href="https://lists.jboss.org/mailman/listinfo/rules-dev">
https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;_______________________________________________<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;rules-dev mailing list
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev">
https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;_______________________________________________<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;rules-dev mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org
</a> &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; --<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Edson Tirelli<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Software Engineer - JBoss Rules Core Developer<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Office: +55 11 3124-6000<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Mobile: +55 11 9218-4151
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a> &lt;<a href="http://www.jboss.com">http://www.jboss.com</a>&gt;<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; _______________________________________________
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; rules-dev mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>&gt;<br>&gt;<br>&gt;------------------------------------------------------------------------<br>&gt;<br>
&gt;_______________________________________________<br>&gt;rules-dev mailing list<br>&gt;<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>&gt;<a href="https://lists.jboss.org/mailman/listinfo/rules-dev">
https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>&gt;<br>&gt;<br><br><br>--<br> Edson Tirelli<br> Software Engineer - JBoss Rules Core Developer<br> Office: +55 11 3124-6000<br> Mobile: +55 11 9218-4151<br> JBoss, a division of Red Hat @ 
<a href="http://www.jboss.com">www.jboss.com</a><br><br><br>_______________________________________________<br>rules-dev mailing list<br><a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-dev">
https://lists.jboss.org/mailman/listinfo/rules-dev</a><br></blockquote></div><br>