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)
}