
版本更新
新增功能
数字字面量与数值体系增强
- 新增 16 进制数字字面量完整支持: 支持
0x / 0X 前缀、下划线分隔、类型后缀校验以及错误提示,覆盖从词法扫描、语法、语义到 IR/VM 生成的全链路。
- 引入 NumberLiteralHelper / NumericConstantUtils 等工具类: 统一处理数字字面量归一化(去下划线、拆后缀、判断进制、浮点格式),提供基于进制的 int/long 解析能力,并支持编译期整型常量求值。
- 增强 编译期常量折叠: 支持一元负号、加减乘除取余、移位等整数运算的编译期计算,对数组字面量进行递归折叠;整合到 IR 构建流程中。
- 优化 数字类型推断与后缀规则: 去除不再支持的 b/s/d 后缀,仅保留 l/L、f/F 等合法后缀;十六进制默认推断为 int/long;通过统一的后缀提取与浮点识别逻辑提升准确性。
- 增强 std_parse 数值解析能力: 新增 / 简化 parseByte / parseShort / parseInt / parseLong / parseFloat / parseDouble 等函数实现,统一前导空白、正负号处理逻辑,并在示例中强化边界与异常场景展示。
数组系统与集合能力升级
- 新增底层 数组系统调用族: 扩展 ARR_LEN / ARR_GET / ARR_SET,新增 ARR_PUSH / ARR_POP / ARR_INSERT / ARR_REMOVE / ARR_RESIZE / ARR_CLEAR 等系统调用及对应处理器,实现列表追加、弹出、插入、删除、调整长度和清空等操作。
- 新增 array / os_array / syscall_array 稳定层模块: 统一封装数组长度获取、元素读写、追加与弹出等操作,提供过程式接口,支持 数组 / List / 字符串 多种容器类型。
- 新增通用动态数组结构 std_array 与迭代器 std_array_iterator: 提供 append/push/pop/insert/removeAt/resize/clear/clone/copy/equals/reverse/iterator/toString 等完整方法集,并给出丰富的示例模块 std_array_example 展示从基础遍历到克隆、清空、多层封装的使用方式。
- 同步扩展 数组指令与 VM 支持: 在指令集与 VM 层加入数组操作指令与操作码范围,更新 CallGenerator/VM 处理逻辑,让高级数组 API 委托到底层系统调用与指令集。
字符串与字节数组扩展
- 新增字符串封装结构体 std_string: 封装 string 类型,提供:构造、长度计算、子串截取、查找、包含、大小写转换、前后缀判断、去空白、toString 等常用方法。
- 增加 字符串与字节数组互转能力: 在 std_string 中新增 toBytes / fromBytes,并在示例中统一改用 toBytes 替代所有手动字节数组构造逻辑。
- 优化字符相关函数实现: chr 函数改为使用 RANDOM_BYTES + ARR_SET 组合,以单字节数组实现字符构造,摒弃原先基于管道与文件描述符的复杂逻辑,提高性能与可维护性。
数值包装类型与示例完善
- 新增 std_int / std_short / std_long / std_float / std_double / std_byte 包装结构体: 提供:构造、拆箱(intValue/shortValue/longValue/...)、abs、equals、toString、valueOf、valueOfString 以及 MIN_VALUE / MAX_VALUE 常量。
- 扩展通用数学与解析工具 std_math / std_parse: 新增 compareInt/compareShort/compareLong/compareFloat 及对应 max*/min* 系列函数;所有示例统一使用新的 API 与类型。
- 新增 / 完善大量 Demo: 对 std_int / std_byte / std_short / std_float / std_double / std_string / std_array / std_parse 等模块补充演示模块,展示从构造、装箱、解析到常量与数学工具的完整使用流程。
语言与编译器前端能力增强
- 支持 布尔逻辑短路(&& / ||): 在语义分析与 IR 构建阶段实现短路逻辑,采用条件跳转避免冗余计算,保证表达式语义与性能。
- 增强 二元运算与字符串拼接类型推断: 针对 + 运算,当任一操作数为字符串时将整个表达式标记为字符串类型;数值运算结果类型与 IR 操作码类型保持一致。
- 引入 结构体字段类型注册与查询: 通过全局结构体字段类型表记录字段类型信息,支持继承链字段类型合并,配合 _index* / _setindex* 生成类型精确的访问与赋值指令。
- 支持 函数参数类型注册与查询: GlobalFunctionTable 引入参数类型列表,VM 生成器可基于签名自动设置槽位类型前缀,为返回指令与调用参数自动转换提供基础。
- 增强 函数调用与字段赋值类型推导: 根据参数/字段目标类型自动选择合适加载与转换指令,统一类型前缀标准化,将 byte/short 参与运算时视为 int,保证类型检查与指令生成一致。
- 新增 new 表达式支持: 为结构体/类实例化生成匹配的 IR:自动分配寄存器、初始化字段、根据字段类型选择 _setindex* 函数、自动调用构造函数等。
性能和稳定性改进
数值类型系统与常量处理优化
- 引入 NumericConstantUtils: 支持整型常量静态求值、窄化赋值判定(如 byte/short ← int 常量),在赋值、数组元素写入、函数调用、return 等场景允许安全窄化,避免误报类型错误。
- 重构 数字字面量语义分析器: 统一使用 NumberLiteralHelper 进行规整与解析,大幅减少手写字符串判断,增强类型推断和越界检查准确性,并针对浮点下溢等情况提供更直观错误信息。
- 优化 一元运算与 VM 指令选择: 针对 byte/short 的一元 NEG 运算选择窄类型指令,避免不必要的 int 提升和后续存储崩溃。
- 增强 返回指令生成与自动转换: 根据函数声明返回类型自动识别并插入数值类型转换,区分主函数与普通函数行为,提升运行时类型安全。
标准库加载与路径搜索修复
- 修复 发行版无法使用标准库 的问题: 修正 SDK 搜索路径与标准库目录查找逻辑,确保二进制发行包可正确定位并加载标准库。
- 修复 Linux 系统下无限向上递归查找 lib 目录 的 bug: 限制向上查找层级(最多 8 层),并跳过系统级 /lib 目录,避免跑到根目录导致搜索异常。
字符串与通用算法优化
- 优化 trim 函数逻辑: 简化末尾非空白查找循环与全空白字符串处理分支,在保持行为不变的前提下提升可读性和性能。
- 统一迭代器与数组遍历实现: 在数组和 std_array 示例中采用更清晰的迭代器模式与布尔变量,移除多余标志变量逻辑,减少无意义语句。
开发者体验提升
构建与发布链路重构(Maven / 版本管理)
-
统一 groupId: 将所有模块(snow-backend、snow-common、snow-ir、snow-lexer、snow-parser、snow-semantic、snow-vm 等)的 groupId 从 org.jcnc.snow 统一为 com.snow-lang。
-
统一 artifactId 与模块命名: 将 frontend-* 模块重命名为 snow-* 系列,并同步更新所有依赖声明,实现模块命名与实际职责对齐。
-
完整重构 多模块 Maven 配置:
- 为所有模块补充项目 URL、许可证、开发者和 SCM 信息。
- 统一 Java 编译配置、编码和描述信息。
- 调整依赖关系与 artifactId 顺序,清理无用插件和注释。
-
引入 中央仓库发布配置:
- 增加 release profile,集成源码包、Javadoc 包与 GPG 签名插件。
- 集成 central-publishing-maven-plugin,并配置 Sonatype/Maven Central 发布地址。
-
优化 版本号管理:
- 新增 .mvn/maven.config 中的 snow.version 变量,统一管理所有模块版本。
- 分批完成从固定版本 → 变量引用 → 回退/升级(0.12.0 → 0.13.0 → 0.13.1 等)的调整。
- 支持从 pom.xml 或 .mvn/maven.config 读取版本号,供生成 .env 与构建脚本使用。
脚本与工具链(PowerShell / Shell / 运行配置)
-
重构 Windows 发布与安装脚本:
- 新增 install-modules.ps1 / release-windows.ps1 / ensure-pwsh7.ps1 等脚本,确保在 PowerShell 7 环境下运行。
- 抽取 detect-jdk.ps1 / detect-maven.ps1 独立脚本实现 JDK 与 Maven 检测复用。
- 提升日志输出格式,统一使用彩色输出与结构化 summary。
-
新增 / 优化 批量安装与发布流程:
- 针对模块安装提供清晰的参数(是否 clean、是否跳过测试),按依赖顺序构建,统计失败模块并输出总结。
- 在安装/发布脚本中自动生成 .env 与 VERSION 文件,复制构建产物并打包归档。
-
运行配置整理:
- 新增多个 .run 配置(Maven / PowerShell / Shell),统一脚本路径从 build 迁移到 builds 目录。
- 重命名并重构原有 frontend 相关运行配置为 snow-* 系列,保持名称与模块匹配。
-
其他辅助脚本:
- 提供导出 PR 日志脚本,统一目标分支变量与参数校验。
- 添加 Docker Registry 网络性能测试、Demo 清理脚本等辅助工具。
构建稳定性与错误容忍度
- 在多个插件配置中添加 failOnError=false: 包括文档生成、Javadoc 插件等,避免因文档警告或小错误导致整个构建失败,提高构建容错能力。
- 忽略 .env 文件: 在 .gitignore 中添加 /.env,避免敏感环境变量意外提交,同时保护本地配置不被覆盖。
Bug 修复
-
修正 整型字面量最小值与最大值声明:
- 将 int 的 MIN_VALUE 从 -2147483647 修正为 0x80000000,MAX_VALUE 为 0x7FFFFFFF。
- 统一 byte/short/long 类型最值与示例中声明的写法,避免后缀和范围不一致。
-
统一 基本类型字面量语法: 移除 byte/short 上不支持的 b/s 后缀,统一 long 后缀为大写 L,修正文档和示例中的不正确写法。
-
修复多处 函数名大小写与调用不一致 问题: 包括 parselong → parseLong、parsefloat → parseFloat、comparefloat → compareFloat 等,确保示例与实现完全对齐。
-
修复 发行版标准库无法使用、数组长度系统调用参数错误、获取内部数组长度使用错误编号 等问题,确保系统调用与文档一致。
-
修正 fork/进程相关测试: 在特定 Demo 中注释掉 fork 子进程代码与 os_process 测试逻辑,防止批量测试时关闭测试进程或阻塞。
-
修复 数组 pop 实现与空数组行为: 改为返回空字符串而非 null,并通过新数组复制保证长度正确缩减。
文档与代码风格改进
文档体系完善
-
新增/扩展多篇技术文档:
- 数字字面量助手、十六进制字面量处理全流程。
- 中间表示生成、数值常量窄化赋值。
- 二元运算类型推断、前端模块版本同步机制。
- 数组操作指令及数组体系架构文档。
- 编译任务库目录搜索、标准库路径解析与 Cloud/本地模式说明。
-
完善 系统调用与接口文档:
- 为 SyscallHandler 接口补充完整 JavaDoc。
- 完善数组、时间、环境变量等系统调用的语义与参数说明。
代码风格与排版统一
- 统一 负号与数字之间的空格格式: 全面规范 hex、byte、short、int、long 等示例中的负号写法,修正 fork 返回 pid 比较与 os_sync 演示代码中的负数参数格式。
- 统一 缩进与空行风格: 将缩进统一为 4 个空格,清理多余空行、补齐缺失空行;统一导入语句缩进、结构体与函数定义的层级,并修正多处代码块内缩进混乱问题。
- 规范 变量声明与注释格式: 统一变量声明中的空格风格、字符串拼接空格、日志与打印语句的间距;调整模块结尾空白行、修复文件末尾换行、整理多余注释。
- 优化 模板与示例文档: 修复拉取请求模板中的复选框格式、整理模块摘要描述,更新 GraalVM/JDK 版本说明等,使整体文档与代码风格更加一致。
如遇到使用问题,欢迎及时 提交 Issue
源码地址:点击下载
以上就是Snow 编程语言 v0.13.0 发布: 数值体系、数组系统与标准库全面升级版发布的详细内容,更多请关注php中文网其它相关文章!