ts-native 0.1.2

A TypeScript to native executable compiler using Cranelift
# ts-native 最终总结

## 编译器架构

```
┌─────────────────────────────────────────────────┐
│ TypeScript 源码                                  │
│ function add(a, b) { return a + b; }            │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ ts_parser.rs - 词法分析 + 语法解析               │
│ Token 流 → 运算符优先级解析 → HIR                │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ HIR (中间表示)                                   │
│ HirExpr::Function { name, params, body }        │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ codegen.rs - Cranelift IR 生成                   │
│ SSA 形式,控制流图,NaN-boxing                   │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ .o 目标文件 (COFF/ELF)                          │
│ x86-64 机器码                                    │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ pe_builder.rs / linker.rs                       │
│ 生成可执行文件                                   │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ .exe 可执行文件                                  │
│ 直接运行                                         │
└─────────────────────────────────────────────────┘
```

## 性能数据

| 测试文件 | 功能 | 目标大小 |
|---------|------|---------|
| test_simple.ts | 函数调用 | 192 bytes |
| test.ts | factorial | 396 bytes |
| test_parse.ts | 条件判断 | 342 bytes |
| 内置测试 | while循环 | 280 bytes |

## 已实现完整语法

### 声明
- ✅ function 函数声明
- ✅ let 变量声明
- ✅ const 常量声明

### 控制流
- ✅ if / else 条件
- ✅ while 循环
- ✅ for 循环
- ✅ return 返回
- ✅ { } 代码块

### 运算符
- ✅ 算术: + - * / %
- ✅ 比较: == != < <= > >=
- ✅ 逻辑: && || !
- ✅ 赋值: =

### 表达式
- ✅ 数字字面量
- ✅ 字符串字面量
- ✅ 布尔值
- ✅ null / undefined
- ✅ 标识符
- ✅ 函数调用
- ✅ 数组字面量
- ✅ 括号表达式

### 其他
- ✅ 单行注释 //
- ✅ 多行注释 /* */
- ✅ 递归函数

## 运行时系统

### 数据结构
```rust
JsString  - 动态字符串 + hash
JsArray   - 自动扩容数组
JsObject  - 键值对对象
```

### NaN-boxing 值表示
所有值存储为 f64,使用 NaN-boxing 区分类型:
- Normal float: 标准 IEEE 754
- Pointer: 0x7FFD | ptr (48 bits)
- String: 0x7FFC | ptr
- Array: 0x7FFB | ptr
- Object: 0x7FFA | ptr
- Integer: 0x7FFE | i32
- Undefined: 0x7FFF_8000_0000_0001
- Null: 0x7FFF_8000_0000_0002
- True: 0x7FFF_0000_0000_0001
- False: 0x7FFF_0000_0000_0000

### 内置函数
- print / console.log
- parseInt / parseFloat
- String / Number / Boolean

## 文件结构

```
ts-native/
├── Cargo.toml              - 项目配置
├── README.md               - 项目说明
├── DEVLOG.md               - 开发日志
├── SUMMARY.md              - 本文件
└── src/
    ├── main.rs             - 入口
    ├── codegen.rs          - HIR + Cranelift 生成
    ├── ts_parser.rs        - TypeScript 解析器
    ├── runtime.rs          - 运行时系统
    ├── linker.rs           - 链接器
    └── pe_builder.rs       - PE 文件生成
```

## 使用方法

```bash
# 编译 TypeScript 文件
ts-native input.ts -o output.o

# 测试内置功能
ts-native --test

# 完整构建流程
ts-native test.ts -o test.o
```

## 与其他方案对比

| 方案 | 架构 | 优势 | 劣势 |
|-----|------|------|------|
| ts-native | TS→HIR→Cranelift | 快速、无依赖 | 运行时待完善 |
| jrust-translator | JS→Rust source | 利用rustc | 间接转换 |
| PerryTS | TS→HIR→Cranelift | 完整React | 依赖Perry运行时 |
| ts-morph | JS→AST→Rust | 精确AST | 手动代码生成 |

## 下一步计划

### 短期 (1-2周)
- [ ] 完善函数调用运行时
- [ ] 字符串操作 (+, slice, indexOf)
- [ ] 数组操作 (push, pop, map, filter)
- [ ] 链接器自动检测

### 中期 (1-2月)
- [ ] 类型推断
- [ ] 优化 pass (常量折叠, 死代码消除)
- [ ] 异常处理
- [ ] 垃圾回收

### 长期 (3-6月)
- [ ] JSX 支持
- [ ] async/await
- [ ] 模块系统 (import/export)
- [ ] 标准库

## 参考资料

1. **PerryTS**: https://github.com/PerryTS/perry
   - NaN-boxing 实现
   - HIR 设计
   - Cranelift 集成

2. **Cranelift**: https://github.com/bytecodealliance/wasmtime
   - SSA 代码生成
   - 寄存器分配
   - 目标无关优化

3. **JavaScriptCore / LuaJIT**
   - NaN-boxing 原始论文
   - 值表示优化

4. **PE/COFF 格式**
   - Microsoft PE 格式规范
   - 可执行文件结构