bytecode 生成器
基础 objectweb asm 很难用,找了几个高级点的。
- activej codegen 这个库很像 .net DLR 风格,采用 Expression 抽象,例如 Expressions.add(), Expressions.loop()。我发现它好几年了,这两天真正用的时候发现变量声明都搞不定。查看 nashorn 的源码,其风格也与此类似,现在 nashorn 都关闭了,如 nashorn 将此部分作为组件分享出来也是一大遗产了。
- Apache Commons BCEL] 这个库基本在手写 bytecode,太吃力了。
- javaassist,类似 codedom 的思路,生成 java 代码,借助 javac 编译为 bytecode,它把重点放到类的热插拔了
- Byte Buddy 不好用,已经忘了怎么个不好用
- cojen/Maker 最终使用的是这个,简单优雅:
ClassMaker runnableClassMaker = ClassMaker.begin().public_().implement(Runnable.class);
runnableClassMaker.addConstructor().public_();
MethodMaker runMethod = runnableClassMaker.addMethod(void.class, "run").public_();
org.cojen.maker.Variable i = runMethod.var(int.class).set(0);
org.cojen.maker.Variable j = runMethod.var(int.class).set(0);
org.cojen.maker.Variable sum = runMethod.var(int.class).set(0);
org.cojen.maker.Variable op = runMethod.var(opClass).set(runMethod.new_(opClass));
i.set(0);
Label loop1 = runMethod.label().here();
j.set(0);
Label loop2 = runMethod.label().here();
sum.inc(i.add(j));
j.inc(1);
j.ifLt(10000, loop2);
i.inc(1);
i.ifLt(10000, loop1);
runMethod.var(System.class).field("out").invoke("println", runMethod.concat("sum: ", sum));
Class<?> run = runnableClassMaker.finish();
这是一个个人作品,大量的参数类型是 object,这不是一种好的设计,但实际用的时候问题倒是不大,因为函数设计比较符合直觉。
bytecode 生成器的更多相关文章
- python(九):迭代器与生成器
一.Python的迭代协议 迭代器是访问集合内元素的一种方式.它只能依次访问集合内元素.其特点是惰性执行. collection.abc的迭代协议提供了两个概念:可迭代对象和迭代器.可迭代对象:必须具 ...
- yield 与生成器
yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数 ...
- 介绍一款原创的四则运算算式生成器:CalculateIt2
家里小朋友读一年级了,最近每天都有一些10以内的加减法口算练习,作为程序员爸爸,自然也是想办法能够偷懒,让电脑出题,给小朋友做些练习.于是,自己在业余时间开发了一个四则运算算式生成器,名为:Calcu ...
- 每天一个设计模式-7 生成器模式(Builder)
每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,X ...
- Objective-C 生成器模式 -- 简单实用和说明
1.生成器模式的定义 将一个复杂的对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表示 2.生成器模式的UML Builder :生成器接口,定义创建一个Product各个部件的操作 Con ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(25)-权限管理系统-系统管理员(附生成器)
系列目录 这一节我们要着手建立系统管理员表,但发布之前,我先发布一个代码生成器给大家先用着. 这个生成器是为这个项目而生的,理论不能用于其他项目,而且写得比较潦草,但能用 下载地址 有兴趣要生成器源码 ...
- Living in the Matrix with Bytecode Manipulation--转
原文地址:https://www.infoq.com/articles/Living-Matrix-Bytecode-Manipulation You are probably all too fam ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- C#/ASP.NET完善的DBHelper,配套Model生成器
支持Oracle.MSSQL.MySQL.SQLite四种数据库,支持事务,支持对象关系映射:已在多个项目中实际使用. 没有语法糖,学习成本几乎为0,拿来即用. DBHelper类完整代码: usin ...
随机推荐
- 安装windows11系统跳过微软账号登录,使用本地账号登录方法
在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的Shift+F10按键(部分电脑是Fn+Shift+F10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代 ...
- 1.2 HELLO 三角形
这一节,我觉得是相当有难度的.渲染一个三角形,就需要介绍GLSL语言,图形渲染管线(Graphics Pipeline)以及着色器(Shader),标准化设备坐标(NDC)等诸多概念. 图形渲染管线和 ...
- dotnet 冒泡排序
// See https://aka.ms/new-console-template for more information using ConsoleApp1; Console.WriteLine ...
- DOMException: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'function (header, parser) { header = normalizeHeader(header);
场景:token过期,然后更新了token 重新发起请求获取数据 : 代码:使用上一次的错误请求配置报错 return request(error.config) : 解决 : return ...
- 容器虚拟化平台 KSV 1.5 发布:部署更便捷,适配更多信创需求!
报告!我们又迎来了一次重磅更新: 近日,由青云科技打造的轻量化虚拟机管理平台--KSV 容器虚拟化 1.5 版本正式发布! KSV 1.5 好在什么地方?逐个来解释 新增基于模板创建虚拟机.克隆虚拟机 ...
- Machine Learning Week_1 Introduction 1-4
目录 1 Introduction 1.1 Video: Welcome unfamiliar words symbols 1.2 Video: What is machine learning? u ...
- Java高并发,ArrayList、HashSet、HashMap不安全的集合类
首先是我们的ArrayList: 这次我们讲解的是集合的不安全,首先我们都知道ArrayList吧! List<String> list=new ArrayList<>(); ...
- HTML字体分类
网页中的将字体分为5大类 1.serif:衬线字体 2.sans-serif:非衬线字体 3.monospace:等宽字体 4.cursive:草书字体 5.fantasy:幻虚字体 <p st ...
- 3D数学基础:图形和游戏开发(第二版)--读书笔记(1)
简介: 本书是关于3D数学.三维空间的几何和代数的入门教材.它旨在告诉你如何使用数学描述三维中的物体及其位置.方向和轨迹.这不是一本关于计算机图形学.模拟,甚至计算几何的书,但是,如果读者打算研究这些 ...
- 了解 Uniswap V2(DEX)
Uniswap V2 是一个基于以太坊的去中心化交易所(DEX),它通过流动性池和自动化做市商(AMM)模型来实现去中心化的代币交换.以下是 Uniswap V2 的核心概念: 1. 自动化做市商(A ...