迄今為止,最簡單的編程語言 Nolang

举报
大漠孤煙 发表于 2026/06/19 21:51:12 2026/06/19
【摘要】 迄今為止,最簡單的編程語言 NolangNolang 是一種無 GC、內存安全、語法極簡的系統級編程語言。lizongying/nolang直接代碼: hello wordprint('hello word')不需要寫main函數print自動換行字符串使用單引號,單引號不用按shift 定義變量// 定義一個名為a,類型為str的變量a = 'abc'// 定義一個名為i64,類型為i6...

迄今為止,最簡單的編程語言 Nolang

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

lizongying/nolang

直接代碼:

hello word

print('hello word')
  • 不需要寫main函數
  • print自動換行
  • 字符串使用單引號,單引號不用按shift

定義變量

// 定義一個名為a,類型為str的變量
a = 'abc'

// 定義一個名為i64,類型為i64的變量
i64

a u32
  • 變量名如果和類型名一致,可以使用省略寫法
  • 如果是0值,可以省略賦值

字符串連接

// 定義一個名為a-b-c,類型為str的變量
a-b-c = 'abc'

// 字符串拼接
a-b-c-d = 'abc' - 'c'
  • 變量名使用小寫字母和-,都不用按shift。在很多系統中-連接的被認為是一個單詞,方便使用TAB快速使用
  • 字符串連接使用-,也不用按shift,同時-本身就是連字符,回歸本意

模塊引用

// 標準庫不用顯式引用
// # std/math

// 本地模塊
# /src/utils.greet

// 網絡模塊
# github.com/lizongying/nolang/test2/utils.greet greet2

greet('World')
greet2('World')

// 標準庫的函數可以直接使用
b = sin(1.0)
  • # 既不佔用關鍵字又極為簡便
  • 別名僅跟一個空格即可

包配置

nolang.jsonc

{
  "name": "test1",
  "version": "0.1.0",
  "description": "A new Nolang project",
  "keywords": [
    "nolang"
  ],
  "author": "lizongying",
  "email": "lizongying@msn.com",
  "organization": "lizongying",
  "repository": "https://github.com/lizongying/nolang",
  "homepage": "https://lizongying.github.io/nolang",
  "license": "MIT",
  "workspace": "../../",
  "dependencies": {
    "github.com/lizongying/nolang/test1": "v0.1.0",
    "github.com/lizongying/nolang/test2": "v0.1.0",
  },
  "compiler": {
    "version": "0.1.0",
  },
  "output": "./dist",
  "ignore": [],
}
  • 沒有過多配置,約定大於配置

工作空間

workspace.jsonc

{
    "test1": "./example/test1",
    "test2": "./example/test2",
}
  • 輕鬆實現多包
  • 測試開發本地包非常簡單
  • workspace.jsonc可以上傳git

流程控制


// 一直循環執行
! {
}

// 限定執行次數
10 * {
}

// 遍歷
i <- (a..b] {   
}

// 內部無條件執行
x == 1 {
    b = 2
}


i <- (a..b] {   
    // continue 
    *
}


i <- (a..b] {   

    // break
    **
}


i <- (a..b] {   

    // return
    ...
}
  • for/while等語法統一
  • 不佔用任何關鍵字

區間語法

以vec為例

[]t[..]
[]t[..)
[]t(..]
[]t(..)

[]t[n0..]
[]t[n0..)
[]t(n0..]
[]t(n0..)

[]t[..n1]
[]t[..n1)
[]t(..n1]
[]t(..n1)

[]t[n0..n1]
[]t[n0..n1)
[]t(n0..n1]
[]t(n0..n1)
  • 同時支持arr、vec、str、num,以及for、match中使用
  • 比如i <- [a..b),很清楚就知道包括a,不包括b

枚舉


// red=0, green=1, blue=2
color {
    red,
    green,
    blue,
}

// 在普通方法中,a,b,c 實際是定義的a=0,b=1, c=2... 這是和其他語言不一致的地方。
// 所以正常不能用逗號的方式定義多個變量

// 這是一個特殊枚舉, 可以有類型,有逗號, 有別名
enum-name {
    a t,
    b u,
    c v,
}

// 注意這是一個普通的struct,多個字段沒有逗號
struct-name {
    a t
    b u
    c v
}

接口

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

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

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

// 重寫 + 調用父實現
user.to-json() {
    // 父實現
    ..to-json()
}

user.other() {
    // 當前實現
    .to-json()

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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