Aviator(表达式执行引擎)发布1.0.1

   Aviator是一个表达式执行引擎,最近由于工作上的原因,又将这个东西扩充了一下,加入了静态的编译优化和seq库。

    对于类似"1+2"这样由常量组成的表达式,会在编译的时候直接计算出结果而非生成字节码运行时计算。非常量组成的表达式如"3.14*R*R+4/2"也会在编译的时候优化成"3.14*R*R+2",也就是说能在编译的时候计算的都计算出来,不能在编译的时候确定的就生成字节码,运行时动态计算。默认不启用编译优化,除非设置:

AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL);

    另外,加入了seq库用于操作集合和数组,在aviator中,你可以用[ ]操作符直接访问数组和java.util.List,除此之外seq库添加了一些对数组和集合的常用操作,示例如下:

map(seq,println)            //打印集合
map(seq,-)                  //取集合中元素的相反数组成的集合
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库的风格偏向FP,但是能做的事情其实有限,毕竟aviator不是一门语言,seq库只提供了最常见的一些函数,其他的只有用户自己扩展了。

    Aviator的一个介绍PPT

Aviator——轻量级表达式执行引擎

View more presentations from dennis zhuang.

    Aviator 1.0.1也已经放到maven的中心仓库,你可以直接引用:

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

   
    文章转自庄周梦蝶  ,原文发布时间2010-09-07 14

时间: 2024-09-15 10:10:38

Aviator(表达式执行引擎)发布1.0.1的相关文章

轻量级高性能的表达式求值器——aviator发布2.0

    aviator是一个轻量级的.高性能的Java表达式求值器,主要应用在如工作流引擎节点条件判断.MQ中的消息过滤以及某些特定的业务场景.     自从上次发布1.0后,还发过1.01版本,不过都没怎么宣传.这次发布一个2.0的里程碑版本,主要改进如下: 1.完整支持位运算符,与java完全一致.位预算符对实现bit set之类的需求还是非常必须的. 2.性能优化,平均性能提升100%,函数调用性能提升200%,最新的与groovy和JEXL的性能测试看这里 http://code.goo

日志系统之定时任务执行引擎

概述 最近这段时间在强化日志系统自身的稳定性和可靠性,一个稳定可靠的系统离不开监控,我们这里谈及的监控除了服务是否存活还有这些组件的核心metrics采集与抓取,为此我们将这些任务做成了定时任务来执行.由于大致的思路以及设计已经成型,所以今天来分享一下日志系统在定时任务这块的选型与设计. 组件运行时监控 从我之前分享的文章中不难看出我们日志系统的各个组件的选型: 采集agent : Flume-NG 消息系统 : Kafka 实时流处理 : Storm 分布式搜索/日志存储(暂时) : Elas

【软件周刊第 31 期】Node.js 发布 v8.0.0 正式版;Qt 5.9 正式发布,长期支持版本

摘要: 软件周刊(05.28 - 06.03):本周热门软件更新 - Node.js 发布 v8.0.0 正式版:npm v5.0.0 正式发布,改进了稳定性:Qt 5.9 正式发布,长期支持版本:Dotty 0.1.2-RC1 发布,Scala 的下一代编译器:Linux Mint 18.2 Sonya 将于 6 月上旬发布公测版本 Node.js 发布 v8.0.0 正式版 新版带来了一系列重大的变化和新功能,Node.js v8 将在 2017 年 10 月进入长期支持(LTS)版本阶段.

JVM学习笔记(四)——字节码执行引擎

代码编译的结果从机器码转变为字节码,是存储格式的一小步,确实编程语言发展的一大步.正是因为有了字节码这一中间格式才有了Java语言跨平台的特性. 字节码并不能直接基于物理机执行引擎执行,因为物理机执行引擎是建立在特定的处理器,指令集以及操作系统之上的,并不具备跨平台特性.所以执行字节码的责任就交给了虚拟机中的字节码执行引擎. 1 运行时栈帧结构 栈帧是用于刻画Java程序运行时一个方法的调用.执行以及返回过程的数据结构.通过学习前面的博客我们知道Java程序运行时有一块区域叫做虚拟机栈,而虚拟机

BeanMapping发布1.0.2版本

背景   BeanMapping是什么? 请查看我之前的一篇文章:  我也造了个轮子:BeanMapping(属性拷贝)  版本变更内容   convetor包名重构,拼写错误   ScriptExecutor接口重构,加上ScriptContext操作   FiledSetExecutor去除对args的强制匹配依赖   mapping支持name定义   mapping支持嵌套映射/集合映射对象的name定义   增加NullSymbolGetExecutor的实现,支持无源属性的映射 相比

让天下没有难做的APP Testin发布2.0一站式测试服务平台

 记得前两年,随着移动互联网热潮,移动App火了一把,身边放弃优厚薪资待遇而投身App创业的人不在少数,各个垂直细分类App层出不穷.这些初创企业除了将应用本身内容.服务做好以外,很多人嘴里谈的更多的则是用户体验,而用户体验中不可或缺的则是应用的稳定性,正所谓"三分开发七分测试",无BUG.运行稳定才是增强用户黏度的基础. 昨天,Testin发布2.0测试服务,主打移动APP一站式云测试服务平台.Testin一站式缺陷智能解决平台,具体来说就是满足所有APP的测试需求,一站式管理APP

PgSQL · 引擎介绍 · 向量化执行引擎简介

摘要 本文为大家介绍一下向量化执行引擎的引入原因,前提条件,架构实现以及它能够带来哪些收益. 希望读者能够通过对这篇文章阅读能够对向量化执行引擎的应用特征与架构有一个概要的认识. 关键字 向量化执行引擎, MonetDB,Tuple, 顺序访问,随机访问, OLAP, MPP,火山模型,列存表,编译执行 背景介绍 过去的20-30年计算机硬件能力的持续发展,使得计算机的计算能力飞速提升.然后,我们很多的应用却没有做到足够的调整到与硬件能力配套的程度,因此也就不能够充分的将计算机强大的计算能力转换

工作流引擎 Flowable 6.0.0.RC1 release,完全兼容Activi

Flowable 6.0.0.RC1 release,第一个可流动的6引擎版本(6.0.0.RC1). Flowable 6.0.0.RC1 relase新增加的功能以及特色: 包重命名为org.Flowable ,重命名flowable.cfg的配置文件.xml和flowable-context.xml. 类名称重命名使用Flowable 而不是Activiti在需要的地方. 功能在IDM引擎分离,身份和身份数据库表是由这个引擎.默认情况下IDM引擎启动时启用可流动的引擎,但它可以被禁用的di

SQL Server中的执行引擎入门

简介 当查询优化器(Query Optimizer)将T-SQL语句解析后并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎(Execution Engine)来进行执行.本文旨在分类讲述执行计划中每一种操作的相关信息. 数据访问操作 首先最基本的操作就是访问数据.这既可以通过直接访问表,也可以通过访问索引来进行.表内数据的组织方式分为堆(Heap)和B树,其中表中没有建立聚集索引时数据是通过堆进行组织的,这个是无序的,表中建立聚集索引后和非聚集索引的数据都是以B树方式进行组织,