阅读更多

 

    Aviator是一个轻量级的、高性能的Java表达式求值器,主要应用在工作流引擎节点条件判断、MQ中的消息过滤以及某些特定的业务场景中。

 

   Aviator的设计思路跟利用GroovyObject的求值思路是一样的,通过编译并动态生成字节码的方式将表达式编译成一个类,然后反射执行这个类,因此会在效率上比纯解释执行的IKExpression好一些。

 

      自从上次发布1.0后,还发过1.01版本,不过都没怎么宣传。这次发布一个2.0的里程碑版本,主要改进如下:

 

1、完整支持位运算符,与java完全一致。 

2、优化了性能,平均性能提升100%,函数调用性能提升200%,最新的groovy和JEXL的性能测试看这里 http://code.google.com/p/aviator/wiki/Performance 

3、添加了新函数,包括long、double、str等用于类型转换的函数,添加了string.indexOf函数。 

4、完善了用户手册,更新了性能测试。

 

下载地址:  http://code.google.com/p/aviator/downloads/list

项目主页:  http://code.google.com/p/aviator/

用户指南:  http://code.google.com/p/aviator/w/list

性能报告:  http://code.google.com/p/aviator/wiki/Performance

源码:        https://github.com/killme2008/aviator

 

 

maven引用:

	<dependency>
			<groupId>com.googlecode.aviator</groupId>
			<artifactId>aviator</artifactId>
                        <version>2.0</version>
	</dependency>

 

6
0
评论 共 25 条 请登录后发表评论
25 楼 ray_linn 2011-07-19 15:05
dennis_zane 写道
好吧,我再耐心点。
1/3无论在java还是aviator里的结果都是0,因为两个都是整数,整除为0。你要想结果提升为double,就需要至少一个操作数是double。你可以1.0/3,可以1/3.0,也可以1.0/3.0。
java的运算规则是,double与long或者int运算,结果提升为double,aviator的规则完全相同。


遇到这么个不谦虚的小白~认了吧。反正ITEYE上就是小白多
24 楼 dennis_zane 2011-07-19 14:41
关于类型提升和窄化的规则可以看这个
http://java.sun.com/docs/books/jls/third_edition/html/conversions.html

只要google一下就可以知道的东西,为什么需要别人来告诉你?
23 楼 dennis_zane 2011-07-19 14:38
好吧,我再耐心点。
1/3无论在java还是aviator里的结果都是0,因为两个都是整数,整除为0。你要想结果提升为double,就需要至少一个操作数是double。你可以1.0/3,可以1/3.0,也可以1.0/3.0。
java的运算规则是,double与long或者int运算,结果提升为double,aviator的规则完全相同。
22 楼 dennis_zane 2011-07-19 14:36
如果自己不懂,可以谦虚点,至少尝试跑下代码再下结论。我很讨厌这种纯粹为了反对而反对的论调。
21 楼 dennis_zane 2011-07-19 14:35
还需要我说多少遍吗?你将你那个表达式放到java里执行看看,我无语了。
20 楼 windywany 2011-07-19 14:34
ray_linn 写道
windywany 写道
ray_linn 写道
windywany 写道
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?



怎么算也是最后才转为double,还是6.0

那如何才能让这个表达式的结果是6.33呢?


1.0/3.0
dennis_zane 写道
windywany 写道
ray_linn 写道
windywany 写道
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?



怎么算也是最后才转为double,还是6.0

那如何才能让这个表达式的结果是6.33呢?


你要6.3,就要这样 1+2+3+1.0/3
我建议你再好好看java的类型转换规则和运算规则

为使用这个轻量级的、高性能的Java表达式求值器的程序员们平添了许多愁--至少他们要将用户理解的1/3转换为Aviator理解的1.0/3.0。
19 楼 ray_linn 2011-07-19 14:05
windywany 写道
ray_linn 写道
windywany 写道
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?



怎么算也是最后才转为double,还是6.0

那如何才能让这个表达式的结果是6.33呢?


1.0/3.0
18 楼 dennis_zane 2011-07-19 14:02
windywany 写道
ray_linn 写道
windywany 写道
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?



怎么算也是最后才转为double,还是6.0

那如何才能让这个表达式的结果是6.33呢?


你要6.3,就要这样 1+2+3+1.0/3
我建议你再好好看java的类型转换规则和运算规则
17 楼 windywany 2011-07-19 13:38
ray_linn 写道
windywany 写道
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?



怎么算也是最后才转为double,还是6.0

那如何才能让这个表达式的结果是6.33呢?
16 楼 ray_linn 2011-07-19 13:29
windywany 写道
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?



