阅读更多

28顶
0踩

开源软件
简介
Fel(Fast Expression Language)是开放的、高效的、轻量级的表达式语言。拥有解释执行和编译执行双引擎。Fel在编译执行时,做了很多优化,适合处理海量数据。Fel扩展性强,用户可以定制Fel执行时的众多环节,以满足需求。Fel学习门槛非常低,基本上可以做到拿来即用,即使是二次开发,也非常简单。Fel基于Java1.5开发,适用于Java1.5及以上版本。

示例
FelEngine fel = new FelEngineImpl();
FelContext ctx = fel.getContext(); 
ctx.set("单价", 5000); 
ctx.set("数量", 12); 
ctx.set("运费", 7500); 
Object result = fel.eval("单价*数量+运费"); 
System.out.println(result);

输出结果:67500

更多内容请参考
项目地址:http://code.google.com/p/fast-el/
讨论贴:http://www.iteye.com/topic/1114021
性能测试:http://code.google.com/p/fast-el/wiki/Performance

备注
Fel还在持续发展中,功能尚不完善,更谈不上完美,但是它的性能及扩展性值得花费几分钟试用。用户越多,动力越足(即使用户不多,也会坚持做下去,因为现在还没有发现有哪个EL完全超越了Fel)。另外,如果有人知道比Fel更快的EL,请告诉我,不胜感激。
28
0
评论 共 37 条 请登录后发表评论
37 楼 lotusyu 2011-09-19 08:46
fjjiaboming 写道
类型转换怎样??
mail : linzuxiong1988@gmail.com

有什么需求请发我邮箱。
36 楼 fjjiaboming 2011-09-18 23:35
类型转换怎样??
mail : linzuxiong1988@gmail.com
35 楼 bcw104 2011-09-17 23:48
bcw104 写道
nick.s.ni 写道
與在Java中使用腳本語言如javascript有什麽區別?感覺差不多。效率就不知道了。
我有在Java中使用腳本語言輸出文件。功能面感覺腳本已經够了

有同感,谁能说一下在java里用javascript脚本和专用表达式引擎的区别。


