Nolang 是一門無GC的系統編程語言

举报
大漠孤煙 发表于 2026/06/05 16:52:01 2026/06/05
【摘要】 Nolang 是一門無GC的系統編程語言Nolang 是一門實驗性的系統編程語言,採用引用傳遞模型、安全作用域模型,實現了內存絕對安全。無GC。lizongying/nolang 核心特性開發者友好:沒有指針、沒有所有權、沒有生命週期…引用傳遞:所有函數參數均為引用,函數通過修改參數來返回結果內存自動管理:通過安全作用域模型,離開作用域自動釋放,不會出現懸垂指針、內存洩漏問題無 GC:沒有...

Nolang 是一門無GC的系統編程語言

Nolang 是一門實驗性的系統編程語言,採用引用傳遞模型、安全作用域模型,實現了內存絕對安全。無GC。

lizongying/nolang

核心特性

  • 開發者友好:沒有指針、沒有所有權、沒有生命週期…
  • 引用傳遞:所有函數參數均為引用,函數通過修改參數來返回結果
  • 內存自動管理:通過安全作用域模型,離開作用域自動釋放,不會出現懸垂指針、內存洩漏問題
  • 無 GC:沒有內存洩漏問題,故不需要GC
  • 性能優先:
    小字符串無堆內存分配;變量可一次分配、一次釋放
  • 方法重載:通過單態化,實現高效性能
  • 接口:支持接口功能聲明、提供默認功能實現、可繼承多接口
  • 泛形:支持類型、數值泛形
  • 匹配:獨特match設計,使用更加簡單

快速開始

// 你好,世界!
// 不需要main入口
println('Hello, Nolang!')

// 變量聲明
i64

// 函數定義(普通方法通過參數返回結果)
add(a i64, b i64, result i64) {
    result = a + b
}

// 標準庫方法,可以和普通函數類似,有返回值 
c = max(a, b)


// 結構體
user {
    name str
    age i64
}

u = user { 
    name: 'Alice', 
    age: 30}

// 方法
user.greet() {
    println('Hello, ' + self.name)
}

u.greet()


// 枚舉
color {
    red,
    green,
    blue,
}
// 枚舉
enum-name {
    a t,
    b u,
    c v,
}


// 定義接口
json {
    to-json()
}

// 接口實現
user json {
    name str
    age i64
}

// 接口默認實現
json.to-json() {
    return '{...}'
}

区间语法

// 未來會支持map, arr, vec 
for i in [a..b] {     // 闭区间:a ≤ i ≤ b
    // a, a + 1, ..., b
}

for i in (a..b] {     // 左开右闭:a < i ≤ b
    // a+1, a+2, ..., b
}

for i in [a..b) {     // 左闭右开:a ≤ i < b
    // a, a + 1, ..., b - 1
}

for i in (a..b) {     // 开区间:a < i < b
    // a + 1, a + 2, ..., b - 1
}

for i in [5..0] {   // 递减
}

for i in [5..5] {   // 只執行5
}

for i in (5..5) {   // 無
}

for i in 'abc' {   // 遍历字符串中的每个字符
}

nums[..]    // [0, 1, 2, 3, 4]
nums[1..]   // [1, 2, 3, 4]
nums[..3]   // [0, 1, 2]
nums[1..3]  // [1, 2, 3]
nums[1..3)  // [1, 2]

match


// match 语句:分支体是代码块
x {
    1|
        a = 1
        b = 2
        // 多行,不返回值
    2|
        do-something()
    |
        c = 0
}

// match 表達式
result = x {
    1| 1       // 單一值
    2| 2 + 1     //簡單表達式
    | a + b
}

// 特殊match,沒有需要返回的值
{
    a == 1|
        a = 1
        b = 2

        // 多行 不返回值
    a == 2|
        do-something()
    |
        c = 0
}

// 判讀返回值可能有錯的情況
// it用於取參數
x {
    err| log(it)
    nil| log('nil')
    |
        do-right-thing(it)
}

可空類型

nullableString ?str

// 修改
nullableString = 'test'

// 設置錯誤
nullableString = err('some error')

// 可通過match判斷
x {
    err| log(it)
    nil| 
    |
        do-right-thing(it)
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。