初识Zig

在看NullClaw项目的时候,看到它用了Zig语言编写,于是对Zig语言进行了简单了解。

主页:主页 ⚡ Zig 编程语言 手册:Documentation - The Zig Programming Language

中文论坛:zigcc · Discussions · GitHub

Zig基本情况

Zig是由Andrew Kelley在2015年创建、2016年发布的通用、静态类型、编译型系统编程语言,核心目标是成为C语言的安全、简洁、高性能替代品,它的核心理念可概括为“显式、可预测、无魔法、自包含”。

核心特性

  1. 性能与硬件控制‌:编译器生成的代码性能接近C语言,能直接编译为本地机器码,保留C级别的硬件控制能力,同时通过数据导向设计(DOD)优化内存访问,编译器自举后内存占用大幅降低,还支持32位系统和嵌入式设备。
  2. 内存安全可控‌:无垃圾回收机制,通过统一分配器接口显式管理栈、堆、arena内存,结合编译时和运行时检查,避免悬垂指针、双重释放等内存错误。
  3. 简洁直观语法‌:无宏、预处理器、隐式转换,语法极简且行为完全可预测;支持编译时代码执行(comptime),用同一套语法实现运行时与编译时逻辑,实现零开销元编程。
  4. 强大跨平台与互操作能力‌:内置交叉编译功能,一行命令就能为x86、ARM、RISC-V、WebAssembly等多平台生成二进制;可直接通过@cImport("header.h")调用C库,也能导出接口供C语言调用,完美兼容C生态。
  5. 可靠错误处理‌:采用Error Union!T显式错误处理机制,强制开发者处理所有潜在错误,避免C语言中错误码易被忽略的问题。

适用场景

适合系统级编程(操作系统、设备驱动开发)、嵌入式开发(微控制器、物联网设备)、高性能后端服务(API网关、数据库驱动)、游戏引擎开发、安全应用(加密协议实现)等对性能、可靠性要求高的场景。

学习

一、基础准备

  1. 安装编译器‌:先从Zig官网(https://ziglang.org/)下载对应系统的编译器,完成安装,确保在命令行中能通过zig命令调用。
  2. 了解核心定位‌:Zig是静态类型、编译型的系统编程语言,主打高性能、内存安全、简洁语法和跨平台能力,适合系统级编程、嵌入式开发等场景,学习前先明确它的适用方向。

二、入门学习路径

  1. 编写第一个程序
    直接上手经典的"Hello, World!"程序,熟悉Zig的基础语法结构:

const std = @import("std");
pub fn main() void {
    std.debug.print("Hello, World!\n", . {});
}

运行该程序的命令为zig run your_file.zig,通过这个过程掌握标准库导入、函数定义、程序入口等基础内容。

zig run src/hello.zig


2. ‌掌握基础语法

  • 学习标识符规则:Zig标识符可包含字母、数字和下划线,必须以字母或下划线开头,且区分大小写,同时要避开fnstruct等关键字。
  • 熟悉类型系统:了解Zig的基础类型,以及?T这种可选类型(用于处理可能为空的值)。
  • 掌握注释方式:Zig有三种注释,//是单行注释;///是文档注释,会被保留用于生成代码文档;//!是模块注释,需放在文件顶部的comptime块中。

三、进阶学习与实践

  1. 学习核心特性
    深入理解Zig的内存安全机制(无垃圾回收但通过编译时检查避免内存错误)、显式错误处理(Error Union!T机制)、编译时代码执行(comptime实现零开销元编程)等核心特性。
  2. 动手实践项目
    可以尝试实现简单的数据结构(如链表),或者开发小型命令行工具,在实践中巩固语法和特性应用。
  3. 参考官方资源
    访问Zig官网的中文学习板块(https://ziglang.org/zh-CN/learn/),这里有一系列从零到深入的学习指南,能系统性地帮助你理解Zig的设计哲学和进阶用法。

实践

FreeBSD下安装

pkg包里直接就有

pkg search zig
py311-elelabs-zigbee-ezsp-utility-20220218 Elelabs Firmware Update Utility
zig-0.15.2                     Language designed for robustness, optimality, and maintainability
zig014-0.14.0                  Language designed for robustness, optimality, and maintainability
zig2tuple-g20251226            Generate ZIG_TUPLE knob for Zig ports
zigbee2mqtt-2.0.0              Use your Zigbee devices without the vendor's bridge or gateway

pkg安装

sudo pkg install zig

创建目录并初始化

mkdir hello-world
cd hello-world
zig init

编译测试

zig build run

输出

zig build run
All your codebase are belong to us.
Run `zig build test` to run the tests.

执行

zig build test

但是这个没有任何输出

写一个helloworld

写文件hello.zig

const std = @import("std");

pub fn main() !void {
    try std.fs.File.stdout().writeAll("Hello, World!\n");
}

编译、执行

zig build-exe src/hello.zig

编译完成之后生成hello文件,执行

 ./hello
Hello, World!

直接执行

zig run src/hello.zig

在经过几秒的编译之后,执行出现Hello, World!

Ubuntu下安装

从下载页码: 下载 ⚡ Zig 编程语言

下载0.15.2版本,https://ziglang.org/builds/zig-x86_64-linux-0.16.0-dev.2682+02142a54d.tar.xz

wget https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz
xz -d zig-x86_64-linux-0.15.2.tar.xz
tar -xvf zig-x86_64-linux-0.15.2.tar

这是0.16.0版本

wget https://ziglang.org/builds/zig-x86_64-linux-0.16.0-dev.2682+02142a54d.tar.xz
xz -d zig-x86_64-linux-0.16.0-dev.2682+02142a54d.tar.xz
tar -xvf zig-x86_64-linux-0.16.0-dev.2682+02142a54d.tar

添加路径,直接执行,并在.bashrc文件中加入

export PATH=$PATH:~/path/to/zig

# 我的是在~/tools/zig-x86_64-linux-0.15.2
export PATH=$PATH:~/tools/zig-x86_64-linux-0.15.2

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