跳到主要内容

附录

本章包含 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 - 布尔字面量

运算符优先级

从高到低:

  1. 括号 ()
  2. 一元运算符 -, !
  3. 乘除取余 *, /, %
  4. 加减 +, -
  5. 比较 >, <, >=, <=
  6. 相等 ==, !=
  7. 逻辑与 &&
  8. 逻辑或 ||
  9. 赋值 =

标准库函数速查

文件操作:

  • sii.readText(path: string): string
  • sii.writeText(path: string, content: string): void
  • sii.exists(path: string): bool
  • sii.mkdirs(path: string): void
  • sii.pathJoin(...parts: string[]): string
  • sii.cwd(): string

JSON 操作:

  • sii.jsonParse(json: string): obj
  • sii.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): void
  • sii.warn(message: string): void
  • sii.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: 迁移步骤:

  1. 安装 Sii 2 编译器
  2. 检查语法兼容性:大部分语法兼容,但某些特性可能有变化
  3. 更新编译命令:使用 siic 替代旧的编译器
  4. 测试验证:充分测试迁移后的代码

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: 调试方法:

  1. 使用日志sii.log(), sii.warn(), sii.error()
  2. 类型检查:使用 typeins() 检查变量类型
  3. 编译为 TypeScript:使用 TypeScript 工具链调试
  4. 原生调试:使用平台特定的调试工具(gdb, lldb)

Q5: 性能如何优化?

A: 优化建议:

  1. 使用原生编译:获得最佳性能
  2. 优化算法:使用高效的算法和数据结构
  3. 减少 I/O:避免频繁的文件和网络操作
  4. 代码优化:编译器会自动进行一些优化

Q6: 如何处理错误?

A: 错误处理方式:

  1. 返回值检查:使用可选返回值 int | void
  2. 类型检查:使用 typeins() 检查类型
  3. 条件判断:使用 if 语句检查操作结果
  4. 错误码系统:运行时服务器提供标准错误码

Q7: 如何创建库?

A: 创建库的步骤:

  1. 使用 share 导出:使用 share 关键字导出函数和类
  2. 版本管理:遵循语义化版本规范
  3. 文档编写:提供清晰的文档和示例
  4. 发布:将库文件放入 lib/ 目录

Q8: 原生编译需要什么工具?

A: 原生编译需要:

  • LLVM 工具链llcclang
  • 运行时库:预编译的静态运行时库
  • 目标工具链:交叉编译工具链(如果跨平台编译)

Q9: 如何配置运行时服务器?

A: 配置方式:

  1. 环境变量:设置 SII_RUNTIME_PORT 等环境变量
  2. 命令行参数:使用 --port 等参数
  3. 配置文件:使用 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 参考
  • 最佳实践:编码规范和最佳实践指南

代码规范

  • 遵循项目的代码风格
  • 编写测试用例
  • 更新相关文档
  • 遵循提交信息规范