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

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

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

lizongying/nolang

直接代碼:

hello word

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

定義變量

no 复制代码
// 定義一個名為a,類型為str的變量
a = 'abc'

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

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

字符串連接

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

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

模塊引用

no 复制代码
// 標準庫不用顯式引用
// # std/math

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

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

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

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

包配置

nolang.jsonc

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

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

流程控制

no 复制代码
// 一直循環執行
! {
}

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

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

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


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


i <- (a..b] {   

    // break
    **
}


i <- (a..b] {   

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

區間語法

以vec為例

no 复制代码
[]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

枚舉

nolang 复制代码
// 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
}

接口

nolang 复制代码
// 定義接口
json {
    to-json()
}

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

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

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

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

    // 父實現
    ..to-json()
}
相关推荐
吃饱了得干活4 小时前
实时弹幕应该怎么搞?一篇带你从入门到生产级实战
java·后端
用户0207199207724 小时前
WebSocket 从建立连接到稳定运行
后端
你为她披上外套时我正站在窗外4 小时前
subtitler v2.0 的零拷贝设计:从 2000 次分配到 0 次
后端
用户0207199207724 小时前
Kafka 与事务 Outbox
前端
IT_陈寒4 小时前
Vite的静态资源路径搞得我头秃,原来这样配才对
前端·人工智能·后端
BerryS3N4 小时前
前端应用的离线暂停更新策略:构建稳定可靠的渐进式部署方案
前端
小刘数字化5 小时前
告别PPT:AR数据呈现如何重塑商业汇报体验
后端·restful
程序员爱钓鱼5 小时前
Rust match 模式匹配详解:比 if 更强大的条件分支
后端·rust
Java面试题总结5 小时前
Vue3流式调用大模型接口完整实践
后端·python
宠友信息5 小时前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring