# nrc **Repository Path**: ledao/nrc ## Basic Information - **Project Name**: nrc - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-09 - **Last Updated**: 2026-01-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NRC - 新一代系统编程语言 NRC(Next Robust Compiler)是一门现代化的系统编程语言,旨在在Go的简洁性和Rust的安全性之间找到最佳平衡点。NRC结合了Go的简单语法、Zig的系统编程能力,并通过Rust的安全实现来提供内存安全和类型安全保证。 ## 🚀 快速开始 ### 1. 环境初始化(首次使用) ```bash ./init.sh ``` 这个脚本会: - ✅ 检查Rust环境 - ✅ 检查LLVM 15工具链 - ✅ 检查链接器(GCC) - ✅ 自动安装缺失的依赖 - ✅ 测试编译环境 ### 2. 构建项目 ```bash cargo build --release ``` ### 3. 运行示例 ```bash # 编译NRC源代码 ./target/release/nrc build examples/mathlib.nr # 运行生成的可执行文件 ./main ``` ### 4. 检查语法(不生成可执行文件) ```bash # 检查源代码是否有语法/语义错误 ./target/release/nrc check examples/mathlib.nr # 输出示例(成功): # ✓ examples/mathlib.nr - no errors found # 139 tokens, 10 declarations # 输出示例(失败): # ✗ error.nr - check failed # Syntax error at 1:12: Expected parameter name ``` ### 5. 离线安装(Go 风格 tar.gz 分发) 项目自带一个简易打包脚本,可以生成类似 Go 的离线安装包: ```bash # 在项目根目录执行(需要本机已安装 Rust + LLVM) ./scripts/package_tar.sh # 输出示例: # dist/nrc-0.1.0-linux-amd64.tar.gz ``` 离线安装(系统级,推荐 /usr/local): ```bash sudo tar -C /usr/local -xzf dist/nrc-0.1.0-linux-amd64.tar.gz export PATH="/usr/local/nrc/bin:$PATH" # 验证 nrc version ``` 离线安装(用户级,推荐 $HOME/.local): ```bash mkdir -p "$HOME/.local" tar -C "$HOME/.local" -xzf dist/nrc-0.1.0-linux-amd64.tar.gz export PATH="$HOME/.local/nrc/bin:$PATH" nrc version ``` > 说明: > - 打包产物包含 `nrc/bin/nrc`、`nrc/bin/nrc.sh`、`nrc/lib/`(内置 LLVM 及其依赖:libstdc++/libffi/libxml2/icu 等)、`nrc/examples/` 等。解压到任意前缀后,只需把 `<前缀>/nrc/bin` 加入 `PATH` 即可使用。 > - 推荐使用 `nrc/bin/nrc.sh`(可重命名为 `nrc`),它会自动把打包内的依赖注入 `LD_LIBRARY_PATH`,目标机器无需额外安装 LLVM 或 libstdc++。 > - 外部依赖只剩下系统 glibc/ld.so(版本不要过旧)以及编译 NRC 程序时所需的 C 编译工具链(如 `gcc`/`clang`)。可用 `./init.sh` 在开发环境中检查/安装这些依赖。 ## 📁 项目结构 ``` rust-compiler/ ├── src/ # 源代码 │ ├── lexer/ # 词法分析器 │ ├── parser/ # 语法分析器 │ ├── semantic/ # 语义分析器 │ ├── llvm_backend/ # LLVM后端 │ └── lib.rs # 主库文件 ├── examples/ # 示例文件 │ ├── basic.nr # 基础示例 │ └── test_builtins.nr # 内置函数测试 └── Cargo.toml # 项目配置 ``` ## 🛠️ 系统要求 - **操作系统**: Linux (Ubuntu/Debian推荐) - **Rust**: 1.70+ - **LLVM**: 15.x (自动检测) - **GCC**: 9.0+ (作为链接器) ## 🎯 语言特色 ### 设计理念 - **简洁性**: 借鉴Go的简洁语法,降低学习曲线 - **安全性**: 通过Rust实现提供内存安全和类型安全 - **系统编程**: 支持手动内存管理,适合系统级开发 - **现代化**: 结合现代语言的最佳实践 ### 核心特性 - ✅ **内存管理**: 引用计数 + 手动内存管理,灵活且安全 - ✅ **类型系统**: 强类型系统,编译时类型检查 - ✅ **切片操作**: 完整的动态数组支持,包括`push()`和`pop()` - ✅ **智能指针**: `rc`和`weak`引用计数智能指针 - ✅ **结构体**: Go风格的结构体定义和方法 - ✅ **泛型**: 完整的泛型编程支持 - ✅ **控制流**: 现代控制流结构(if/else, for, defer) ### 高级特性 - ✅ **预分配**: 切片容量预分配 `[]T{cap: N}` - ✅ **元素重复**: 切片元素重复 `[]T{value; count: N}` - ✅ **深度释放**: 自动递归释放复杂数据结构 - ✅ **零成本抽象**: 编译时优化,运行时零开销 ## 🧪 示例 ### 基础语法 ```nr func add(a: int, b: int): int { return a + b } func main() { println("Hello NRC!") println("3 + 2 = ", add(3, 2)) } ``` ### 切片操作 ```nr func slice_demo() { // 创建切片 var numbers: []int = []int{1, 2, 3} // 预分配容量 var prealloc: []int = []int{cap: 10} // 重复元素 var zeros: []int = []int{0; count: 5} // 操作切片 numbers.push(4) var last: int = numbers.pop() println("Last element: ", last) } ``` ### 智能指针 ```nr func rc_demo() { // 引用计数智能指针 var data: Rc<[]int> = Rc<[]int>{1, 2, 3, 4, 5} // 自动内存管理 var copy: Rc<[]int> = data // 引用计数 +1 println("Data length: ", len(*data)) } ``` ## 🔧 开发 ### 运行测试 ```bash cargo test ``` ### 查看文档 ```bash cargo doc --open ``` ### 调试构建 ```bash cargo build ``` ## 🐛 故障排除 ### 常见问题 1. **LLVM未找到** ```bash sudo apt install -y llvm-15-dev llvm-15-tools ``` 2. **链接器错误** ```bash sudo apt install -y gcc ``` 3. **编译错误** ```bash cargo clean cargo build --release ``` ## 📄 许可证 本项目采用 Apache-2.0 许可证。详见 [LICENSE](LICENSE) 文件。 ## 🤝 贡献 欢迎提交Issue和Pull Request!