# 2024/06/16 工作日志

本次发行了2.4.4版本。

### 修复了一些漏洞

目前已无已知Bug。

主要修复了编译器和Stamon标准库的bug。

### 成功支持Linux

成功将程序移植到Linux系统（测试环境：Debian），并且发布了发行版。

### 新增了Strip功能

你可以利用Stamon的``strip``选项剥夺字节码（即``.stvc``文件）的调试信息，来减少字节码文件大小，提升编译和运行的速度。代价就是在调试过程中无法知道错误所在位置，**该功能一般用于编译发行版的字节码**。

该功能同样内嵌与``build``选项，在该选项中加入``--strip=true``参数即可指定编译时不写入调试信息。用``--strip=false``则写入调试信息（如果不加入该参数则默认写入调试信息）

### 编译发行版

目前支持编译Windows、Linux系统。

##### 需要准备的环境

在编译前，请确保您有：

* **[必要]** make：用于执行Makefile，**工具参考版本：GNU Make 3.82.90**
* **[必要]** C++编译器：用于编译整个项目，默认为G++编译器，如需更换编译器请更改Makefile中的``COMPILER``宏，**工具参考版本：g++ 13.1.0**
* **[非必要]** strip：用于剥削调试信息，减小可执行文件体积，**工具参考版本：GNU strip (GNU Binutils) 2.39**
* **[非必要]** upx：用于压缩可执行文件体积，**工具参考版本：upx 4.0.2**

如果您未安装strip或upx，执行Makefile可能会报错，属正常现象，发行版仍然会编译成功。**如果您希望发行版尽可能小，我们还是建议您安装strip和upx。**

##### 开始编译

打开终端，切换到源码目录（即与``Makefile``同级的目录），您可以根据系统来使用编译指令：

* ``make release``：编译Windows发行版（旧指令，但仍然兼容）
* ``make release_win``：编译Windows发行版，在``bin``目录下生成``stamon.exe``
* ``make release_linux``：编译Linux发行版，在``bin``目录下生成``stamon``

### 使用发行版

##### 配置运行时环境

Stamon的运行时环境非常简便，您只需要配置至少一个环境变量即可使用：

* **[必要]** ``STAMON``变量：该变量指向可执行文件所在的**目录（而非文件）**
* **[非必要]** ``PATH``变量：在该变量末尾**追加**上可执行文件所在目录

如果不配置PATH变量，则Stamon无法全局使用（即只能在可执行文件所在目录下使用），**因此我们强烈建议您配置PATH变量**

##### 运行指令

Stamon目前支持以下指令：

<br>

* ``stamon version``

该指令用于输出Stamon当前的版本号。

<br>

* ``stamon help``

该指令用于输出Stamon的用法以及各种参数的介绍。

<br>

* ``stamon build [src] [dst] [options...]``

该指令用于编译Stamon代码，其中src为必要参数，表示编译的Stamon文件名，dst为可选参数，表示生成的字节码文件名（默认a.stvc），options为可选参数，他们包括：

```
--import=<boolean>  是否支持引用源码，默认为true）
--strip=<boolean>   是否剥削调试信息，默认为false）
-I<path>            添加引用路径
```

<br>

* ``stamon run [src] [options...]``

该指令用于运行STVC文件，其中src为必要参数，表示编译的Stamon文件名，options为可选参数，他们包括：

```
--GC=<boolean>          是否运行GC（垃圾自动回收），默认为true
--MemLimit=<Integer>    设置虚拟机的对象内存限制（按字节计，默认为16,777,216字节，即16MB）
```

<br>

* ``stamon strip [src]``

该指令用于剥削STVC调试信息，其中src为必要参数，表示待剥削的STVC文件。

***

### 接下来要做的事

1. 编写AST的解释器
2. 编写词法分析的保存功能
3. 编写AST的O1优化器
4. 完善标准库
5. 支持编译为平面字节码