java fel api_Java表达式计算-Fel

article/2025/9/13 21:03:59

Fel是支持表达式计算的一个库(java)。

Fel支持解释执行和编译执行,可以根据性能要求选择执行方式。

下面给出示例和性能测试数据:

package datagene;

import java.util.Random;

import com.greenpineyu.fel.Expression;

import com.greenpineyu.fel.FelEngine;

import com.greenpineyu.fel.FelEngineImpl;

import com.greenpineyu.fel.context.FelContext;

import com.greenpineyu.fel.parser.FelNode;

public class Expr {

public static void main(String[] args) {

Random random = new Random();

Object result = null;

long time = System.nanoTime();

for(int i = 0; i < 200000000; i++) {

result = random.nextInt(1000) * random.nextInt(1000) +

random.nextInt(1000);

}

System.out.println(((float)(System.nanoTime() - time) / 1000000) + "ms");

FelEngine fel1 = new FelEngineImpl();

FelContext ctx1 = fel1.getContext();

time = System.nanoTime();

for(int i = 0; i < 1000000; i++) {

ctx1.set("a", random.nextInt(1000));

ctx1.set("b", random.nextInt(1000));

ctx1.set("c", random.nextInt(1000));

result = fel1.eval("a * b + c");

}

System.out.println(((float)(System.nanoTime() - time) / 1000000) + "ms");

FelEngine fel2 = new FelEngineImpl();

FelNode node = fel2.parse("a * b + c");

FelContext ctx2 = fel2.getContext();

time = System.nanoTime();

for(int i = 0; i < 200000000; i++) {

ctx2.set("a", random.nextInt(1000));

ctx2.set("b", random.nextInt(1000));

ctx2.set("c", random.nextInt(1000));

result = node.eval(ctx2);

}

System.out.println(((float)(System.nanoTime() - time) / 1000000) + "ms");

FelEngine fel3 = new FelEngineImpl();

Expression exp = fel3.parse("a * b + c");

FelContext ctx3 = fel3.getContext();

time = System.nanoTime();

for(int i = 0; i < 200000000; i++) {

ctx3.set("a", random.nextInt(1000));

ctx3.set("b", random.nextInt(1000));

ctx3.set("c", random.nextInt(1000));

result = exp.eval(ctx3);

}

System.out.println(((float)(System.nanoTime() - time) / 1000000) + "ms");

}

}

输出:

035bfbae064a04c9ebd728e1c3f5c6fd.png


http://chatgpt.dhexx.cn/article/8R0sy2N8.shtml

相关文章

java fel_FEL表达式的用法

Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单。 Fel有双引擎,同时支持解释执行和编译执行。可以根据性能要求选择执行方式。编译执行就是将表达式编译成字节…

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

花满天的季节 盼望着,盼望着,三月悄然来了。 一切都像刚睡醒的样子,犹如婴儿缓缓睁眼。 粉粉嫩嫩的花儿开始羞涩起来&#xff0c; 沉闷程序猿小哥哥开始躁动起来 小E也带着小妹妹悠悠公园深处。 万物生长 桃花运来了 闷闷直男小E&#xff0c;带着小妹妹压着公园马路看着…

fel的简单使用及介绍

Fel介绍 Fel在源自于企业项目&#xff0c;设计目标是为了满足不断变化的功能需求和性能需求。 Fel是开放的&#xff0c;引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(、-等都是Fel函数&#xff09;&#xff0c;所有这些函数都是可以替换的&#…

Fel实现自定义计算引擎,平均计算速度每秒10w

Fel的介绍和简单使用以及0.9版本的包在之前的博客写过了&#xff0c;有需要的朋友移步&#xff1a;fel的简单使用及介绍 项目地址&#xff1a;https://github.com/an-yusheng/CSDN-FelDemo 1. 基础的应用 下面的代码是引用原生类进行执行的&#xff0c;支持通用数学函数即加减…

访问SMBus设备

使用SMBus访问温度传感器&#xff0c;并控制smart Fan 首先聊聊SMBus的访问方法 硬件上&#xff1a;两条线SMBus Clock和Data信号 当clock信号为高时data信号才有效&#xff0c;data信号下降&#xff0c;意味着Start。data信号上升&#xff0c;意味着Stop。开始后会发送九位&…

SMBUS通信波形分析

SMbus通信协议 1.特性 SMBus是 System Management Bus 的缩写&#xff0c;译为系统管理总线&#xff0c;SMBus是一种二线制串行总线&#xff0c;1996年第一版规范开始商用。它大部分基于I2C总 线规范。和 I2C一样&#xff0c;SMBus不需增加额外引脚&#xff0c;创建该总线主要…

DSP SMBus总线通信

参考文档&#xff1a;System Management Bus (SMBus) Specification Version 3.0.pdf 简介&#xff1a; SMBus&#xff08;System Management Bus&#xff09;于1995年被 Intel 提出&#xff0c;应用于低速率通信&#xff0c;是一种二线制串行总线&#xff0c;该总线大部分基…

linux i2c smbus驱动

目录 目录 数据收发流程 驱动层 收发接口 驱动层注册 smbus控制器 i2c控制器 协议接口使用 总体流程 数据收发关键数据结构 使用示例--eeprom的读写 使用示例--smbus的读写接口 数据收发流程 驱动层 收发接口 首先了解&#xff0c;驱动层向协议&#xff08;算法&a…

初学 SMBus

(这篇主要对象为固件工程师&#xff0c;简单介绍SMBus的一些基本概念而已) 概述 System Management Bus (简称SMBus或是SMB) &#xff0c;是1995年由Intel提出的&#xff0c;用来访问主机板上的设备(EEPROM、温度感测器、电压感测器等) 并收集相应的资讯(SPD、温度、电压、版…

SMBus协议

SMBus协议 文章目录 SMBus协议参考资料&#xff1a;一、 SMBus是I2C协议的一个子集二、 SMBus协议分析2.1 symbols(符号)2.2 SMBus Quick Command2.3 SMBus Receive Byte2.4 SMBus Send Byte2.5 SMBus Read Byte2.6 SMBus Read Word2.7 SMBus Write Byte2.8 SMBus Write Word2.…

系统管理总线(SMBus)介绍

SMBus介绍 系统管理总线协议概要系统管理总线 关键标记表SMBus接口函数1. SMBus Quick Command2. SMBus接收字节函数&#xff1a;i2c_smbus_read_byte()3. SMBus发送字节函数&#xff1a;i2c_smbus_write_byte()4. SMBus读取字节函数&#xff1a;i2c_smbus_read_byte_data()5. …

SMBus学习记录

SMBus学习记录 注&#xff1a;本文基于对于smb3.0 spec的学习总结。更多时序要求需要查阅spec。 SMBus 是 System Management Bus 的缩写&#xff0c;译为系统管理总线&#xff0c;SMBus是一种二线制串行总线&#xff0c;1996年第一版规范开始商用。它大部分基于I2C总线规范。…

SMBus通信,与IIC通信的差异

SMbus总线 SMBus是System Management Bus的缩写&#xff0c;它是一种简单的串行通信总线&#xff0c;用于连接计算机上的系统管理芯片和其他设备&#xff0c;如电池、风扇、温度传感器等。SMBus是由英特尔公司开发的&#xff0c;它基于I2C总线协议&#xff0c;但是增加了一些额…

【Linux】特别篇--SMBus 协议

【Linux】特别篇--SMBus 协议 一、SMBus 简介二、SMBus 与 I2C 区别三、SMBus协议分析3.1 符号含义3.2 SMBus Quick Command3.3 SMBus Receive Byte3.4 SMBus Send Byte3.5 SMBus Read Byte3.6 SMBus Read Word3.7 SMBus Write Byte3.8 SMBus Write Word3.9 SMBus Block Read3.…

SMBUS的介绍与访问

博文是为了总结自己在bios学习上面的点点滴滴&#xff0c;并且加深印象&#xff0c;由于本人水平有限&#xff0c;难免存在不足之处&#xff0c;望指正&#xff0c;同时感谢CSDN提供的平台。本文主要介绍的是SMBUS。 1 SMBUS的简介 特点&#xff1a; SMBUS&#xff0c;System …

java完整开发环境搭建_如何搭建一个完整的Java开发环境

这篇文章主要教大家如何搭建一个完整的Java开发环境&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 作为一个Java程序员&#xff0c;配置一个java开发环境是必备的技能&#xff0c;今天给广大菜鸟初学者补上一课。环境的配置&#xff0c;大概就分三个…

1.1-java开发环境搭建

java开发环境搭建 回到第一章&#xff1a;目录 文章目录 java开发环境搭建前言一、下载jdk1.安装前检查 二、安装jdk1.安装2.配置环境变量3.验证安装 前言 本节内容是搭建java的开发环境。 分为三步&#xff1a;下载jdk&#xff1b;安装jdk&#xff1b;配置环境变量&#xff…

Windows Java开发环境搭建

1.下载安装配置 JDK 8 打开 https://developer.oracle.com/找到 Java8 下载位置&#xff0c;点击下载链接&#xff0c;下载JDK 8 下载后如下图所示&#xff0c;双击安装一直选择选择下一步 2.下载安装 Eclipse点击官网下载 Eclipse下载后就是一个压缩包&#xff0c;只需解压即…

基于Centos7的Java开发环境搭建

基于Centos7的Java服务器搭建 前提&#xff1a;Centos常用命令安装 1. 安装wget yum -y install wget2. 安装gcc yum -y install gcc1. Centos7下的防火墙操作 systemctl status firewalld # 查看防火墙状态 systemctl start firewalld # 开启防火墙 systemctl stop fi…

Java开发环境的搭建与配置

Java开发环境的搭建与配置 1、JDK、JRE、JVM的关系 2、JDK的下载&#xff1a;http://java.sun.com 3、JDK安装&#xff1a;可以自定义安装路径 4、JDK环境变量配置&#xff1a; 鼠标右击【计算机】->【属性】->【高级系统设置】->【高级】->【环境变量】 系统变…