[rules-dev] modify( expr ) {....}

Mark Proctor mproctor at codehaus.org
Thu Apr 7 01:52:00 EDT 2011


On 07/04/2011 06:44, Wolfgang Laun wrote:
> Perhaps I'm naive, but I think that it should be able to "compile" this by
> a mere expansion:
>    modify( getFact( var ) ) { setName("yoda"), setColor("blue") }
> becomes
>    getFact( var ).setName("yoda" );
>    getFact( var ). setColor("blue" );
>    update( getFact( var ) );
> And just warn agsinst side effects.
getFact( var) was just a simplificiation. It can allow for any 
expression of any complexity, it could pull from DB. It means for each 
and every setter we would have to evaluate the whole expression.

Mark
>
> I've written lots of rules for various mini-apps lately, and I've 
> never had any
> reason to use anything except bound variables in a modify anyway.
>
> As for MVEL: I don't trust a "language" that doesn't provide a definition
> of its syntax. The less it is used in Drools (without the user asking 
> for it)
> the better, Sorry if this hurts any feelings, but this reasoning is backed
> up by CENELEC.
>
> Cheers
> Wolfgang
>
> On 7 April 2011 07:14, Mark Proctor <mproctor at codehaus.org 
> <mailto:mproctor at codehaus.org>> wrote:
>
>     I'm at the stage where I cannot make this work in a robust way when
>     using the java dialect:
>     modify( getFact( var ) ) { setName("yoda") }
>
>     The problem is we have to infer the type of the expression. If the
>     expression is complex using variables in methods, we get method
>     ambiguity if we don't know all variable types. Once we have the
>     expression type we rewrite this as:
>     Person obj = ( Person) getFact(var);
>     obj.setName( "yoda" );
>
>     Edson did this originally by using mvel to analyse the expression. The
>     problem is that if the expression uses any local variables, we don't
>     know what those are. So we need to analyse the entire consequence, we
>     started to do this with MVEL but we have reached one too many
>     stumbling
>     blocks - most recent of those is MVEL does not understand java
>     generics.
>     I've put in about 3 weeks trying to solve this with mvel, and now
>     had to
>     stop. When MVEL adds generics we can hopefully resume this work again.
>
>     For now i'm having to roll back to our current behaviour. The positive
>     news is that no one has reported issues with this. I'm guessing most
>     people use just the fact instance, not expressions, and if they use an
>     expression it's simple. So the brittleness is not showing up.
>
>     Anyway the work around for now is to explicitley cast, that should
>     resolve the issue, if it comes up for anyone. I'm tempted to say that
>     expressions are only officially supported when used with casting.
>     Atleast until we can do robust type inference:
>     modify( (Person) getFact( var ) ) { setName("yoda") }
>
>     Mark
>
>     _______________________________________________
>     rules-dev mailing list
>     rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110407/69fac079/attachment.html 


More information about the rules-dev mailing list