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

昨天发布了 AQ v0.1.0-alpha ,其中的虚拟机设计延续了以往的架构,未做架构级别的调整。对于目前的需求来说,可以满足一定的要求。但是在近日的开发过程中,发现了可以进行优化的地方。其中重点为内存架构的调整。
现阶段的字节码直接存储所有的内存数据和类型。其中大量的额数据都是需要虚拟机在运行时决定的数据写入,因此大量的数据在未使用时被分配,造成了大量的内存浪费。对于示例 Hello World (hello-world.aq, hello-world.aqbc) 来说,AQ v0.1.0-alpha 源代码仅有50字节左右的占用,但是在字节码的内存占用却有100字节左右的占用。从一定程度上说,字节码原先的作用——节省内存已经未能发挥作用,并且加重了负担。
因此对于AQ虚拟机和字节码的架构调整极其必要。参照现阶段的解释性编程语言。使用常量池是最为常见的思路。
为完成该目标,需要以下的改变:
修改编译器的相关代码。
修改虚拟机的相关代码。
增加新的指令,实现从常量池读取数据。
将原先的类型存储方法进行调整,参照 Python、JavaScript 的字节码常量池设计方法。
目前仍有大量的资源浪费,在 AQ v0.1.1-alpha 发布时应解决此问题。
同时,除此处的问题,AQ v0.1.0-alpha 的发布中仍有不少的问题未能解决。其中较为严重的就是:未能实现自定义函数的参数和返回值的处理。
对于该问题,同样应参见Python、JavaScript等解释性编程语言的设计思路。对于函数调用进行优化,避免存在调用过程中的资源浪费。
除此之外,此次版本发布还有一个极其重要的问题未能解决——实现标准库的设计和第三方库的调用。目前仅支持print一个函数,同时第三方库无法调用。因此同样应加快解决。
该版本中,仍存在类型转换的错误,无法自动进行类型转换,应尽快修复。
该版本中,对于新的语法支持仍然欠缺,应尽快添加支持。
该版本中,对于动态类型未能支持,应当在后续的编译器和虚拟机的调整中加入支持。
最后,AQ v0.1.1-alpha 版本的发布也将紧随其后,应当尽快解决相关问题。
Subscribe to my newsletter
Read articles from Xie Zicong directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
