附录
本章包含 Sii 2 的参考信息、常见问题解答、术语表和资源链接。
快速参考
关键字列表
声明关键字:
let- 声明可变变量const- 声明常量func- 定义函数class- 定义类struct- 定义结构体share- 导出函数或类cite- 导入模块
类型关键字:
int- 整数string- 字符串bool- 布尔值singlef- 单精度浮点数multif- 多精度浮点数str- 字符arr- 数组obj- 对象void- 无返回值unknown- 未知类型
控制流关键字:
if- 条件语句else- 否则分支forloop- 循环语句while- while 循环break- 跳出循环continue- 继续下一次循环back- 返回语句
其他关键字:
new- 创建实例typeins- 类型检查crob- 创建对象remake- 重构对象from- 导入来源as- 类型转换或别名true/false- 布尔字面量
运算符优先级
从高到低:
- 括号
() - 一元运算符
-,! - 乘除取余
*,/,% - 加减
+,- - 比较
>,<,>=,<= - 相等
==,!= - 逻辑与
&& - 逻辑或
|| - 赋值
=
标准库函数速查
文件操作:
sii.readText(path: string): stringsii.writeText(path: string, content: string): voidsii.exists(path: string): boolsii.mkdirs(path: string): voidsii.pathJoin(...parts: string[]): stringsii.cwd(): string
JSON 操作:
sii.jsonParse(json: string): objsii.jsonStringify(obj: obj): string
HTTP 操作:
sii.get(path: string, handler: string): void- 注册 GET 路由sii.post(path: string, handler: string): void- 注册 POST 路由sii.put(path: string, handler: string): void- 注册 PUT 路由sii.delete(path: string, handler: string): void- 注册 DELETE 路由sii.listen(port: int): void- 启动 HTTP 服务器sii.respText(status: int, text: string): obj- 返回文本响应sii.respJson(status: int, data: obj): obj- 返回 JSON 响应sii.respHtml(status: int, html: string): obj- 返回 HTML 响应
日志:
sii.log(message: string): voidsii.warn(message: string): voidsii.error(message: string): void
输入输出:
sii.io.print(...args): void- 打印内容sii.io.readLine(): string- 读取一行字符串sii.io.readInt(): int- 读取整数sii.io.readSinglef(): singlef- 读取单精度浮点数sii.io.readMultif(): multif- 读取多精度浮点数
常见问题解答
Q1: Sii 2 和 Sii 1.x 有什么区别?
A: Sii 2 是使用 Rust 重新实现的版本,主要区别包括:
- 性能:Rust 实现带来更高的编译和执行性能
- 原生编译:支持编译为原生可执行文件
- 类型系统:更强的类型检查和类型安全
- 多目标编译:支持更多编译目标(JS/TS/WASM/LLVM IR/原生)
Q2: 如何从 Sii 1.x 迁移到 Sii 2?
A: 迁移步骤:
- 安装 Sii 2 编译器
- 检查语法兼容性:大部分语法兼容,但某些特性可能有变化
- 更新编译命令:使用
siic替代旧的编译器 - 测试验证:充分测试迁移后的代码
Q3: 支持哪些平台?
A: Sii 2 支持以下平台:
- 开发平台:macOS, Linux, Windows
- 编译目标:
- JavaScript/TypeScript(浏览器、Node.js)
- WebAssembly(浏览器、WASM 运行时)
- 原生可执行文件(macOS x64/ARM64, Linux x64/ARM64, Windows x64)
Q4: 如何调试 Sii 2 程序?
A: 调试方法:
- 使用日志:
sii.log(),sii.warn(),sii.error() - 类型检查:使用
typeins()检查变量类型 - 编译为 TypeScript:使用 TypeScript 工具链调试
- 原生调试:使用平台特定的调试工具(gdb, lldb)
Q5: 性能如何优化?
A: 优化建议:
- 使用原生编译:获得最佳性能
- 优化算法:使用高效的算法和数据结构
- 减少 I/O:避免频繁的文件和网络操作
- 代码优化:编译器会自动进行一些优化
Q6: 如何处理错误?
A: 错误处理方式:
- 返回值检查:使用可选返回值
int | void - 类型检查:使用
typeins()检查类型 - 条件判断:使用
if语句检查操作结果 - 错误码系统:运行时服务器提供标准错误码
Q7: 如何创建库?
A: 创建库的步骤:
- 使用 share 导出:使用
share关键字导出函数和类 - 版本管理:遵循语义化版本规范
- 文档编写:提供清晰的文档和示例
- 发布:将库文件放入
lib/目录
Q8: 原生编译需要什么工具?
A: 原生编译需要:
- LLVM 工具链:
llc和clang - 运行时库:预编译的静态运行时库
- 目标工具链:交叉编译工具链(如果跨平台编译)
Q9: 如何配置运行时服务器?
A: 配置方式:
- 环境变量:设置
SII_RUNTIME_PORT等环境变量 - 命令行参数:使用
--port等参数 - 配置文件:使用 JSON 配置文件(如果支持)
Q10: 支持异步编程吗?
A: Sii 2 的异步支持:
- 数据库操作:自动处理异步
- HTTP 操作:自动处理异步
- 文件操作:部分操作是异步的
- 显式异步:某些操作可能需要等待
术语表
AST (Abstract Syntax Tree):抽象语法树,源代码的树形表示
Compiler:编译器,将源代码转换为目标代码的程序
Cross-compilation:交叉编译,在一个平台上编译另一个平台的代码
IR (Intermediate Representation):中间表示,编译器使用的中间代码格式
LLVM:低级虚拟机,用于代码生成和优化的工具链
Native Compilation:原生编译,编译为平台特定的机器码
Runtime:运行时,程序执行时所需的环境和库
SSA (Static Single Assignment):静态单赋值,一种中间表示形式
Type System:类型系统,语言中类型检查和类型安全的机制
WASM (WebAssembly):WebAssembly,一种二进制指令格式
资源链接
官方资源
学习资源
- 教程:官方教程和示例
- API 文档:完整的 API 参考
- 最佳实践:编码规范和最佳实践指南
代码规范
- 遵循项目的代码风格
- 编写测试用例
- 更新相关文档
- 遵循提交信息规范