Skip to main content

Command Palette

Search for a command to run...

Aq 字节码结构调整

AQ字节码的详细结构

Updated
1 min read

为了适应自定义类型的需求,对于虚拟机应有相应改变以便于发挥动态语言的独有优势和更高效率(相较于未在字节码支持自定义类型)。更改内容:Add new features about class in vm. · Issue #247 · aq-org/AQ。但是对于相关字节码的结构尚未存在明确的记录,仅在代码中存有部分记录。为完善详细的字节码结构,该文章具体指出了字节码的结构以及其对应变化。

原字节码结构:

  1. 魔数:AQBC(0x41 0×51 0×42 0x43) 4字节

  2. 版本号:32位正整数 4字节

  3. 常量池

    1. 常量池长度:64位正整数 8字节

    2. 常量池内容:1字节用于类型,后面根据类型定义结束(Byte:1字节,Long、Double、Uint64t、指针:8字节,String:根据’\0’出现的位置决定结束)

  4. 变量类型表

    1. 变量类型表长度:64位正整数 8字节

    2. 变量类型表内容:正常类型(动态类型(0×00)、Byte、Long、Double、Uint64_t)1字节,特殊类型(指针,引用,const)1字节后附带类型直到遇到正常类型(包含动态类型(0×00)),Class类型检测后一个数据(Uleb128算法的常量表索引(作为其名称))

  5. Class

    1. Class名称:根据’\0’出现的位置决定结束

    2. Class内变量类型表:

      1. 变量类型表长度:64位正整数 8字节

      2. 变量类型表内容:正常类型(动态类型(0×00)、Byte、Long、Double、Uint64_t)1字节,特殊类型(指针,引用,const)1字节后附带类型直到遇到正常类型(包含动态类型(0×00)),Class类型检测后一个数据(Uleb128算法的常量表索引(作为其名称))

    3. 函数表

      1. 函数数量:64位正整数 8字节

      2. 函数名称:根据’\0’出现的位置决定结束

      3. 函数参数

        1. 函数参数数量:Uleb128算法的正整数

        2. 函数参数内容:正常类型(动态类型(0×00)、Byte、Long、Double、Uint64_t)1字节,特殊类型(指针,引用,const)1字节后附带类型直到遇到正常类型(包含动态类型(0×00))

      4. 函数体

        1. 函数体长度:64位正整数 8字节

        2. 函数体内容:1字节的操作数(WIDE操作符可能多字节(目前未启用))附带相关操作数(数量根据操作符的参数决定)。

仍需对应的函数支持。

More from this blog

模块导入功能设计草稿

模块以Java类似的方式实现导入(全限定名实现),删除原有字节码单独的设计内容。 仍然使用绝对或相对路径的字符串作为导入的第一个参数,第二个参数不可省略,为模块别名。 目前已经实现了模块导入的部分功能,但由于部分设计问题,存在较多错误。 from-import延迟实现。 在HandleImport时创建一个新的类,名称为”~导入路径~.!__start”。其它类处理同样参见这个操作,类名均改为”~导入路径~.类”。但是在处理类的创建时(各种HandleVarDecl及类似函数),应当加入类型处理...

Apr 26, 20251 min read3

Aq语言语法设计文档

概览 为满足AQ语言持续发展,提升AQ语言在软件开发的便捷性和高效性,提升AQ语言长期持续有效发展,推进AQ v0.2.0 版本更快面向市场发布,决定对AQ语言的语法进行规范。 其详细的语法参照市面上常见的编程语言,总结其共有特点,对语言语法进行简化,同时完善部分语言的历史性问题,在语法上进行优化,降低学习难度和成本。 注释 注释参照C/C++等C-style语言的设计,采用两种注释方式。 // 单行注释 /*多 行 注 释*/ 运算符 基本采取和主流语言一致(参照C/C++),部...

Mar 20, 20251 min read6
A

AQ Developer Blog

9 posts

AQ Official Developer Blog. Github: https://github.com/aq-org/AQ Official Website: https://www.axa6.com Email: xie.zicong@axa6.com