迄今為止,最簡單的編程語言 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()
}
相关推荐
Csvn1 小时前
Docker 容器管理入门 — 从镜像到容器编排
后端
Csvn1 小时前
Fetch 请求竞态终结者:AbortController 不只是用来"取消"的
前端
阡陌Jony1 小时前
关于前端路由中的参数问题的学习(一): params,query, hash(#)
前端
阡陌Jony1 小时前
缓存相关学习笔记(一):Service Worker 缓存
前端
用户762352425911 小时前
ShardingJDBC
后端
行者全栈架构师1 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
假如让我当三天老蒯1 小时前
前端跨域解决方案(学习用)
前端·javascript·面试
阡陌Jony1 小时前
关于前端路由中的参数问题的学习(二)
前端
Colin草率地做慢慢地改1 小时前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构