TzdLang (简称 TZD)是一门面向现代高并发、科学计算与深度学习而设计的系统级高性能面向对象语言。其核心理念在于打破解释型语言的高开发效率与编译型系统语言极致运行性能之间的壁垒,在语言底层深度集成了 LibTorch 深度学习原生内核 与 LLVM / AsmJit 多层自适应编译流水线 。
为什么选择 TzdLang?
传统开发中,科研与工程人员通常用 Python 编写算法逻辑与 PyTorch 模型,再用 C++ 重写高性能模块并使用 pybind11 打包,存在严重的语言割裂与跨 FFI 数据序列化开销。TzdLang 提供了单语言贯通从系统级底盘、高精度 NTT 大数计算到深度学习张量训练的全栈能力。
1.1 核心指标横向对照
语言特性维度
TzdLang
C++20
Rust
Python 3.12 (CPython)
类型系统
混合推断 + 原生静态强类型
静态强类型
静态所有权模型
动态弱类型
并发模型
原生系统级多线程 (No GIL)
std::thread / jthread
Fearless Concurrency
GIL 全局解释器锁限制
执行引擎
Tier 0 VM + Tier 1 LLVM/AsmJit
AOT 静态编译
LLVM AOT 编译
栈解释器 / 实验性 Tier 1
AI / 张量支持
语言级内建 LibTorch C++ 内核
需外挂第三方依赖
第三方 tch-rs 绑定
外挂 CPython 扩展模块
垃圾回收
新生代 Bump Arena + 老年代 SATB
手动 RAII
编译期生命周期
引用计数 + 分代 GC
1.2 执行流水线拓扑结构
TzdLang 的程序执行经历完整的四阶段处理:
前端解析 (ANTLR4 Frontend) :将 .tzd 源代码转化为高精度抽象语法树 (AST),并执行词法与语义合法性静态分析。
Tier 0 虚拟机 (Stack-based Bytecode VM) :启动时毫秒级生成并执行堆栈字节码,多态内联缓存 (PIC) 支撑快速冷启动。
热点探测 Profiler :执行期间后台分析器统计函数调用频次与循环回边,达到阈值自动派发至并发编译线程。
Tier 1 JIT 优化编译器 :利用 LLVM / AsmJit 展开函数调用、应用常数折叠、死代码消除与硬件指令特化,直接输出 x86_64 原生机器码。
TzdTools 提供了两种官方预编译安装包:GPU 完整版 与 CPU 轻量版 。根据您的硬件环境与开发场景选择最适合的版本。
2.1 版本选型对比
对比项目
GPU 完整版 (TzdTools_Setup_v0.2.11.exe)
CPU 轻量版 (TzdTools_Setup_v0.2.11_CPU.exe)
安装包体积
1.20 GB (全套 GPU 库打包)
55.0 MB (缩减 95.5%!)
解压后占用
约 3.73 GB
约 293 MB
硬件要求
需配备 NVIDIA 独立显卡 (CC ≥ 6.0)
任意 x64 PC,无独立显卡要求
深度学习
CUDA 12.6 + cuBLAS + cuDNN 极速加速
CPU LibTorch 多核并行加速
大数乘法
GPU NTT 百万位纳秒级乘法
CPU 优化快速乘法回退
如果您拥有 NVIDIA 显卡并需要进行高算力深度学习或大数密码学运算,强烈建议下载 GPU 完整版 ;若仅需学习语言语法、日常工具开发、轻薄本或部署到持续集成 CI/CD 服务器,请选择极小体积的 CPU 轻量版 。
2.2 安装步骤与 PATH 环境变量配置
从官网下载 TzdTools_Setup_v0.2.11.exe 或 TzdTools_Setup_v0.2.11_CPU.exe。
双击运行安装向导,选择安装目标目录(默认为 C:\Program Files\TzdTools)。
安装向导会自动将安装目录追加至 Windows 系统 PATH 环境变量并创建桌面快捷方式。
打开新的 CMD 或 PowerShell 终端,执行环境测试命令:
# 1. 验证 CLI 环境是否就绪
tzd --help
# 2. 执行第一个 TzdLang 脚本
tzd examples\hello.tzd
2.3 VS Code 扩展套件安装
下载官方提供的 tzdlang-0.2.6.vsix 扩展包后,在 VS Code 中按下快捷键 Ctrl+Shift+P,输入并选择:
Extensions: Install from VSIX... -> 选择下载好的 tzdlang-0.2.6.vsix,即可激活语言高亮着色与智能感知支持。
TzdLang 采用了兼具极高灵活度与编译期零开销特化的混合类型系统 。既支持现代动态推断,又支持 C/C++ 级别的底层静态强类型与系统级指针。
在语句层(函数体内、顶层脚本或 REPL 交互环境)中,TzdLang 严格支持以下三种声明范式:
1. 显式强类型 :float ratio = 0.875; 或 int count = 1024;
2. var 动态推断 :var ratio = 0.875; 或 var count = 1024;
3. 冒号类型约束 :ratio : float = 0.875; 或 count : int = 1024;
特别提醒: 局部语句中不支持 let(输入 let ratio: float = 0.875; 将触发解析器“发现多余输入字符”报错),亦不可混写为 var x: int = 10;。let 与 const 仅在 class 类体中作为成员字段合法使用!同时注意 out 是保留打印别名,不可用作变量名。
3.1 语句层变量声明实操
// 1. 显式强类型声明 (<type> <identifier> = <value>;)
float ratio = 0.875 ;
string message = "Hello, TzdLang!" ;
bool isDebug = false ;
// 2. var 动态推断声明 (var <identifier> = <value>;)
var totalCount = 1024 ;
var appTitle = "TzdTools Native Engine" ;
// 3. 冒号类型约束声明 (<identifier> : <type> = <value>;)
threshold : float = 99.5 ;
maxBuffer : int = 65536 ;
// 4. 原生数组声明与索引
var numbers = [10 , 20 , 30 , 40 ];
print ("Array element at index 2: " + numbers[2 ]);
3.2 类成员字段中的 let 与 const
在面向对象 class 类体内部,let 用于声明实例字段,const 用于定义常数字段,var 用于通用类型字段:
class ServerConfig {
const MAX_CONNECTIONS = 10000 ; // 类常量
let float keepAliveRatio = 0.875 ; // 类实例字段 (let <type> <name>)
var string host = "127.0.0.1" ; // 类实例字段 (var <type> <name>)
ServerConfig () {}
}
3.3 系统级原生指针与内存布局
在涉及操作系统 Win32 API 交互或高性能共享内存时,TzdLang 原生支持 ptr(或 hwnd 窗口句柄)类型,不经过任何对象封箱,与原生机器字长(64位)保持 1:1 对齐:
ptr handle = null ;
if (handle == null ) {
print ("Pointer is uninitialized, allocating..." );
}
本章详细讲解分支结构、循环体系以及作为一等公民的函数与闭包。
TzdLang 语法解析器规定:for 循环括号内第一个子句必须是赋值表达式,不能包含 var 关键字声明 。控制变量必须在循环体外部预先声明(如:var i = 0; for (i = 0; i < n; i++))。
4.1 循环控制结构实操
// 正确规范:控制变量在外部声明
var i = 0 ;
var sum = 0 ;
for (i = 0 ; i < 100 ; i++) {
if (i % 2 == 0 ) {
sum = sum + i;
}
}
print ("Sum of even numbers: " + sum);
// while 条件循环
var counter = 10 ;
while (counter > 0 ) {
counter = counter - 1 ;
}
4.2 函数定义与高阶闭包
函数使用 fun 关键字定义,参数可带或不带类型注解,支持递归调用与函数作为第一公民传递:
// 1. 标准函数定义 (无需且不支持返回类型后缀)
fun calculateTax (amount: float , rate: float ) {
return amount * rate;
}
var tax = calculateTax (100.0 , 0.15 );
print ("Calculated Tax: " + tax);
// 2. 递归函数演练 (Fibonacci 斐波那契数列)
fun fib (n) {
if (n <= 1 ) {
return n;
}
return fib (n - 1 ) + fib (n - 2 );
}
print ("Fibonacci(10) = " + fib (10 ));
TzdLang 拥有完整的面向对象架构,在保证封装与多态特性的同时,底层虚表 (vtable) 由编译器优化为连续线性布局,最大化运行时执行效率。
5.1 类、属性与构造函数
class Device {
var string name;
var bool isOnline;
Device (devName) {
this .name = devName;
this .isOnline = true ;
}
fun ping () {
ret "Device [" + this .name + "] is alive." ;
}
}
// 实例化与方法调用
var node = new Device ("Cluster-Node-01" );
print (node.ping());
5.2 继承与多态分发
class ComputeNode extends Device {
var int gpuCores;
ComputeNode (devName, cores) {
this .name = devName;
this .gpuCores = cores;
}
// 虚方法重写 (Override)
fun ping () {
return "ComputeNode [" + this .name + "] Acceleration cores: " + this .gpuCores;
}
}
var accelerator = new ComputeNode ("RTX-4090" , 16384 );
print (accelerator.ping());
TzdLang 实现了基于零成本异常抛出机制(Zero-cost Exception Handling),在正常无异常代码路径上完全免除任何性能惩罚。
fun safeDivide (a: float , b: float ) {
if (b == 0.0 ) {
throw "DivisionByZeroException: divisor cannot be 0.0" ;
}
ret a / b;
}
try {
var val = safeDivide (100.0 , 0.0 );
} catch (err) {
print ("Captured Exception safely: " + err);
}
TzdLang 的运行时没有类似 Python 的全局解释器锁(No GIL)。thread/ 模块直接映射至操作系统原生系统线程(Windows 线程池),充分发挥 CPU 物理多核心计算吞吐能力。
7.1 标准库组织架构
stdlib/core/:数学算子、字符串高级操作、JSON 解析与序列化。
stdlib/thread/:系统原生线程、互斥锁、读写锁与并发通道 Channel。
stdlib/torch/:LibTorch 深度学习高阶张量封装。
7.2 多线程并发计算实操
import "stdlib/thread/Thread.tzd" ;
// 派生原生系统线程并行工作
fun computeTask () {
var i = 0 ;
var acc = 0 ;
for (i = 0 ; i < 1000000 ; i++) {
acc = acc + (i % 7 );
}
print ("Worker Thread computation finished. Acc: " + acc);
}
var t1 = new Thread (computeTask);
var t2 = new Thread (computeTask);
t1.start ();
t2.start ();
// 汇聚等待线程
t1.join ();
t2.join ();
print ("All threads completed seamlessly!" );
TzdLang 最为独特的杀手级特性之一是将 PyTorch 官方 C++ 引擎(LibTorch) 作为语言的一等公民原生集成。无需复杂的跨语言绑定与 Python 环境依赖,直接享受 C++ 级的张量计算吞吐。
8.1 张量创建与线性代数运算
// 1. 创建二维正态分布随机张量
var W = torch_randn ([4 , 4 ]);
var X = torch_ones ([4 , 4 ]);
// 2. GPU / CPU 张量矩阵乘法
var Y = torch_matmul (W, X);
print ("Matrix Multiplication Output:" );
torch_print (Y);
// 3. 激活函数与降维标量提取
var activated = torch_relu (Y);
var loss = torch_sum (activated);
print ("Scalar Loss Value: " + torch_scalar_value (loss));
在超大整数高精度计算领域,传统 Karatsuba 或 Schonhage-Strassen 算法在数百万位甚至上亿位大数运算中面临巨大的内存带宽与 CPU 缓存抖动瓶颈。TzdLang 引入了自主研发的 Radix-10^9 Stockham 4-Step GPU NTT 算法拓扑 。
9.1 NTT 数论变换工程创新
Stockham 4-Step 变换 :消除了传统 Cooley-Tukey 算法耗时极大的位逆序置换(Bit-reversal Permutation)阶段,实现连续内存合并访存。
Montgomery 32-Bit 旋转因子流水线 :避免昂贵的 64 位大模除指令,全部由寄存器 Montgomery 移位完成。
32-Way 共享内存 Bank 冲突消除 :利用 PAD(i) = ((i) + ((i) >> 5)) 严密推导对齐,实现 0 Bank Conflict。
三阶段前缀块扫描 (Block-Scan Carry Propagation) :将高位进位传播分解为局部产生扫描、块级传播链与全局修正,保证显卡全流处理器流水线不发生线程发散。
TzdLang 内置了经过深度定制的 dyncall 动态外部函数调用引擎与原生 MASM 汇编胶水层。与传统手动跟踪句柄的 loadLibrary / getProcAddress 机制不同,TzdLang 采用声明式原生函数语法 (native fun) ,由编译器与虚拟机在底层自动装载动态库并由 dyncall 完成 ABI 栈帧转换。
语法规范提示: TzdLang 不使用 loadLibrary()、getProcAddress() 或 callNative(),请统一使用语言原生支持的 native fun 语法。声明后该函数即成为一等公民原生函数对象,可直接调用。
1. 原生 API 声明与直接调用
语法由双括号结构组成:第一括号为参数列表,第二括号为属性映射表(支持 dll、fun、prototype = 1、type、return):
// 1. 声明 Windows 内核 API (kernel32.dll)
native fun GetCurrentProcessId ()(dll = "kernel32.dll" , fun = "GetCurrentProcessId" , prototype = 1 , type = "" , return = "int" );
native fun SetConsoleTitleA (title)(dll = "kernel32.dll" , fun = "SetConsoleTitleA" , prototype = 1 , type = "string" , return = "int" );
// 2. 直接像普通函数一样调用
var pid = GetCurrentProcessId ();
var titleStatus = SetConsoleTitleA ("TzdLang Native FFI Console" );
print ("Current Process ID: " + pid);
print ("Set title status: " + titleStatus);
// 3. 声明 Windows 用户界面弹窗 API (user32.dll)
native fun MessageBoxA (hwnd, text, caption, uType)(dll = "user32.dll" , fun = "MessageBoxA" , prototype = 1 , type = "hwnd,string,string,int" , return = "int" );
// 触发系统弹窗 (null 对应空窗口句柄,0 对应 MB_OK)
MessageBoxA (null , "Hello from Native TzdLang FFI!" , "TzdLang Interop" , 0 );
2. FFI 参数与返回类型对照表
FFI type 属性标识
C/C++ 原生类型
自动转换规则
"string"
const char* (LPCSTR)
UTF-8 脚本字符串自动转换传参为 ANSI 字节序列
"wstring"
const wchar_t* (LPCWSTR)
UTF-8 脚本字符串自动转换传参为 UTF-16 宽字符序列
"ptr" / "hwnd"
void* / HWND
系统原生裸指针或窗口句柄
"int"
int32_t / DWORD
32 位带符号整型
"long" / "longlong"
int64_t / QWORD
64 位整型数值
"float" / "double"
float / double
32 位单精度 / 64 位双精度浮点数
"bool"
bool / BOOL
布尔值映射
理解 TzdLang 虚拟机的底层调度对编写超高性能的生产级代码至关重要。本章剖析其自适应编译分层机制与双阶段垃圾回收架构。
11.1 分层执行引擎调度逻辑
冷启动 (Cold Start) :代码首先由 Tier 0 栈虚拟机运行,通过 .tzdc 二进制指令缓存避免重复 AST 解析。
热点触发 (Hotspot Detection) :调用计数器达到 50 或循环回边计数器达到 1000 时,触发 JIT 编译请求。
后台异步编译 (Concurrent JIT) :后台线程池接管编译工作,主程序继续以字节码无感知执行,编译完成后在栈安全点(Safepoint)完成 OSR(On-Stack Replacement)机器码无缝热替换。
11.2 双代混合垃圾回收 (GC)
代际分区
分配策略
回收算法与技术
性能优势
新生代 (Young Gen)
64 KB 块大小 Bump Pointer (指针碰撞)
生命周期结束整块回收 (Arena Reset)
分配仅需一次加法指令 (O(1)),零堆碎片
老年代 (Old Gen)
大对象与经历新生代存活对象晋升
SATB (原始快照) 并发三色标记写屏障
STW 停顿时间 < 0.5ms,避免长对象标记丢失
学以致用,本章将带领您从零开始,使用纯 TzdLang 语言构建一个完整的三层全连接神经网络,实现非线性异或(XOR)分类器的训练与推理。
// 1. 构造训练数据集 (XOR 异或分类问题)
var inputs = torch_tensor ([
[0.0 , 0.0 ],
[0.0 , 1.0 ],
[1.0 , 0.0 ],
[1.0 , 1.0 ]
]);
var targets = torch_tensor ([
[0.0 ],
[1.0 ],
[1.0 ],
[0.0 ]
]);
// 2. 初始化网络权重与偏置 (2 -> 4 -> 1 拓扑)
var W1 = torch_randn ([2 , 4 ]);
var b1 = torch_zeros ([1 , 4 ]);
var W2 = torch_randn ([4 , 1 ]);
var b2 = torch_zeros ([1 , 1 ]);
var learningRate = 0.1 ;
var epoch = 0 ;
print ("Starting TzdLang Neural Network Training..." );
for (epoch = 0 ; epoch < 500 ; epoch++) {
// 前向传播 (Forward pass, 注意避开 reserved keyword 'out')
var h = torch_sigmoid (torch_add (torch_matmul (inputs, W1), b1));
var pred = torch_sigmoid (torch_add (torch_matmul (h, W2), b2));
// 均方误差损失 (MSE Loss)
var diff = torch_sub (pred, targets);
var loss = torch_mean (torch_mul (diff, diff));
if (epoch % 100 == 0 ) {
print ("Epoch [" + epoch + "] Loss: " + torch_scalar_value (loss));
}
}
print ("Training complete! Model converged successfully." );
恭喜您已经完整浏览了 TzdLang 从入门到精通的核心体系!接下来,您可以直接下载 TzdTools 安装包在本地运行实操,或者进入 语言全景交互向导 (Tour) 在线调试更多代码案例。
第十三篇 · 独立机器码编译
AOT 独立原生机器码编译器 (零 DLL 外部依赖)
彻底摆脱 Python/PyTorch/CUDA 运行时依赖!TzdLang AOT 独立原生编译器将 TzdLang 源码直接编译为静态链接纯净机器码 Windows x64 独立可执行程序(.exe),文件体积低至 ~300KB,零外部动态库依赖,支持 -O0 至 -O3 全链路性能优化。
传统虚拟机分发方案通常携带数百兆乃至数吉字节的庞大依赖(如 LibTorch、CUDA 运行时)。TzdLang 原生 AOT 编译器采用轻量原生运行时 (TzdNativeRuntime.hpp) 与 C++20 静态链接 (/MT) 架构,生成的 .exe 仅依赖 Windows 内核自带的 KERNEL32.dll,可在任意同架构 Windows 系统直接双击运行!
13.1 编译器核心架构原理
AOT 编译管线由前端语法解析、原生代码生成器 (TzdNativeCodegen) 与 MSVC 后端编译驱动 (TzdExeCompiler) 协同构成:
[TzdLang 源码 .tzd]
│
▼ (ANTLR4 词法分析与 AST 构建)
[抽象语法树 (AST)]
│
▼ (TzdNativeCodegen 原生翻译器)
[纯净 C++20 机器码胶水源文件 (temp.cpp)]
│ + 头文件内联原生运行时 (TzdNativeRuntime.hpp)
│ + 静态 CRT 运行时库 (/MT /O2 /std:c++20)
▼ (MSVC cl.exe + link.exe 静态编译)
[独立原生二进制可执行程序 (.exe)] -> 仅依赖 KERNEL32.dll (约 300 KB)
13.2 命令行编译指令
在安装了 MSVC 编译环境的机器上,使用 tzd --build 或简写 tzd -b 即可快速编译:
# 1. 默认一键编译 (自动生成同名 app.exe)
tzd --build app.tzd
# 2. 自定义输出文件名与激进优化级别 (-O3 开启全程序链接期代码生成 LTCG)
tzd --build app.tzd -o release_app.exe -O3
# 3. 调试模式构建 (保留调试符号与快速编译)
tzd --build app.tzd -o debug_app.exe -O0
13.3 优化级别说明
参数
优化策略
MSVC 编译器参数
适用场景
-O0
关闭优化
/Od /Ob0
快速构建验证、开发调试与单步排错
-O1
空间优先
/O1 /Os
追求极致微小二进制体积
-O2
速度优先 (默认)
/O2 /Oi /Ot /fp:fast
生产环境常规发布,最大化吞吐性能
-O3
激进全程序链接优化
/O2 /GL /LTCG /fp:fast
高负载密集计算,开启跨模块内联与链接期死码消除
13.4 性能基准测试与对比
基准测试用例
TzdLang AOT 原生机器码
Python 3.12 解释器
体积对比
100 万次函数递归与调用
1.50 秒
5.76 秒 (原生快 3.84x )
319 KB vs 几十MB环境
100 万次累加算术循环
0.047 秒
0.082 秒 (原生快 1.74x )
309 KB vs 独立环境
斐波那契数列计算 (Fib 30)
0.012 秒
0.155 秒 (原生快 12.9x )
299 KB vs 零 DLL