Z语言
Z语言是一门面向个人的、专注于学习和分享的编程语言。
Z语言的目标是:成为最强的玩具语言!
Z语言编译器的仓库放在https://gitee.com/z-lang/zc中。
为了实现学习与分享的初衷,Z语言的主要特色是“生态融合”, 即通过编译器、解释器和转译器的配合,打通“需要学习”的所有生态。
初步的目标生态有:
为了体现“学习与分享”的主旨,我开启了两本配套开源书:
这两本书中,《从零开始制作AI图形引擎》打算在完成之后出版为纸质书,因此我会尽量加快Z语言的进度。
关于Z语言的详细设计和介绍,可以参看炼成记里的简介:
欢迎大家一起讨论和学习!
Z语言的编译器框架zc(Z Compiler)包括如下几个部分:
下面是Z语言大致的语法:
// 导入标准库,用use关键字。
use io.[print, open, W]
// 常量定义用const关键字。
// 浮点数的字面值需要加上f后缀。
const PI = 3.1415926f
// 函数定义和Go比较像。函数的关键字是`fn`。Z语言里函数默认是纯函数,即不能产生副作用。
fn add(a int, b int) int {
// 代码块的最后一个语句即是返回值
a + b
}
// 加上@mut标注,则函数可以产生副作用
@mut
fn writeFile(name str, s str) bool {
let f = open(name, W)
on(exit) {
f.close()
return false
}
f.write(s)
return true
}
// 加上@var标注,则函数可以不指定参数和返回值类型,这样的函数和JS与Python的函数类似。
@var
fn alert(message) {
message = "Alert!! $message"
print(message)
}
// main函数是特殊的函数,它是程序的入口。不需要指定@mut或@var标注。
fn main {
// 函数调用与C一致。
print("Hello, world!") // 语句结尾不需要';'。
// Z语言支持嵌入字符串。这里PI值被直接嵌入到字符串里了。
print("Here is pi: ${PI}")
// let标量,类似于C的变量,但它的值是不可变的。
let a int = 10 // 可以在变量名称后直接指定类型,如果不指定,编译器会自动推导。
a = 12 // 错误!a是不可变的量。
// mut变量。这个相当于C语言里的普通变量。
mut b = 5 // 支持基本的类型推导。
b = b * 2 // 正确!b是可变量。
b = "Z语言" // 错误!不能改变变量的类型。
// var幻量。这个相当于JavaScript里的var变量,不但值可以变,类型也可以变。
var c = 5
c = "Z语言" // 正确!c是幻量,可以从整数类型变成字符串。
print("a+b is $add(a, b)")
}
注:上面的代码是语法的设计,还没有完全实现。