<br>&nbsp;&nbsp; Oh, and I missed another important difference: eval() always generates code in java dialect, while operators are resolved directly, without the need to generate code... so besides syntax sugar, there is a small gain in compilation time performance.
<br><br>&nbsp;&nbsp;&nbsp; []s<br>&nbsp;&nbsp;&nbsp; Edson<br><br><div><span class="gmail_quote">2007/12/14, Edson Tirelli &lt;<a href="mailto:tirelli@post.com">tirelli@post.com</a>&gt;:</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; The difference is not in sharing the nodes, but in indexing... although, today, only &quot;==&quot; constraints are indexed.<br>&nbsp;&nbsp; So, &quot;matches&quot; operator is really just syntax sugar on String.matches() method call. 
<br>&nbsp;&nbsp; In other words, if you have 2 rules with identical eval() calls, they may be shared, the same way that if you have 2 rules with identical &quot;matches&quot; call. Although, none of them is indexed and if we implement optimizations in the future drools versions, &quot;matches&quot; is more likely to be optimized than eval.
<div><span class="e" id="q_116d9313216e6643_1"><br><br>&nbsp;&nbsp;&nbsp; Edson<br><br><div><span class="gmail_quote">2007/12/14, Waruzjan Shahbazian &lt;<a href="mailto:wshahbazian@xiam.nl" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
wshahbazian@xiam.nl</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
The pluggable operators example looks very cool&nbsp;&nbsp;:-) , I just have one<br>more question about the performance. I suppose that if I use eval() with<br>indexOf(), there would be no caching? Isn&#39;t that one of the benefits of
<br>using the &quot;drools&quot; operators, since ( if they work on the same way as in<br>the example in the trunk anyway) they do use caching. Anyway, if&nbsp;&nbsp;I do<br>some benchmarks about this I would let you now!<br><br>About the backwards compatibility: Thats cool, as long as what I did was
<br>not a not recommended way. The costes for the few possible changes in<br>the feature are indeed affordable to pay.<br><br>Waruzjan<br><br>Edson Tirelli schreef:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;I really don&#39;t know about perf differences in this case. I guess best
<br>&gt; thing would be for you do give a try (and let us know please). :) It<br>&gt; probably will depend on the java implementation of the matches() against<br>&gt; indexOf() method. I guess indexOf is faster, but don&#39;t know if it is
<br>&gt; significant difference.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;Regarding pluggable operators, here you have one example:<br>&gt;<br>&gt; <a href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/MatchesEvaluatorsDefinition.java" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/MatchesEvaluatorsDefinition.java</a><br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Regarding using the descriptor classes, I would say it is the
<br>&gt; recommended way for generated rules, since you avoid the &quot;text<br>&gt; generation&quot;+&quot;parsing&quot; cost of the rules. Although, as much as we try to keep<br>&gt; backward compatibility, we can&#39;t guarantee there will be no breaks, since we
<br>&gt; are always adding new features and the descriptor model must usually change<br>&gt; to support them what may eventually break backward compatibility. Even with<br>&gt; that, I think it is an affordable cost to pay (fixing eventual breaks on
<br>&gt; version updates) compared to your runtime application robustness.<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;[]s<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;Edson<br>&gt;<br>&gt;<br>&gt;<br>&gt; 2007/12/14, Waruzjan Shahbazian &lt;<a href="mailto:wshahbazian@xiam.nl" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
wshahbazian@xiam.nl
</a>&gt;:<br>&gt;<br>&gt;&gt; Hi,<br>&gt;&gt;<br>&gt;&gt; Thanks for the reply. I wanted to be sure that there wasn&#39;t any more<br>&gt;&gt; efficient way to check a substring in a string, or do you think that<br>&gt;&gt; eval() with a indexOf() call would be more efficient than matches() with
<br>&gt;&gt; regular expression?. Since I can&#39;t group the results, the speed is the<br>&gt;&gt; only issue here.<br>&gt;&gt;<br>&gt;&gt; In my application I am creating the PackageDescr myself with some<br>&gt;&gt; &quot;template&quot; RuleDescr&#39;s (which are being filled in with the, limited,
<br>&gt;&gt; user input in the Swing GUI) and the package is being build with the<br>&gt;&gt; builder. If the regular expression methode in the matches operator is<br>&gt;&gt; the best way to check a substring in a string, I can use variabeles
<br>&gt;&gt; (which are the user inputs) to fill the regular expression. So I don&#39;t<br>&gt;&gt; really need a new operator for this. But I am interessted how the<br>&gt;&gt; development of a new operator would be, so maybe you could tell me where
<br>&gt;&gt; I need to be to do so :-) .<br>&gt;&gt;<br>&gt;&gt; In the attachment&nbsp;&nbsp;is the classe diagram of the PackageDescr with the<br>&gt;&gt; linked classes as I have understood and used in my application. Of<br>&gt;&gt; course not every operation and attribute is included, but maybe this
<br>&gt;&gt; could be helpfull for someone else who wants to create PackageDescr&#39;s<br>&gt;&gt; directly.<br>&gt;&gt;<br>&gt;&gt; I suppose the public methodes used in this operation are going to be<br>&gt;&gt; supported by the following drools versions? Or should I have used the
<br>&gt;&gt; DRL and XML ? =-O<br>&gt;&gt;<br>&gt;&gt; Thanks,<br>&gt;&gt;<br>&gt;&gt; Waruzjan<br>&gt;&gt;<br>&gt;&gt; Edson Tirelli schreef:<br>&gt;&gt;<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;Yes, you may use matches. The other alternative is using an eval and
<br>&gt;&gt;&gt;<br>&gt;&gt; a<br>&gt;&gt;<br>&gt;&gt;&gt; regular indexOf() call to check for the existance of the substring.<br>&gt;&gt;&gt;<br>&gt;&gt; Drools<br>&gt;&gt;<br>&gt;&gt;&gt; up to versions 4.0.x is JSE 1.4

 compliant, so you can&#39;t use contains()<br>&gt;&gt;&gt; method.&nbsp;&nbsp;In trunk, you may also develop your own operator and plug it<br>&gt;&gt;&gt;<br>&gt;&gt; into<br>&gt;&gt;<br>&gt;&gt;&gt; the engine... although, it is not documented yet, but if you want to
