迄今為止,最簡單的編程語言 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()
}
相关推荐
Autumn_ing3 小时前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md
凤山老林4 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
keyipatience4 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
朱涛的自习室5 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
java1234_小锋7 小时前
【技术专题】HTML5 网页技术 - HTML5简介 & HTML5 文档结构
前端·html·html5
woniu_maggie7 小时前
SAP MDG主数据治理实战:从架构原理到项目实施全解析
后端
xiaoqiMikko7 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
鶴哥只手遮天7 小时前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 1 章 项目全景:monorepo 架构与工程化体系
前端·vue.js·开源
流星。。方7 小时前
小团队官网SEO落地:前端语义化与静态生成的工程实践
前端·状态模式