一、立项背景和目标
该仓库是自研的 AsulLang 轻量化脚本解释器项目。当下很多嵌入式脚本引擎体积庞大、跨平台兼容性较差,C++ 程序接入脚本引擎流程繁琐,多数轻量解释器缺少异步、装饰器、元编程等现代语法。
项目目标为搭建一款基于 C++、易于嵌入宿主程序的跨平台脚本引擎;完善新式编程语言语法用来做语言特性试验;搭建命令行工具、VS‑Code 插件、内置标准库,降低开发者二次开发难度,方便 C++ 项目搭载动态可修改的脚本业务逻辑。
二、软件功能、核心功能模块
项目主体采用 C++ 编写解释器内核,附带 VSCode 语法插件、编译测试脚本,主要分为五大模块。
解释器内核模块:包含词法分析、语法解析、抽象语法树生成、运行时环境、异步事件循环,负责解析源码、管理变量作用域、调度异步任务,同时内置语言服务支撑代码提示。
脚本语言核心能力:支持面向对象多继承、闭包、装饰器、解构赋值、模式匹配、异步语法、模块导入、元编程等功能;自带文件读写、网络请求、正则、动态库调用、单元测试等标准库。
命令行工具模块:提供 REPL 交互式终端、脚本文件运行、版本查看、批量测试功能,可以直接调试和执行 alang 格式源码。
编辑器配套工具:VSCode 扩展实现语法高亮、代码折叠、符号识别,方便日常脚本编写。
C++ 宿主接入模块:对外开放原生绑定接口,开发者能够注册 C++ 函数与类,实现 C++ 主程序和脚本之间互相调用,还支持 FFI 调用系统动态链接库。
三、业务流程、功能路径
首先进行项目编译部署,拉取源码后借助 CMake 完成跨平台配置,编译生成可执行程序,安装对应依赖环境。
日常开发存在三条使用路径。第一种为交互式调试,启动程序进入 REPL 环境,逐行输入代码即时运行调试;第二种直接加载.alang脚本文件执行业务代码;第三种嵌入进 C++ 工程,初始化引擎、注册底层原生接口后运行脚本,手动驱动事件循环处理异步任务。
完整开发流程:安装 VSCode 插件编写脚本,导入内置标准库实现文件、网络等功能;编写单元测试,运行批量测试脚本校验代码;高级场景依靠 FFI 调用本地动态库,利用元编程接口动态生成、执行代码。
该引擎适合桌面程序、嵌入式项目扩展动态逻辑,也可供爱好者开展编程语言相关实验。
一、整体架构、设计思路以及各模块技术栈
项目采用分层模块化架构,自上而下分为编辑器工具层、CLI 命令行交互层、标准库拓展层、解释器内核层、C++ 宿主嵌入层。整体遵循内核和上层业务解耦的设计思路,语法解析、运行时环境、系统标准库相互独立,便于迭代新语法、完成多‑操作系统适配。
技术栈划分:解释器内核基于 C++17 手写,包含递归‑下降解析器、AST 抽象语法树、作用域管理、垃圾回收、异步事件循环;项目编译采用 CMake 实现跨平台构建;自动化测试脚本使用 Shell;网络套接字、文件 IO、FFI 动态库调用封装各平台原生系统接口;脚本包管理器依托本地文件系统实现依赖检索;VSCode 语法插件借助 xiaomimimo 大模型辅助完成全部开发工作。
二、本人负责模块以及量化开发成果
VSCode 编辑器插件全程交由 AI 开发,引擎内核、标准库、包管理器、FFI 接口、测试脚本、编译配置等通过现有材料 + AI辅助完成:
完成词法分析、语法解析整套内核,落地 30 余项高级语法,支持多继承面向对象、装饰器、解构赋值、元编程等特性;
独立封装跨平台 TCP‑Socket 网络标准库,适配 Windows、Linux、macOS 三套套接字 API,编写 60 余项超时、断连、消息收发测试用例;
自主搭建脚本包管理机制,处理 import 模块导入、多目录路径优先级检索,引擎可稳定加载 30 余个第三方脚本依赖;
开发跨平台 FFI 动态链接库调用模块,搭建脚本与原生代码之间的数据类型转换规则;
手写 45 个内置标准库函数,编写 90 余个功能和异常测试用例,维护 CMake 编译脚本、整套自动化测试流程,累计修复 8 处语法歧义、内存访问类 Bug;
VSCode‑alang 语法高亮插件,全程借助 xiaomimimo 提供代码生成、配置编写,我只负责需求确认与功能验收。
三、开发过程遇到的难点、坑点以及对应解决方案
1. 跨平台 Socket 接口差异难以封装统一
Windows 需要手动初始化 Winsock,套接字关闭方式、错误码、阻塞模式和 Unix‑like 系统差别很大,经常出现启动崩溃、连接无故断开、缓冲区丢包。
通过系统宏隔离底层原生接口,封装套接字抽象层,统一读写、超时、关闭接口;程序启动自动识别系统,Windows 自动初始化网络组件,接口结束强制回收句柄,增加连接断开异常捕获逻辑。
2. 包管理器路径兼容、循环导入引发栈溢出
不同系统路径分隔符不一致;内置库、本地脚本、第三方依赖的加载顺序混乱;脚本循环 import 触发无限递归。
编写路径兼容函数自动适配正反斜杠;明确模块搜索优先级;设置已加载模块缓存标记,拦截循环导入并且抛出异常提示。
等等