【书接上回】
(书友反馈多些干货,遂脱水缩合。趣导之而水,码导之而涩。码趣之道难衡,始知“叩其两端而执其中”。编写时间、水平有限,挂一漏万,恳读者批评之。是为序。)
三、配置开发环境
1. 编译原理
程序猿马骝阿豪继续捣鼓怎么用Zig写程序。
编程,就是将人话告诉计算机,让他给我们干活。这个人话写在叫源代码的文件里面。把人话翻译为机话的过程就叫做编译。翻译的那个工具就叫编译器。
按照C语言的套路,如果在Windows平台下编程,得先下载一个Cygwin或者MinGW配置一个GCC编译器,并且按照教程下载、安装、配置环境变量。
这个过程比较麻烦,阿豪在学习中总结了VSCode如何配置C/C++编程环境一文。
这种方法网上参考配置文章很多,也很好用。缺点是GCC版本一般会落后最新版本很多,如果要在Windows中使用最新的GCC,可以用微软的MSVC编译器。
“那Zig语言怎么配置编译器呢?” 阿豪的同学阿涛此刻问道。他也想看看Zig语言怎么玩。
“那得首先略探一二程序的编译流程。上图~”
Zig语言使用LLVM编译器进行编译。LLVM翻译Zig代码的流程,与C类比,先将main.zig翻译为LLVM IR这个中间代码,然后再将中间代码翻译为特定指令集的汇编,然后由链接器LLD链接后形成可执行文件。这个过程到底生成的东西是什么,可以参考我用LLVM手动编译C语言的LoongArch32-ELF程序的过程。
阿涛摇摇脑袋说道:“这个东西,我知道他的原理也没啥用啊。废话少说,我想先写个代码看看。”
阿豪觉得甚是此理。作下文以记之。
2. 用Scoop配置Zig
参考官方文档的GetStart。官方文档是最值得看的,其次是系统性的教程,例如Zig中文教程,有各种平台的配置Zig环境的教程。
以Windows环境为例,在终端运行以下指令:
2.1. 安装scoop
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
2.2. 安装Zig各个版本
使用Scoop可以安装测试版和main版本。目前装main版本。
scoop bucket add main
scoop install main/zig
安装测试版
scoop bucket add versions
scoop install versions/zig-dev
两个版本能相互切换:从zig到zig-dev
scoop reset zig-dev
或者切换回zig
scoop reset zig
2.3. Zig环境测试
在终端输入zig version
,若输出0.13.0
或者更新版本号,则安装Zig编译器成功。
3. 参考项目
4. Windows下VSCode配置
可参考大佬的文章配置zig + vscode 配置 debug 断点调试 · zigcc · Discussion #9 (github.com),很详细。下面按照有基础编程经验的读者简要叙述,如有某一点不懂,可用关键词检索学习相关配置方法,这里不再赘述。
4.1. ZLS配置
zigtools/zls (github.com)是非官方的语言服务器协议实现,人话就是实现在编辑器给代码加高亮、转跳等功能的软件。必装。下载zls-x86_64-windows.zip
到一个地方解压。
同时给zls路径配置环境变量。
4.2. Zig插件安装
Zig Language插件。
装完点拓展配置:
选择Zig Language Server。
配置好Zig Path,用Scoop的填zig即可。用官网下二进制文件安装就要填zig.exe所在目录。
拉到差不多最后的Zls: Path,配置好zls的环境变量后填zls即可。
4.3. 字符编码
Zig使用UTF-8输出,Windows终端默认输出GBK。使用chcp 65001
临时修改终端字符集可以。也可修改全局为UTF-8,不过这是一个beta特性。而且可能会影响其他应用工作。
最终极的解决方案是在WSL2这个Linux子系统上编译运行Zig程序,能输出中文。WSL2安装Zig的流程与Windows一致,使用包管理工具下载Zig后,配置环境变量;下载ZLS后配置环境变量。然后在VSCode插件上配置Zig和ZLS的路径即可。缺点是方法过于繁琐。用下文的Clion写Zig也可以输出中文。
4.4. VSCode调试Zig-支持中文
方案一:用cppvsdbg
在 Windows 版 VS Code 中调试 Zig 代码 - 知乎 (zhihu.com)
在 VS Code 中安装 C/C++ ( ms-vscode.cpptools ) 、 ZLS for VSCode ( augusterame.zls-vscode ) 扩展。
在项目的.vscode\launch.json
文件中添加以下内容:
{
"version": "0.2.0",
"configurations": [
{
"type": "cppvsdbg",
"request": "launch",
"name": "(Windows) Debug test runner|cppvsdbg",
"program": "${workspaceFolder}\\zig-out\\bin\\hello.exe",
"cwd": "${workspaceFolder}\\zig-out\\bin",
"symbolSearchPath": "${workspaceFolder}\\zig-out\\bin",
"environment": [],
// "externalConsole": false,
"logging": {
"moduleLoad": false
},
"preLaunchTask": "build",
}
]
}
还要在tasks.json文件添加构建参数
{
"version": "2.0.0",
"tasks":[
{
"label": "build",
"type": "shell",
"command": "zig",
"args": [
"build",
"-Doptimize=Debug", // 不能裸机调试用,可用Windows的Zig程序调试
// "-Doptimize=ReleaseSafe", // 调试可用、可运行、编译器安全优化
// "-Doptimize=ReleaseFast", // 调试可用、可运行
// "-Doptimize=ReleaseSmall", // 最小包,不可调试,可运行、不进行安全优化
],
}
]
}
同时为了在Windows下调试并且输出中文,需要设置settings.json
文件,将终端的编码换成UTF-8:
{
"zig.path": "zig",
"zig.zls.globalCachePath": "",
"zig.zls.path": "zls",
"terminal.integrated.profiles.windows": {
// 配置cmd
"cmd": {
"path": "cmd.exe",
"icon": "terminal-cmd",
"args": ["/K chcp 65001 >nul"]
},
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["chcp 65001", ";", "powershell", "-NoLogo"],
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
},
"terminal.integrated.defaultProfile.windows": "PowerShell",
}
这种是用cppvsdbg进行调试。有个问题就是全局变量、常量看不到。
还有用lldb调试的:需要先安装Windows环境下的LLVM MinGW-w64包,LLVM自带LLDB。然后再VSCode安装CodeLLDB。如果断点不可用,检查计算机中的LLVM MinGW-w64是否是最新的。环境变量中的工具链会有影响。参考这篇文章进行修改。
这种方法比较麻烦,不如用cppvsdbg。
5. Clion配置Zig开发环境
按照上文下载好Zig和ZLS后,Clion需要配置的东西很少就能使用。
5.1. 配置插件ZigBrains
如果遇到connect Rest,把梯子全局代理开启。
6. Clion编写Zig程序测试
6.1. Zig编译运行流程
zig init初始化项目——>zig build run 编译运行项目。
6.2. 初始化Zig项目:zig init
会出现问题:项目文件都“正在加载”???
因为标准库的路径不对。
解决方案:更新插件,Zig和ZLS的路径都点一下“自动探测”:
修改完重新重磁盘加载项目,就能看到文件:
6.3. 编译运行:zig build run
在Clion右侧点击Reload Zig Build Setps,能刷新出来编译选项。
点击run或者test就能运行程序。
运行单个测试:
6.4. 调试
点运行旁边的绿色小虫子就能断点调试。
Clion运行支持输出中文,而调试不支持输出中文,暂时没找到方案。期待大佬的方案。
6.5. 更换调试器*(可选)
在设置中选,目前机器测试,默认的MSVC能用,GDB和LLDB会进入不了断点。原因未知。
6.6. 更换主题*
个人嫌弃Clion默认的深色字体不好看,于是下载visual studio dark plus theme
插件后就拥有了五彩斑斓的Zig代码,和VSCode风格一致,对眼睛舒服多了。
7. 小结
本章介绍VSCode和Clion两种不同IDE上用Zig进行编程的方法,方便新手入门。同时应该意识到IDE只是编程的工具,本质是代码文件经过编译、链接后生成了可执行文件运行。IDE只是帮助玩家省略这背后的操作,而不应该不懂背后的编译原理。
而且,配置环境的目的是写程序,慎本末倒置,环境折腾了一大堆,Zig程序屁没放出来一个(是我没错了哈哈哈)。