Posted on 2010-09-07 14:22
dennis 閱讀(4911)
評(píng)論(1) 編輯 收藏 所屬分類:
java 、
my open-source
Aviator是一個(gè)表達(dá)式執(zhí)行引擎,最近由于工作上的原因,又將這個(gè)東西擴(kuò)充了一下,加入了靜態(tài)的編譯優(yōu)化和seq庫。
對(duì)于類似"1+2"這樣由常量組成的表達(dá)式,會(huì)在編譯的時(shí)候直接計(jì)算出結(jié)果而非生成字節(jié)碼運(yùn)行時(shí)計(jì)算。非常量組成的表達(dá)式如"3.14*R*R+4/2"也會(huì)在編譯的時(shí)候優(yōu)化成"3.14*R*R+2",也就是說能在編譯的時(shí)候計(jì)算的都計(jì)算出來,不能在編譯的時(shí)候確定的就生成字節(jié)碼,運(yùn)行時(shí)動(dòng)態(tài)計(jì)算。默認(rèn)不啟用編譯優(yōu)化,除非設(shè)置:
AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL);
另外,加入了seq庫用于操作集合和數(shù)組,在aviator中,你可以用[ ]操作符直接訪問數(shù)組和java.util.List,除此之外seq庫添加了一些對(duì)數(shù)組和集合的常用操作,示例如下:
map(seq,println) //打印集合
map(seq,-) //取集合中元素的相反數(shù)組成的集合
include(seq,element) //判斷element是否在集合中
sort(seq) //排序,返回新的集合
reduce(seq,+,0) //求和
reduce(seq,-,1) //求積
filter(seq,seq.gt(3) //大于3的元素組成的新集合
filter(seq,seq.exists()) //不為nil元素組成的新集合
count(seq) //集合大小
可以看到seq庫的風(fēng)格偏向FP,但是能做的事情其實(shí)有限,畢竟
aviator不是一門語言,seq庫只提供了最常見的一些函數(shù),其他的只有用戶自己擴(kuò)展了。
Aviator的一個(gè)介紹PPT
Aviator 1.0.1也已經(jīng)放到maven的中心倉庫,你可以直接引用:
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>1.0.1</version>
</dependency>