怎么算也是最后才转为double,还是6.0
15 楼 windywany 2011-07-19 12:37
dennis_zane 写道
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。

就意外在result只能是Double不能是Long! 是Double的话,你们认为结果是6.0还是对的吗?
14 楼 ray_linn 2011-07-18 14:27
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


答案是6.0,必然的,1/3在java int中等于0.
13 楼 chimer 2011-07-15 22:16
1/3 得到的是强转 int ,为0 不是只有java这么干的。
12 楼 dennis_zane 2011-07-15 17:26
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


这个表达式就算在java里也是6.0,所以我搞不清楚你的意外在哪里,而是你这个回复太让我意外了。
11 楼 dennis_zane 2011-07-15 17:25
windywany 写道
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.


6.0

这个结果怎么意外了??
10 楼 windywany 2011-07-15 17:12
Double result = (Double) AviatorEvaluator.execute("1.0 + 2 + 3 + 1/3"); 这个结果让我太意外了.
9 楼 elan1986 2011-07-15 12:19
mark!
8 楼 maodiesky 2011-07-15 08:38
MARK一下
7 楼 calvinlyc 2011-07-14 19:04
这个其实应该就是类似于.Net中LINQ的东西吧,其实Java一直缺一个这样的工具
6 楼 kjj 2011-07-14 18:05
一直还是beanshell 和bsf

发表评论

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

