nolang

module
v0.2.30 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2026 License: MIT

README

Nolang

Nolang 是一種無 GC、內存安全、語法極簡的系統編程語言。

核心特性

  • 無 GC:不依賴垃圾回收,自动安全內存管理
  • 內存安全:延遲move,作用域離開自動釋放,杜絕懸垂引用、內存泄漏
  • 語法極簡:減少關鍵字,無冗余語法
  • 類型推斷: 變量無需过度聲明類型
  • 統一引用傳遞:所有參數預設為引用
  • 模块系统 - 每个文件即一个独立模块
  • 提前批量堆分配
  • 作用域離開批free
函數作用域變量覆蓋

在函數作用域內,如果重複使用相同的變量名進行賦值,Nolang 將其視為覆蓋重賦值,而非創建新的棧變量。不触发变量遮蔽 如果类型不同,语法不允许

統一引用傳遞模型

Nolang 採用統一引用傳遞模型,所有函數參數預設均為引用型別。這意味著:

  • 函數內修改 = 外部變量直接改變
  • 函數內對參數的任何修改,都會直接作用於調用方的原始數據
  • 可修改,但不可销毁
內存安全機制
  • 延遲move
  • 變數自動銷毀 函數結束自動銷毀所有內部變數
  • 禁止手動釋放 避免誤刪導致的懸垂引用
  • 值複製容器 數組 / 切片存副本,與原變數分離, 原變量生命周期結束並銷毀時,容器內的數據不受任何影響
  • 無 GC、無分配隱藏成本

docs

Usage

vscode 插件

vscode

安裝nolang cli

nolang

CLI 命令
命令 說明
no init 定義工作區(生成 workspace.jsonc,不含 package.jsonc)
no new <name> 在工作區內新建包(子目錄 + package.jsonc,並註冊到 workspace.jsonc)
no fmt [-w] [-d] <file|dir> 格式化源代碼
no build [-o <file>] [-cc <s>] [-target <s>] [<file|dir>] 構建(輸出 executable)
no run [-cc <s>] [-target <s>] [<package|dir|file>] 構建並執行(包名/目錄/文件)
no test [-cc <s>] [-target <s>] [<file|dir>] 執行測試
no add <pkg> 添加依賴
no remove <pkg> 移除依賴
no update <pkg> 更新依賴
no update-all 更新所有依賴
no list 列出依賴
no sync 同步依賴
no install [-u] [<pkg>@<version>] 安裝 binary(~/no/bin/ + 軟鏈接)
no uninstall <name> 移除 binary 及軟鏈接
no pub --token <token> [--registry <url>] 發布至 registry
# 構建(默認 main.no 開始)
no build                    # 構建當前目錄
no build main.no            # 構建指定文件
no build -o output          # 指定輸出路徑
no build -cc zig            # 使用 Zig 編譯器
no build -target x86_64-linux-gnu  # 交叉編譯(指定目標平台)

# 運行(構建 + 執行)
no run                    # 構建並執行當前目錄的 main.no
no run foo                # 運行工作區中名為 foo 的包
no run ./foo              # 運行 ./foo 目錄的 main.no
no run -cc zig
no run -target aarch64-macos-gnu

# 測試(構建 + 執行)
no test                   # 測試`test`目錄下所有 .no 文件
no test test/my-test.no        # 執行單個測試文件
no test -cc zig
no test -target x86_64-windows-gnu
創建新項目
no new test1

cd test1

no run
入口規則
  • main.no — 程序入口
  • lib.no — 庫入口,導出函數
  • tests/ 目錄下所有 .no 文件 — 包含測試斷言
測試說明
  • 测试文件统一放在 tests/ 目录下
  • 每个测试文件独立构建
  • 若任一测试失败,返回非零退出码

從源碼構建

構建 Nolang 應使用 make

make            # 構建所有目標(bin/no 和 vscode-nolang/server/lsp)
make no         # 構建 bin/no
make lsp        # 構建 LSP server
make package    # 構建 LSP 並打包 VSCode 擴展
make no-wasm    # 跨譯 no 為 WebAssembly
make lsp-wasm   # 跨譯 LSP 為 WebAssembly
make playground # 構建 no.wasm + lsp.wasm + Docusaurus 站點
make clean      # 清理構建產物
make help       # 查看所有構建目標
修改代碼

修改代碼前,請先閱讀 .agents/skills/nolang-syntax/SKILL.md 了解 Nolang 語法規範。

⚠️ 嚴禁使用 git checkoutgit reset,任何時候都不得使用,以防止覆蓋他人正在修改的代碼。

修改後需執行以下檢查:

./vscode-nolang/server/lsp vet src/std   # LSP vet 檢查標準庫
./bin/no vet src/std                     # Nolang vet 檢查標準庫

相關項目


TODO

Directories

Path Synopsis
bench
fib command
tests
compare command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL