# Aq 虚拟机及字节码的架构调整

昨天发布了 AQ v0.1.0-alpha ，其中的虚拟机设计延续了以往的架构，未做架构级别的调整。对于目前的需求来说，可以满足一定的要求。但是在近日的开发过程中，发现了可以进行优化的地方。其中重点为内存架构的调整。

现阶段的字节码直接存储所有的内存数据和类型。其中大量的额数据都是需要虚拟机在运行时决定的数据写入，因此大量的数据在未使用时被分配，造成了大量的内存浪费。对于示例 Hello World (hello-world.aq, hello-world.aqbc) 来说，AQ v0.1.0-alpha 源代码仅有50字节左右的占用，但是在字节码的内存占用却有100字节左右的占用。从一定程度上说，字节码原先的作用——节省内存已经未能发挥作用，并且加重了负担。

因此对于AQ虚拟机和字节码的架构调整极其必要。参照现阶段的解释性编程语言。使用常量池是最为常见的思路。

为完成该目标，需要以下的改变：

1. 修改编译器的相关代码。
    
2. 修改虚拟机的相关代码。
    
3. 增加新的指令，实现从常量池读取数据。
    
4. 将原先的类型存储方法进行调整，参照 Python、JavaScript 的字节码常量池设计方法。
    

目前仍有大量的资源浪费，在 AQ v0.1.1-alpha 发布时应解决此问题。

同时，除此处的问题，AQ v0.1.0-alpha 的发布中仍有不少的问题未能解决。其中较为严重的就是：未能实现自定义函数的参数和返回值的处理。

对于该问题，同样应参见Python、JavaScript等解释性编程语言的设计思路。对于函数调用进行优化，避免存在调用过程中的资源浪费。

除此之外，此次版本发布还有一个极其重要的问题未能解决——实现标准库的设计和第三方库的调用。目前仅支持print一个函数，同时第三方库无法调用。因此同样应加快解决。

该版本中，仍存在类型转换的错误，无法自动进行类型转换，应尽快修复。

该版本中，对于新的语法支持仍然欠缺，应尽快添加支持。

该版本中，对于动态类型未能支持，应当在后续的编译器和虚拟机的调整中加入支持。

最后，AQ v0.1.1-alpha 版本的发布也将紧随其后，应当尽快解决相关问题。