<br>&gt;&gt;&gt;<br>&gt;&gt; try, I<br>&gt;&gt;<br>&gt;&gt;&gt; can guide you through. And if you want to contribute docs after that,<br>&gt;&gt;&gt;<br>&gt;&gt; even<br>&gt;&gt;<br>&gt;&gt;&gt; better. :)<br>&gt;&gt;&gt;
<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;It is not possible to capture groups and reuse in the RHS. I&#39;m<br>&gt;&gt;&gt;<br>&gt;&gt; thinking<br>&gt;&gt;<br>&gt;&gt;&gt; about a way to bind variables to arbitrary values in the LHS. If we<br>

&gt;&gt;&gt; implement that, than it would be possible for you to do that, but not<br>&gt;&gt;&gt; possible at this moment.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;Edson<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; 2007/12/14, Waruzjan Shahbazian &lt;
<a href="mailto:wshahbazian@xiam.nl" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">wshahbazian@xiam.nl</a>&gt;:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Hi,<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; I need to check in the LHS of my rule if&nbsp;&nbsp;a given String contains an
<br>&gt;&gt;&gt;&gt; given substring. What is the best way to do that? I can use regular<br>&gt;&gt;&gt;&gt; expression with matches, but is that the best (fastest) solution?<br>&gt;&gt;&gt;&gt; (STRING matches &quot;(?i).*SUBSTRING.*&quot;). And can I use regulare
<br>&gt;&gt;&gt;&gt;<br>&gt;&gt; expressions<br>&gt;&gt;<br>&gt;&gt;&gt;&gt; capturing groups and than use the results of the groups in the RHS? If<br>&gt;&gt;&gt;&gt; not, what is the best methode to do that?<br>&gt;&gt;&gt;&gt;
<br>&gt;&gt;&gt;&gt; Thanks,<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Waruzjan<br>&gt;&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt;&gt; rules-users mailing list<br>&gt;&gt;&gt;&gt; <a href="mailto:rules-users@lists.jboss.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

rules-users@lists.jboss.org</a><br>&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://lists.jboss.org/mailman/listinfo/rules-users
</a><br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;
<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; ------------------------------------------------------------------------<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt; rules-users mailing list
<br>&gt;&gt;&gt; <a href="mailto:rules-users@lists.jboss.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">rules-users@lists.jboss.org</a><br>&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
https://lists.jboss.org/mailman/listinfo/rules-users
</a><br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt; _______________________________________________<br>&gt;&gt; rules-users mailing list<br>&gt;&gt; <a href="mailto:rules-users@lists.jboss.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
rules-users@lists.jboss.org</a>
<br>&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>&gt;&gt;<br>&gt;&gt;
<br>&gt;&gt;<br>&gt;&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; ------------------------------------------------------------------------
<br>&gt;<br>&gt; _______________________________________________<br>&gt; rules-users mailing list<br>&gt; <a href="mailto:rules-users@lists.jboss.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
rules-users@lists.jboss.org</a><br>&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
https://lists.jboss.org/mailman/listinfo/rules-users</a><br>&gt;<br><br>_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
rules-users@lists.jboss.org
</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div>
<br><br clear="all"><br></span></div><div><span class="e" id="q_116d9313216e6643_2">-- <br>&nbsp;&nbsp;Edson Tirelli<br>&nbsp;&nbsp;JBoss Drools Core Development
<br>&nbsp;&nbsp;Office: +55 11 3529-6000<br>&nbsp;&nbsp;Mobile: +55 11 9287-5646<br>&nbsp;&nbsp;JBoss, a division of Red Hat @ <a href="http://www.jboss.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">www.jboss.com</a>
</span></div></blockquote></div><br><br clear="all"><br>-- <br>&nbsp;&nbsp;Edson Tirelli<br>&nbsp;&nbsp;JBoss Drools Core Development<br>&nbsp;&nbsp;Office: +55 11 3529-6000<br>&nbsp;&nbsp;Mobile: +55 11 9287-5646<br>&nbsp;&nbsp;JBoss, a division of Red Hat @ <a href="http://www.jboss.com">
www.jboss.com</a>