试了下你的第一个测试项,对jsel, fel, jdk1.6中自带的Rhino脚本引擎进行了对比,初步结果如下:
long start = System.currentTimeMillis();
		ExpressionFactory factory = ExpressionFactory.getInstance();
		Expression el = factory.create("1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71");
		Object result1 = el.evaluate();
		System.out.println(result1);
		System.out.println("JSEL耗时:" + (System.currentTimeMillis() - start));
		start = System.currentTimeMillis();

		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		

		try {
			Object maxNum = engine.eval("1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71");
			System.out.println(maxNum);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("rhino耗时:" + (System.currentTimeMillis() - start));
		start = System.currentTimeMillis();
		
		
		FelEngine fel = new FelEngineImpl();    
		Object result = fel.eval("1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71");    
		System.out.println(result); 
		System.out.println("fel耗时:" + (System.currentTimeMillis() - start));
		start = System.currentTimeMillis();

如果:
11181.0
JSEL耗时:83
11181.0
rhino耗时:38
11181
fel耗时:217
34 楼 bcw104 2011-09-17 14:19
nick.s.ni 写道
與在Java中使用腳本語言如javascript有什麽區別?感覺差不多。效率就不知道了。
我有在Java中使用腳本語言輸出文件。功能面感覺腳本已經够了

有同感,谁能说一下在java里用javascript脚本和专用表达式引擎的区别。
33 楼 piaoling 2011-09-17 11:34
真是开源的东西越来越多了,支持
32 楼 dennis_zane 2011-09-17 11:21
明白了,本质上FEL是个"强类型"的EL,例如编译a+b这个表达式,必须首先知道a和b的类型,才能在编译的时候生成正确的代码,是用字符串相加还是用数字相加。编译后,如果a和b的类型改变,则可能运行不了编译后的表达式。

这跟aviator或者jxel还是很不一样的,这两个都是弱类型,在运行时才去判断变量类型并执行适配的操作,而FEL无需在运行时处理类型问题。
31 楼 dennis_zane 2011-09-17 11:09
lotusyu 写道
如果你喜欢Fel请在google code 中给Fel加颗心。
能在短时间内发布0.5版本,需要感谢javamonkey提供的技术支持。如果对模板引擎感兴趣,也可以关注javamonkey的beetl


另外看了下你的代码,你的测试似乎不公平啊。因为你编译的时候已经将Context固定了,也就是变量固定了,其实每次编译出来都是固定的结果了,执行的时候只是取结果,那当然非常快了。
公平的测试应该是每次只编译表达式本身,然后每次执行再传入变量,这才能测试出真实的执行性能吧?
30 楼 eimsteim 2011-09-17 10:44
lotusyu 写道
dennis_zane 写道
呵呵,aviator 2.0估计还是比不过。性能上aviator还有优化的空间,有空会再搞下。但是el的性能我认为并不是那么关键,每秒钟单机几十万甚至百万级别计算的应用,目前还没有遇到过。EL会越来越多样化,专用化,特定于某些应用需求的EL总会存在,体现出作者自己的设计目标,轮子也会不断有人造出来,这是大好事啊。

你说得没错,有些地方对性能没什么要求,比较说工作流路由、用户输入的合法性校验。也
有些地方地方对EL的要求很高。比如说通过EL对表的记录进行条件匹配,计算量很大。El的效率至关重要。如你所说,不同的EL有不同的应用场景,Fel只不过是多了一种选择。
aviator文档还是比较多的,性能也很好。希望aviator有很好的发展。

用户输入合法性校验对性能没要求?
29 楼 lotusyu 2011-09-17 10:36
如果你喜欢Fel请在google code 中给Fel加颗心。
能在短时间内发布0.5版本,需要感谢javamonkey提供的技术支持。如果对模板引擎感兴趣,也可以关注javamonkey的beetl
28 楼 lotusyu 2011-09-17 10:15
Fel0.5 版本已经发布。做了以下改进
1:加入三元表达式
2:调整||和&&的优先级,保持与java语法的一致性。
3:加入!操作符
4:加入"$"函数,通过是"$"函数可以直接调用工具类的方法(eg:$('Math').min(1,2)相当于Math.min(1,2);
27 楼 lotusyu 2011-09-17 10:11
comsci 写道
支持表达式嵌套计算吗? 

这是基本功能
26 楼 lotusyu 2011-09-17 10:10
dennis_zane 写道
呵呵,aviator 2.0估计还是比不过。性能上aviator还有优化的空间,有空会再搞下。但是el的性能我认为并不是那么关键,每秒钟单机几十万甚至百万级别计算的应用,目前还没有遇到过。EL会越来越多样化,专用化,特定于某些应用需求的EL总会存在,体现出作者自己的设计目标,轮子也会不断有人造出来,这是大好事啊。

你说得没错,有些地方对性能没什么要求,比较说工作流路由、用户输入的合法性校验。也
有些地方地方对EL的要求很高。比如说通过EL对表的记录进行条件匹配,计算量很大。El的效率至关重要。如你所说,不同的EL有不同的应用场景,Fel只不过是多了一种选择。
aviator文档还是比较多的,性能也很好。希望aviator有很好的发展。
25 楼 comsci 2011-09-17 10:01
支持表达式嵌套计算吗? 
24 楼 dennis_zane 2011-09-17 01:58
呵呵,aviator 2.0估计还是比不过。性能上aviator还有优化的空间,有空会再搞下。但是el的性能我认为并不是那么关键,每秒钟单机几十万甚至百万级别计算的应用,目前还没有遇到过。EL会越来越多样化,专用化,特定于某些应用需求的EL总会存在,体现出作者自己的设计目标,轮子也会不断有人造出来,这是大好事啊。
23 楼 bowlongcn 2011-09-16 22:39
非常不错坚决支持
22 楼 juniort 2011-09-16 20:48
作者加油,让程序员满意确实不容易呵呵!
21 楼 lotusyu 2011-09-16 20:47
今天抽空实现了三元表达式等功能,然后checkout jindw写的测试代码,测试代码有些问题(Fel出现的编译异常,是由于没有正确使用Context导致的),经过改正后再做了一下测试,结果如下(数值越小越好):

Source:'A' == 'A' || 'B' == 'B' && 'ABCD' == t &&  'A' == 'A'
result:true

Labels: JXEL      JSEL      MVEL      Ognl      Aviator   FEL      
Times: 14.422548 0.469657  3.260236  1.066871  18.100636 0.351877 
Scale: 40.98747  1.3347192 9.265272  3.031943  51.440235 1.0


Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
result:11181

Labels: JXEL      JSEL      MVEL      Ognl      Aviator   FEL      
Times: 193.1466  0.455974  0.597213  0.164698  16.732227 0.046428 
Scale: 4160.132  9.821099  12.863208 3.5473852 360.3909  1.0 


Source:6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3
result:1

Labels: JXEL      JSEL      MVEL      Ognl      Aviator   FEL      
Times: 70.39343  0.702776  6.138294  0.3812    13.452444 0.049849 
Scale: 1412.1333 14.098096 123.13776 7.6470942 269.86386 1.0


Source:i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99
result:true

Labels: JXEL      JSEL      MVEL      Ognl      Aviator   FEL      
Times: 66.77692  80.50451  630.2782  2147.4836 135.19154 1.860059 
Scale: 35.900433 43.280624 338.8485  1154.5245 72.68131  1.0 


Source:i * pi
result:314.0000104904175

Labels: JXEL      JSEL      MVEL      Ognl      Aviator   FEL      
Times: 2.280357  1.144577  13.597592 0.744806  12.63433  0.74725  
Scale: 3.0616791 1.5367452 18.256556 1.0       16.96325  1.0032814


Source:thiz.add(1,3)
result:4

Labels: JXEL      JSEL      MVEL      Ognl      Aviator   FEL      
Times: 25.700687 20.073105 46.815735 1.44465   2147.4836 0.295674 
Scale: 86.92238  67.88931  158.33565 4.8859553 7263.011  1.0 


备注:这个测试对于Aviator是不公平的,因为没有使用Aviator2.0。其他包没有太关注。现在正在开发新的功能,没有时间做详细测试,在家里还是感谢jindw提供的测试代码

小结:经过上面的测试,Fel全面领先。
20 楼 rabbitpro 2011-09-16 15:15
现在的表达式解析器有很多,我现在项目中正好用到,选用了spel.
19 楼 elam 2011-09-16 11:05
相比BeanShell有什么优势?
18 楼 willothe 2011-09-16 08:57
ansjsun 写道
lotusyu 写道
ansjsun 写道
和直接构造实体类有区别么..具体应用场景在什么地方啊??效率要比hashmap高很多么

表达式是动态的,一般由用户创建,或由程序自动生成,不能硬编码的。
可以应用在数据过滤、条件匹配、公式求值、工作流路由等。现在很多的开源框也会用到EL,总之,凡是支持用户写表达式的地方,都可以使用EL。
至于效率,不知道你为何拿HashMap做比较?


我愚昧了..我很少...有这种需求的..不过我感觉比如用户在前台输入
"A+B*C" 字符串传到后台..然后我根据运算符分割..然后算出来HashMap.get("A")+HashMap.get("B")*HashMap.get("C")....意思差不多吧

你的确愚昧

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 表达式引擎fel-0.9版本

    Fel表达式计算引擎0.9版本

  • Fel Javael表达式引擎

    Fel轻量级的高效的表达式计算引擎。 Fel在源自于企业项目,设计目标是为了不断变化的功能需求和性能需求.文档中有个别错误,但不影响阅读

  • java 表达式引擎 效率最高_性能可以媲美Java的表达式引擎:Fel 0.7.1发布

    简 介Fel(Fast Expression Language)是开放的、高效的、轻量级的表达式语言。拥有解释执行和编译执行双引擎。Fel在编译执行时,做了很多优化,适合处理海量数据。Fel扩展性强,用户可以定制Fel执行时的众多环节,以...

  • 史上最为高效的表达式计算引擎Fel

     通常情况下,Fel-0.7每秒可以执行千万次表达式(不包含编译时间)。速度是Jexl-2.0的20倍以上。 目前还没有发现开源的表达式引擎比Fel快。 为何要使用Fel ? Fel语法和API非常简单,语法与Java基本相同,几乎没有...

  • Fel表达式引擎

    Fel表达式引擎

  • 性能可以媲美Java的表达式引擎——Fel 0.7.1 发布

    介绍在这里:http://code.google.com/p/fast-el/ 表达式很清晰,性能可以自己测试。

  • bpi-fel-mass-storage-gui4win:带有 sunxi-tools 的 bpi-fel-mass-storage GUI 以便在 windows 下运行

    bpi-fel-mass-storage-gui4win 带有 sunxi-tools 的 bpi-fel-mass-storage 图形用户界面,以便在 Windows 下运行。支持的设备: BPI-M2 +(H2 + / H3 / H5) BPI-M2Zero (H2+) BPI-M3 (A83T/H8/R58) BPI-M64 (A64/...

  • fel计算引擎0.9官方版本.zip

    fel计算引擎0.9官方版本,0.9的版本多了很多方法,支持了大数高精度,maven没有找到直接pom依赖,下载到本地再依赖本地jar包来进行操作

  • sunxi-tools-fel-windows

    我自己移植的windows下的sunxitools-fel,可以用于全志cpu的fel模式。cpu调试

  • bpi-fel-mass-storage-gui4win v1.002

    本工具用于Windows将开发板的emmc识别为U盘,然后进行系统烧录

  • Fel表达式引擎使用样例-验证逻辑表达式是否规范

    public static void main(String[] args){ ... //表达式转换 String[] exp=keyExp.replace(&quot; and &quot;,&quot;&amp;amp;&amp;amp;&quot;).replace(&quot; or &quot;,&quot;||&quot;).replaceAll(&quot;^not

  • 高速 Fel表达式引擎

    高速 Fel表达式引擎 。类似ognl 速度很快。 性能很高

  • fel计算引擎(表达式计算数学公式)--实例sigma求和∑

    fel计算引擎--实例sigma求和∑ 从而避免每一个公式都手动写方法计算,只要输入数学公式就可计算结果; 示例计算 1+2*(SUM('x_*3+1','1','5')+1) fel用的0.9版本,支持大数高精度; 约定变量以下划线结尾 ...

  • fel-0.8.zip

    fel轻量高效的表达式计算引擎,下载后解压放入项目中即可使用

  • java fel api_Java表达式计算-Fel

    Fel是支持表达式计算的一个库(java)。Fel支持解释执行和编译执行,可以根据性能要求选择执行方式。下面给出示例和性能测试数据:package datagene;import java.util.Random;import com.greenpineyu.fel.Expression;...

  • FEL-表达式

    Fel是轻量级的高效的表达式计算引擎[Z] Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求。 Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,...

  • Fel是轻量级的高效的表达式计算引擎

    Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求。 Fel是开放的,引擎执行中的多个模块都可以扩展或...Fel基于Java1.5开发,适用于Java1.5及以上版本。 表达式引擎QQ群:75055831,欢迎交流。

  • 数理方法习题 前六章.pdf

    数理方法习题 前六章

  • 某大型制造企业IT蓝图规划及实施路线.pptx

    某大型制造企业IT蓝图规划及实施路线.pptx

  • 基于Springboot和Vue的社区团购系统设计源码 社区团购系统设计代码(98分期末优秀大作业)

    社区团购系统设计源码(高分毕设),个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码[代码]、该项目可以直接作为毕设使用。项目技术栈:前端是vue,后端是springboot,项目代码都经过严格调试,代码没有任何bug! 系统源码(高分毕设),个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码[代码]、该项目可以直接作为毕设使用。项目技术栈:前端是vue,后端是springboot,项目代码都经过严格调试,代码没有任何bug! 系统源码(高分毕设),个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码[代码]、该项目可以直接作为毕设使用。项目技术栈:前端是vue,后端是springboot,项目代码都经过严格调试,代码没有任何bug!

Global site tag (gtag.js) - Google Analytics