2025/01/27 工作日志

本次更新发行了2.4.36.

本次提交规范了项目的文档,整合并优化了项目的代码,同时修复了大量漏洞。

在这段时间的开发和思考当中,我结合了原有的开发经验,纠正了目前的开发路线:

整理项目文档

我将一些工作日志的一些空白的头注释删去了,并且将过时的技术文档明确标记出来。

与此同时,也更新了抽象语法树文件的编码技术文档。

提交了词法编码文件的读取器和写入器

它们位于src/action目录下,分别是TokenFileReader.cppTokenFileWriter.cpp

这两份源码目前仍未经过调试,并且并没有接入到项目主体当中,我会在接下来的更新当中接入它。

修复了一些漏洞

这些漏洞的具体内容是:

纠正了一些不致命的错误,对部分代码做出了调整

这些调整的具体内容是:

让更多错误留在编译期

在以往的Stamon版本当中,若将continuebreak写在循环体外,编译仍然可以通过,只有在虚拟机执行时才会报错。

为此,我在Parser.cpp当中加入了检查continuebreak是否都在循环体中的功能。让更多致命性的错误留在编译期。

重构虚拟机的计算系统

以往的计算系统的实现代码非常冗余、且在计算时会产生大量的中间对象。

为此,我建立了TypeCalculator.cpp,将计算系统迁移到了这里(并与AstRunner.cpp对接),同时优化了代码的效率和可读性,确保每一次运算不会产生任何中间对象,即一步到位,直接产生结果对象。

计算过程中的类型判断和精度转换是个让人头疼的问题,但是我在TypeCalculator.cpp中用一种优雅的方式解决了它。

在重构计算系统之后,我让2.4.31版本与2.4.36版本运行百万次空循环,又递归计算了第二十项斐波那契数列,在计算期间统计了对象的申请次数。实验结果表明:重构后的申请次数普遍低于重构前的申请次数的50%

还有更多地方有待优化

ArrayList.hpp的标准C实现以及AstRunner.cpp容易出现内存泄漏。我打算将前者改进成安全的实现,而并不打算处理后者,因为AstRunner.cpp将会随着重构而被弃用。

接下来要做的事

  1. 优化ArrayList.hpp的标准C实现
  2. 开发Stamon的安装工具
  3. 推进Stamon包管理器的开发
  4. 支持文件处理库