新语言 
语言设计目的 
如果现在需要发明一种新语言,我们还需要哪些特性?
设计一种安全、简洁、含糖量高的静态语言,保持极端的优雅和原生性能。使我们能像编写脚本语言一样编写出安全的、高效且优雅简洁的静态类型代码。可使用 LLVM 作为编译器后端,提供 C 库、Rust 等库的兼容性支持。
- 易于学习和使用的静态语言,同时保持高度的灵活性
- 接近 Rust 的简洁性,同时保持和 C/C++ 的互操作性
- 支持像 TypeScript 一样先进的鸭子类型系统
- 拥抱函数式编程,支持高阶函数和闭包
- 支持类型推导、可空类型、宏指令
- 不使用指针,使用更安全的抽象(引用和委托)
顶层语法 
- 表达式即一切,一切合法的语句都是表达式
- 注释使用 /* ... */和// ...等 C 风格注释
- 变量直接赋值即声明,无需使用关键词
- 每行语句换行结尾,不需要分号
- AST - Lisp 可解析的格式
- 可进行 JSON / YAML 转译
 
- 动态性 - 静态条件的 eval,确定返回值类型
- 支持鸭子类型的面向对象,接口可使用类似 TypeScript 的方式描述
 
- 静态条件的 
- 错误 - 错误是函数的返回值,可选地接收
 
- 编译过程 - 不使用不安全的宏,而是使用编译期执行的函数
- 用户态的宏是使用 $开头的变量
- 能够在编译器反射语法树和注解
 
- 静态语言,与 C/C++ 互操作
- 同时拥有解释模式和编译模式
- pure关键字表示是否为纯函数,- transient不影响纯函数的行为
- 组合式状态函数,用于管理状态上下文
类型系统 
原生类型:
| 类型 | 大小 (bit) | 
|---|---|
| char | 8 | 
| uchar | 8 | 
| wchar | 16 | 
| int | 32 | 
| uint | 32 | 
| long | 64 | 
| ulong | 64 | 
| float | 32 | 
| double | 64 | 
同时也提供带有数字后缀的版本:
| 类型 | 大小 (bit) | 
|---|---|
| int8 | 8 | 
| int16 | 16 | 
| int32 | 32 | 
| int64 | 64 | 
| uint8 | 8 | 
| uint16 | 16 | 
| uint32 | 32 | 
| uint64 | 64 | 
| float32 | 32 | 
| float64 | 64 | 
不区分原生类型和包装类型,原生类型可调用包装类型的方法是编译时行为。
变量系统 
变量无需使用关键词来声明:
rust
x = 3可变变量:
rust
mut x = 3不可变变量:
rust
x: float = 4常量:
rust
const x = 3常量解包支持:
rust
const (x, y) = (3, 4)
const { x, y } = Rect{ x: 3, y: 4 }条件语句 
If 语句:
rust
if x > 4 {
}支持行内写法:
rust
a = if (b > 3) b * 5 - 6 else b * bFor 语句 
rust
for i in 3..10 {
}
for i, item in iter(iterable) {
}函数 
rust
func add(x: int, y: int): int {
  return x + y
}匿名函数:
rust
x = (x: int, y: int) => x + y泛型函数:
rust
func add<T extends C>(x: T, y: T): T {
  return x + y
}函数式语法:
rust
// Lambda 写法,类型推导将在 Lambda 上使用,使得 x 不需要类型
a = map(x => x ** 2, 1..100..5) // 此时 a 是一个迭代器
// 函数写法
a = (x => x ** 2).map(range(1, 100, 5))位置解包:
rust
func f(x: ...int) {
    print(...x)
}
a = [1, 2, 3]           // a 是 list<int> 类型
b = arrayof(1, 2, 3)    // b 是 array<int> 类型
f(...a)
f(...b)宏函数 
可使用 macro 关键词来声明宏函数:
rust
macro #add(x, y) {
  return (
    x + y
  )
}宏函数调用:
rust
#add(3, 4)宏函数将在编译时作为脚本执行,执行源代码和编译器操作。
简单类支持 
cs
class A {
    _a: int?
    lateinit b
    _c: int = 3
    init (x: int) {
        mut b = x
    }
}特性支持 
在代码最外层使用 @@rules 注解来声明特性:
rust
@@rules("no-unsafe")使用 @decorator 注解来声明函数、类、参数或成员等的特性。
标准库支持 
- io:文件和流
- string:字符串
- iterator:迭代器
- generator:生成器
- coroutine:协程
异步 API 
rust
async func main() {
  x = await aio.sleep(1000)
}顶层异步模式:
rust
await aio.sleep(1000)