# 语言简介 mio 是一种编译型编程语言,是 mio 解释器的进化版。首个编译版本使用 C 语言实现,第二版使用 C++ 语言实现。编译器将 `.mio` 源文件翻译为 LLVM IR,再直接生成原生可执行文件。 ## 设计目标 - **高性能**:基于 LLVM 后端,生成优化的原生机器码 - **C 语言亲和**:语法接近 C,易于 C/C++ 开发者上手 - **系统编程**:支持指针、内存管理、结构体、联合体等底层特性 - **面向对象**:支持类、继承、虚函数、运算符重载 - **泛型编程**:模板系统支持函数和类的泛型化 - **零运行时依赖**:不依赖虚拟机或运行时环境 ## 编译器架构 mio 编译器采用经典的三段式架构: ``` 源代码 (.mio) → Lexer → Parser → AST → CodeGen → 目标文件 (.o) → LLD 链接 → 可执行文件 ``` ### 核心模块 | 模块 | 文件 | 功能 | |------|------|------| | 词法单元 | `token.hpp` | 定义所有 Token 类型和关键字 | | 词法分析器 | `lexer.hpp` | 将源代码转换为 Token 序列 | | 类型系统 | `types.hpp` | Mio 语言的类型表示 | | 抽象语法树 | `ast.hpp` | AST 节点定义和构造 | | 语法分析器 | `parser.hpp` | 递归下降解析,生成 AST | | 代码生成器 | `codegen.hpp` | LLVM IR 生成和链接 | | 编译器入口 | `main.cpp` | 命令行解析和流程编排 | ## 类型系统 ### 基本类型 | 类型 | 说明 | 位宽 | |------|------|------| | `i8` / `i16` / `i32` / `i64` / `i128` | 有符号整数 | 8/16/32/64/128 | | `u8` / `u16` / `u32` / `u64` / `u128` | 无符号整数 | 8/16/32/64/128 | | `isize` / `usize` | 指针宽度整数 | 32/64 位自适应 | | `f32` / `f64` | 浮点数 | 32/64 | | `bool` | 布尔值 | - | | `char` | 字符 | 8 | | `void` | 空类型 | - | ### 复合类型 | 类型 | 说明 | 示例 | |------|------|------| | `T*` | 指针 | `i32*` | | `T[N]` | 定长数组 | `i32[10]` | | `struct` | 结构体 | 值语义 | | `class` | 类 | 引用语义,支持继承 | | `enum` | 枚举 | 底层 i32 | | `union` | 联合体 | 共享内存 | ## 语法特点 ### 控制流 条件语句和循环语句的关键字后必须跟**冒号**: ```mio if: x > 0 { printf("positive\n"); } elif: x < 0 { printf("negative\n"); } else { printf("zero\n"); } while: i < 10 { i = i + 1; } for: i = 0; i < 10; i = i + 1 { printf("%d\n", i); } ``` ### 函数 支持显式返回和隐式返回(最后一行不加分号): ```mio # 显式返回 i32 add(a: i32, b: i32) { return a + b; } # 隐式返回 i32 add(a: i32, b: i32) { a + b } ``` ### 模板 ```mio template T max(a: T, b: T) { if: a > b { return a; } return b; } # 使用 var x = max(10, 20); # 自动推导 var y = max(3.14, 2.71); # 显式指定 ``` ## 标准库 | 模块 | 说明 | |------|------| | `stdio` | C 标准 I/O 函数 | | `string` | 字符串和内存操作 | | `stdlib` | 内存分配、进程控制 | | `math` | 数学函数 | | `std` | 综合标准库(算法、容器、工具)| ## 了解更多 - [使用文档](Usage) — 安装、编译、命令行选项 - [开发文档](Development) — 编译器内部实现、贡献指南