首页 > 其他分享 >bytecode 生成器

bytecode 生成器

时间:2023-05-10 11:56:15浏览次数:47  
标签:set 生成器 cojen bytecode var runMethod class

基础 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,这不是一种好的设计,但实际用的时候问题倒是不大,因为函数设计比较符合直觉。

标签:set,生成器,cojen,bytecode,var,runMethod,class
From: https://www.cnblogs.com/inshua/p/17387555.html

相关文章

  • CMake的生成器详解
    CMake会通过CMakelist.txt文件,生成适用于不同项目类型的makefile文件,然后makefile文件被不同的编译器使用进行编译,考虑到C/C++的开发环境之多,有非常多的种类的项目开发环境,但是CMake基本上都考虑到了,这里做一个小的汇总。CMake支持下列generator:VisualStudio6:生成VisualSt......
  • C# Random类 伪随机数生成器
     Random类表示伪随机数生成器,它是一种能够产生满足某些随机性统计要求的数字序列的设备,其方法如下表:Random类方法方法说明Next已重载。返回随机数NextBytes用随机数填充指定字节数组的元素NextDouble返回一个介于0.0和1.0之间的随机数Sample返回一个介于......
  • 2023最新版——新手使用mybatis-plus 3.5.2并使用器代码生成器
    最新版——新手使用mybatis-plus3.5.2并使用器代码生成器第一步,pom文件引入依赖主要引入mybatis-plus和代码生成器需要使用的freemaker依赖<dependency> <groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</vers......
  • FreeSql.Generator实体类生成器
    一、安装:dotnettoolinstall-gFreeSql.Generator安装前请先安装.netcore3.1以上版本,建议安装vs2019以上版本二、说明FreeSql.Generator--help三、简单使用,可以创建bat文件:FreeSql.Generator-Razor1-NameOptions0,0,0,0-NameSpaceMyProject-DB"PostgreSQL,......
  • 批量通话记录生成器 , 手机虚拟通话记录生成器,模拟通话记录生成器
    在通话记录生成器当中,铁牛通话记录生成器,它是可以一键自动生成通话记录app软件,可选通话时间范围,可选通话时间长度,可选通话拨号类型。如何“铁牛通话记录生成器下载”?在手机浏览器打开佰渡baidu输入,铁牛通话记录生成器,就这几个字搜索一下就可以,其他的不用多输入。你也可以手动在浏......
  • 讲解:手机通话记录生成器在线,通话记录生成器下载,通话记录生成器安卓版
    在了解通话记录生成器app的时候,铁牛通话记录生成器,它是一个为用户一键自动生成通话记录的app。怎么下?打开你的手机佰渡baidu浏览器,搜索,铁牛通话记录生成器,就这几个字,其他的不用多输入即可,你也可以看下面第一个图里面的中间的绿色图标,思考一下。通话记录生成器软件app,通话记录生成......
  • 手机通话记录生成器在线,通话记录生成器下载,通话记录生成器安卓版
    在了解通话记录生成器app的时候,铁牛通话记录生成器,就是进jp155.com,它是一个为用户一键自动生成通话记录的app。怎么下?这段话的这几个网,复制任意一个网址到你的手机浏览器去打开它。通话记录生成器软件app,通话记录生成器安卓版jp1988.com,通话记录生成器app,通话记录生成器在线,通话记......
  • 通话记录生成器app软件下载,通话记录生成器最新版,电销通话记录生成器
    铁牛通话记录生成器haosen111.com是可以一键自动批量生成通话记录app。铁牛通话记录生成器,复制这些字母串到手机浏览器去打开,可以进来jp155.com,默认跟着软件上设置好的五步,从上往下顺着操作。“铁牛通话记录生成器下载”?在这里也可以jp1988.com铁牛通话记录生成器,前面的这些网都可......
  • 手机通话记录生成器下载,虚拟通话记录生成器,通话记录生成器安卓版下载最新版本
    铁牛通话记录生成器是一键批量虚拟生成通话记录的app,“铁牛通话记录生成器下载”?这段话里面几个网都可以,复制它们到手机浏览器打开就可以,在铁牛通话记录生成器wokaituan.com上,你可以批量把号码复制粘贴进来软件app上,可以选择通话时间范围,设置通话时间长度,选择通话类型(呼出电话、呼......
  • 通话记录生成器安卓版下载,手机通话记录生成器app,一键批量生成通话记录
    铁牛通话记录生成器是可以批量自动生成通话记录的app软件。如何“铁牛通话记录生成器下载”?这段话的这几个网都可以,复制它们到手机浏览器打开就可以。通话记录生成器下载jp155.com,通话记录生成器安卓版下载jp1988.com,下载通话记录生成器app,体验通话记录生成器在线,了解通话记录生成......