相关推荐

  • hibernate初学者jar包

    对于java初学者学习完java基础之后,将深入学习框架,对于hibernate所需要的一些jar包和配置文件进行一个归纳!

  • C++ WORD&&DWORD类型转int

    【代码】C++ WORD&&DWORD类型转int。

  • 刘铁猛挨踢人感言:做一个高情商的程序员

    一个在光怪陆离混迹的群体,他们自称程序猿、攻城狮、挨踢民工,一面乐观的自嘲,一面努力的工作。提起他们,你也许想到了张江男,想到了眼睛、T恤、牛仔裤、运动鞋、双肩包,但是有些故事是你眼睛所看不到的。在这里,我们一起来倾听一个IT人生的故事,技术路上不孤单! 姓名:刘铁猛 Tim 性别:男 生日:70后 所在城市:Redmond(雷德蒙德,美国华盛顿州城市,微软总部) 关键词:《深入浅出WPF》 职业信息: 从业时间:2002 行业:软件 职位:软件工程师 关注技术:架构与模式 小序: 很高兴..

  • Windows串口通信

    串口通信的基本步骤: 通过CreateFile("com3") 打开串口 通过DCB结构体和SetCommState函数,设置串口的参数 通过ReadFile()和WriteFile()读写串口 Windows串口通信实例 封装了一个串口通信的C++类CSerial,通过CSerial类的OpenSerialPort()可以打开一个串口,串口打开后后自动新建线程读取串口...

  • 【C#进阶学习】——刘铁猛老师

    一、 C#语言入门详解:类、对象、类成员简介 1.1实例化对象 1.2引用变量(可以对同一个对象进行操作和访问) 1.3类 以属性为侧重点的类 以方法为侧重点的类 以属性为侧重点的类 1.4.静态成员与实例化成员 静态成员:立属于类的,表现出来这个类的各项特征和行为状态, 比如人类的总数,增长率(对这个类来说是有意义的)。 实例成员:立属于这个实例化出来的对象的各种特征和行为状态, 比如人的身高,体重,唱歌和跳舞(对这个类来说是没有意义

  • VC 常用数据类型总结

    导读: vc类型本文转自 http://www.cnblogs.com/sadier/articles/102085.html VC 常用数据类型总结 ATOM 原子(原子表中的一个字符串的参考) BOOL 布尔变量 BOOLEAN 布尔变量 BYTE 字节(8位) CCHAR Windows字符 CHAR Windows字符 COLORREF 红、绿、蓝(RGB)彩色值(32位) Con

  • 史上最强 Java 学习路线图!

    包括的知识点有: 环境搭建——Intellij IDEA 一站式搞定 Java 基础语法 面向对象——封装、继承、多态 数组 字符串 集合框架 IO 反射 注解 网络编程 并发编程 这方面的资源我给大家梳理下: 1)针对 Intellij ...

  • 深度学习&故障诊断初学者 - 学习路线

    针对初学者,一头雾水,不知如何学习,本文给出了一个学习路线 Python学习 - 打好编程基础 https://www.bilibili.com/video/BV1vA411b7Rn?spm_id_from=333.337.search-card.all.click B站免费课程 学到P49 建议时长 ...

  • python初学者必看学习路线图!!!

    python应该是近几年比较火的语言之一,很多人刚学python不知道该如何学习,尤其是没有编程基础想要从事程序员工作的小白,想必应该都会有此疑惑,包括我刚学python的时候也是通过从网上查找相关资料以及从学校课程...

  • 适合C语言学习的书籍推荐 | 初学者必备

    看视频学习是初学者入门比较好的学习方式,但不能光看视频,也需要去阅读一些具有权威性的,具有认可度的书籍协同学习,回归书本,然而市场上的关于C语言的书籍琳琅满目,适合初学者的有哪些呢?...............

  • 初学者学Java常遇到的问题,我都给你回答了!

    前言 只有光头才能变强。 ... ...我是一个Java的初学者,大概学了四天,对Java到底能做什么还是一头雾水,每天对着黑屏(DOS系统)除了编译还是编译,那么Java对于一个初学者来说Java可以做些什...

  • 社区英雄榜:谁是最有价值的技术博客?

    MVB评选开始了,欢迎大家给你心目中最有价值的博客投票...投票地址:http://www.csdn.net/community2006/vote/index.rails?id=1整理CSDN 最有价值博客的提名真是一件头痛的事情,要从17万博客注册用户中挑选出50名对网友最有价值的博客来不是一件简单的事情,因为:第一、CSDN Blog不像BBS有专家分和各版面排名这种量化的指标,我们有的只有访

  • 【串口收发数据】热成像模组使用

    最近搞了一个热成像模组,收发数据用来检测体温,找了一下串口收发数据的应用,利用VS2019写的C++代码,尝试成功,记录下来,以备不时之需。 代码如下: 1、cap_tem.h文件 #ifndef _WZSERIALPORT_H #define _WZSERIALPORT_H #include&lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; class WZSerialPo

  • c语言入门详解刘铁猛,《C#入门详解》刘铁猛 初识类与名称空间&类,对象,类成员简介...

    初识类与名称空间一、如果我们写一个类,没有把这个类的名称空间是哪个标出来的时候,就从引用的名称空间里检索,看到哪个名称空间里有这个类;1.Using把名称空间引用进来;2.一个solution里可以有多个项目(Project);3.名称空间就是以树形结构组织类;4.我们编写了一个类“program”放在“namespace helloworld”这个名称空间里,意思是我自己写了一个类,当别人调用我...

  • 关于INT_PTR的理解

    使用CStringArray 定义数组获并取数组大小,语句如下:    CStringArray sArr;    sArr.Add("姓名");    sArr.Add("姓名");    int nCount = sArr.GetCount(); 使用VS2003编译时,得到如下警告信息: warning C4244: “=” : 从“INT_PTR”转换到“int”,可能丢失数据

  • Windows数据类型探幽——千回百转你是谁?(1)

    Windows Data TypesWindows数据类型   由微软Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32程序是用C语言来编写,所以没有“类”这个概念)的。这些数据类型定义了上述元素的尺码(在内存中的,也就是占用内存的字节数)和含义。笔者以前一直不太注意这些东西,结果在程序设计时可谓步履维艰。不同类型的常/变量,在程序用扮

  • 初学者该掌握的计算机知识,初学者该如何学习电脑知识

    初学者学习电脑知识方法第一阶段:鼠标和键盘的操作鼠标的操作主要是:移动、拖动、单击、双击和右击,知道鼠标的作用以及基本操作。掌握键盘的操作,可以通过打字练习来完成,熟悉键盘排列,可以熟练打字。第二阶段...

  • 学习web(前端)的知识点汇总,初学者稳稳拿捏!!!

    2、CSS知识点汇总 3、JS知识点汇总 一、HTML5(网页的骨架) 常用开发软件:Hbuilderx 使用过程:创建项目—创建目录—编写代码—运行(crtl+R) &gt;&gt;&gt; &lt;1&gt;标签: 6类: 标题标签:h1-h6...

  • C语言学习—给学习C语言初学者的建议

    因此,C语言绝对是值得初学者学习的一门语言。笔者从事C语言教学十多年的经验来看,有以下一些建议可供C语言初学者参考与借鉴。 (1)保持好奇心 这是一个现实的问题,如果你是非计算机专业的大学生,大部分人对...

  • hibernate官方入门教程(初学者必读!!!)

    hibernate官方入门教程 第一部分 - 第一个Hibernate程序 首先我们将创建一个简单的控制台(console-based)Hibernate程序。我们使用内置数据库(in-memory database) (HSQL DB),所以我们不必安装任何数据库...

Global site tag (gtag.js) - Google Analytics