Tnze Programming Language

本项目设计了一种实验性的脚本语言,主要用途是在各种应用程序中作为嵌入式解释器,提供通过自定义脚本调用内部API的功能。

简单来说,就是语法更加现代化的 Lua 语言

语言的设计目标

  1. 简单易学,没有令人望而却步的各种符号
  2. 拥有现代化的语法,表达能力强、不罗嗦
  3. 提供优秀的语言交互接口(FFI)
  4. 提供“全局异步支持”,所有函数都是异步函数
  5. 所有设计均符合现代程序员的编程习惯,不搞特殊
  6. 提供官方的风格化指南,统一代码风格

语言的设计思路

  1. 提供优秀的类型系统,利于早期发现编程错误
  2. 脚本依赖宿主的接口都需要显式声明,容易检查宿主环境是否能运行当前脚本
  3. 函数是一等公民,能正确处理闭包等编程原语
  4. 基于类型擦除的泛型,作为解释型语言正合适
  5. 没有默认的“空值”,可能为空的值都需要套Option类型实现,从语法上杜绝空指针异常
  6. 包含各种常用的类型:
    • 布尔值:bool
    • 无符号整数:u8, u16, u32, u64, u128, u256, u512
    • 有符号整数:i8, i16, i32, i64, i128, i256, i512
    • IEEE 754 浮点数:f8, f16, f32, f64
    • 定长数组:ary<N: usize, T: any>
    • 不定长数组:vec<T: any>
    • 字符串:string, vec<u8>
    • 映射表:map<K, V>
    • 迭代器:iter<T>
    • 积类型与和类型:struct{}, union{}
  7. 联合体自带标签,可以自行区分当前是哪一种变体
  8. 相对丰富的控制流关键字:if, for, match
  9. 通过 for 关键字统一提供多种循环变体
  10. 非try-catch方案的错误处理

语言的实现要求

  1. 解释器易于在多种语言上实现,要提供Rust、Go、C、C#、JS等常见语言的解释器
  2. 解释器库要对宿主提供简单明了的接口,方便从宿主给脚本提供API
  3. 解释器能输出良好的错误信息,高效定位问题原因
  4. 内置模块功能,用于将代码划分为模块,利于项目代码解耦
  5. 至少能提供马马虎虎、勉勉强强的性能

语言的生态建设手段

  1. 提供完整的字符串操作工具
  2. 提供功能强大的官方标准库