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

简介: Nolang是一门实验性无GC系统编程语言,采用引用传递与安全作用域模型,实现内存绝对安全;无指针、无所有权、无生命周期管理,语法简洁,性能优先,支持泛型、接口、模式匹配及灵活区间遍历。(239字)

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)
}
目录
相关文章
|
21天前
|
JSON JavaScript 前端开发
在TypeScript和JavaScript如何使用MetaMessage?
MetaMessage 是一种跨语言数据交换协议,支持 TypeScript/JavaScript(通过装饰器自动类型转换)、JSONC 文本与紧凑二进制 wire 格式,兼顾可读性、精度(如 bigint 表示 int64)与性能,旨在替代 JSON、Protobuf 等传统序列化方案。
213 125
|
14天前
|
人工智能 安全 API
MetaMessage,開啟了API革命!
MetaMessage是AI时代新型结构化数据协议,自描述、自约束、自示例,支持JSONC注释语法(如`// mm: type=email; desc=邮箱`),实现跨语言精准交互、零损耗Schema传递与实时API契约验证,彻底告别过时文档与解析歧义。(239字)
58 1
|
5月前
|
存储 编解码 算法
LZY Codec:这是“普惠全球”的编码革命
LZY Codec编码方案实现全球通用效率升级:数学符号、表情符及各类通用符号体积显著优化,为科研、教育、社交、电商等产业降本增效,兼具无损、零算力开销与普惠全球的硬核突破。
119 2
|
2天前
|
Rust Go iOS开发
Nolang VS Rust
Nolang 是一门新兴系统编程语言,其编译器将代码转为 LLVM IR 后交由 Zig CC 优化链接。在 macOS M1 上的 fib(40)×1000 万基准测试中,Nolang 性能接近 C(仅慢约10%),二进制体积仅 49KB(与 C 相当),远小于 Rust(456KB)和 Go(1.5MB),指令数几乎持平,凸显其轻量高效特性。
18 0
|
1月前
|
人工智能 JSON 编解码
golang中MetaMessage(mm)的使用
MetaMessage(mm)是面向AI/人类/机器的下一代结构化数据交换协议,自描述、自约束、自示例,支持无损序列化。Go中仅需4个API即可实现结构体与JSONC双向编解码,完美替代JSON/Protobuf等方案。(239字)
100 3
|
24天前
|
人工智能 JSON JavaScript
MetaMessage已支持TypeScript
MetaMessage是AI时代的新型序列化协议,兼具二进制紧凑性与文本可读性,支持跨语言语义一致。现全面支持TypeScript装饰器,通过`@mm`注解声明类型与描述,兼容JSONC,轻松实现类型安全、AI友好的数据交换。(239字)
171 0
|
1月前
|
编解码 自然语言处理 Java
MetaMessage 的簡單使用
MetaMessage(mm)是一款轻量级CLI工具,支持JSONC与二进制MetaMessage格式的编/解码,以及多语言(Go/Java/TS/Python等)结构体代码自动生成,高效便捷,开箱即用。
71 0
|
5月前
|
存储 人工智能 编解码
LZY Codec 为全人类的 AI 未来铺路
LZY Codec 革新文本编码,通过压缩中文等多字节字符体积,显著降低AI训练数据的存储与传输成本,提升分布式训练效率及推理响应速度。无需解压、兼容性强,助力AI产业降本增效,推动技术普惠,堪称AI大数据时代的基础设施级突破。
190 0
|
5月前
|
存储 编解码 算法
LZY Codec 配得上“对人类的重大贡献”
LZY Codec从编码底层重构文本存储与传输效率,兼顾通用性与场景化优化,实现汉字、符号、Emoji的无损压缩,节省存储带宽30%以上,降低全球数字基建成本,推动知识普惠与数字文明发展,是继UTF-8后又一次划时代的编码革新。
135 0
|
5月前
|
存储 编解码 缓存
LZY Codec 全面碾压UTF-8,计算机发展史的伟大革命
LZY Codec针对中日韩文字实现体积直降1/3,无损且无需解压,相较传统压缩算法更具稳定高效优势。从存储到传输再到终端体验,全面降低数据中心与网络带宽成本,提升性能续航,是编码技术的革命性突破,堪称东亚语言数字化的“新标准”。(238字)
176 0