【实战进阶】用Zig高效引入外部库,打造专属命令行神器!

news2024/11/27 5:40:59

经过几周的密集练习,我们开始对 Zig 有了感觉了吧。我反正已经开始能熟练的安装 Zig 并搭建项目了。本篇将把这些核心的技能加以混合使用,拿编写命令行程序为目的,把整个流程给大家跑一遍,手把手教导一遍,和大家一起梳理。

注意:Zig 目前还没有到 V1.0 版本,也就是还无法稳定,所以你不要指望拿它去写成熟应用。我们主要目的就是玩,好处是这个编程语言是社区驱动的,迭代快,语法比 C 要高级点,本身也能替代 C,为以后写高级程序做好储备。后面出错,也不要抱怨,直接社区沟通,让我们一起交流。

首先,我们要找到处理命令行程序参数和打印字符串的框架,这里,有技巧。我是通过搜索 zig-awesome 这类关键字项目去找的,前人栽树,肯定好乘凉:

GitHub - jiacai2050/zigcli: A toolkit for building command lines programs in Zig.A toolkit for building command lines programs in Zig. - jiacai2050/zigcliicon-default.png?t=N7T8https://github.com/jiacai2050/zigcli/tree/main

工程介绍如下:

Modules

Zig modules to help developers build their awesome cli programs. Currently there are:

  • simargs, which is used to parse arguments
  • pretty-table, which is used to print aligned and formatted tables

这个类库有了,我们怎么用呢。按下面操作一起练习一遍:

1、创建项目:

❯ mkdir zig-simargs; cd zig-simargs;
❯ zig init
❯ ls
build.zig  build.zig.zon  src  zig-cache  zig-out

 2、按zigcli 的介绍,加入类库:

zig fetch --save=zigcli https://github.com/jiacai2050/zigcli/archive/${COMMIT}.tar.gz

这里 COMMIT就找最新的 commitid 贴进去就可以。当你执行完之后,打开 buildl.zig.zon,就会看到如下新增内容:

    .dependencies = .{
        .zigcli = .{
            .url = "https://github.com/jiacai2050/zigcli/archive/54d095c0a53669b2f2ff4e173e8c22f47d496eda.tar.gz",
            .hash = "1220e8fb37224ab6ee9c575129594a808643b548596d63dd8b87cb42e22a7eed9f51",
        },
    },

确认完自动加入的内容,需要自己手工在 build.zig 手工加入类库声明:

    const zigcli = b.dependency("zigcli", .{});

    // Currently zigcli provide two modules.
    exe.root_module.addImport("simargs", zigcli.module("simargs"));
    exe.root_module.addImport("pretty-table", zigcli.module("pretty-table"));

3.通过 build.zig 了解到主 main 文件是 src/main.zig,打开加入样例代码如下:

const std = @import("std");

const Table = @import("pretty-table").Table;
const Separator = @import("pretty-table").Separator;
const String = @import("pretty-table").String;

pub fn main() !void {
    const t = Table(2){
        .header = [_]String{ "Language", "Files" },
        .rows = &[_][2]String{
            .{ "Zig", "3" },
            .{ "Python", "2" },
            .{ "C", "12" },
            .{ "Ruby", "5" },
        },
        .footer = [2]String{ "Total", "22" },
        .mode = .box,
    };

    const out = std.io.getStdOut();
    try out.writer().print("{}", .{t});
}

然后在目录下跑命令:zig build run 返回

❯ zig build run
┌────────┬─────┐
│Language│Files│
├────────┼─────┤
│Zig     │3    │
│Python  │2    │
│C       │12   │
│Ruby    │5    │
├────────┼─────┤
│Total   │22   │
└────────┴─────┘

一个完整的命令行程序就编写完成。是不是很轻松。代码量不多,自己多联系几遍,掌握 Zig 编程的乐趣吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1825850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vscode中使用make命令

前言 需要注意,如下操作需要进行网络代理,否则会出现安装失败的情况 安装 第一步 — 安装MingGW (1)进入官网下载 (2)下载完成之后,双击exe文件 (3)点击Install &#x…

day09--151.翻转字符串里的单词+ 右旋字符串

一、151.翻转字符串里的单词 题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/ 文章讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html#%E7%AE%97%E6%…

PROSAIL模型前向模拟与植被参数遥感

原文链接:PROSAIL模型前向模拟与植被参数遥感 “绿水青山就是金山银山”的生态文明理念现已深入人心,从顶层设计到全面部署,生态文明建设进入举措最实、推进最快、力度最大、成效最好的时期。生态文明评价必须将生态系统健康作为基本内容&am…

什么是深拷贝;深拷贝和浅拷贝有什么区别;深拷贝和浅拷贝有哪些方法(详解)

目录 一、为什么要区别深拷贝和浅拷贝 二、浅拷贝 2.1、什么是浅拷贝 2.2、浅拷贝的方法 使用Object.assign() 使用展开运算符(...) 使用数组的slice()方法(仅适用于数组) 2.3、关于赋值运算符() 三、深拷贝 3.1、什么是…

全网首发:教你如何直接用4090玩转最新开源的stablediffusion3.0

1.stablediffusion的概述: Stable Diffusion(简称SD)近期的动态确实不多,但最新的发展无疑令人瞩目。StableCascade、Playground V2.5和Stableforge虽然带来了一些更新,但它们在SD3面前似乎略显黯然。就在昨晚&#x…

基于SpringBoot+Vue高校自习室预约系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

C++初学者指南第一步---3.输入和输出(基础)

C初学者指南第一步—3.输入和输出&#xff08;基础&#xff09; 1. I/O Streams(I/O流) #include <iostream>int main () {int i;// read value into istd::cin >> i; // print value of istd::cout << i << \n; }数据的来源和目标 …

主观评测图生3D之 --- Era3D

文章目录 概述真人测试&#xff08;一般&#xff09;动物&#xff08;猫猫狗狗&#xff0c;不ok&#xff09;Q版真人&#xff08;惊艳&#xff09; 概述 抱抱脸可以直接测试 不过抱抱脸只能够生成多视图图像以及对应的法向图。 评测的话&#xff0c;拿三类我们比较关心的图片…

基于Java+MySQL+Tomcat+maven+JavaScript+Servlet的个人博客系统

目录 一、项目简介 二、页面效果 三、涉及的知识点 四、准备工作 1、创建maven项目&#xff0c;引入依赖 2、将前端代码粘贴到webapp目录下 3、设计数据库 4、编写数据库代码 以及 封装数据库连接操作 5、创建实体类 以及 封装对数据库的增删查改操作 五、功能实现 1…

传统边界安全设备的前世今生

光看不行得防御 只能抵御已知规则 识别病毒文件 识别方式是将数据包还原成文件&#xff0c;然后对文件进行病毒检测&#xff0c;检测方式就是以下三种 1、每一个文件都有一个独一无二的MD5值&#xff0c;把病毒文件的MD5值也进行记录&#xff0c;然后进行匹配 2、文件稍有变…

【EMC专题】ESD可视化设备对比宽地线和窄地线对ESD性能的影响

ESD可视化设备 ESD可视化设备是一种通过用非接触磁场探针自动扫描ESD电流来实现ESD电流可视化的设备。如下所示磁场探针可以测量电场强度,结合不同位置移动进行扫描,通过反复施加ESD并测量,得到PCB整体的电场强度数据。 实验解析 实验目的 利用ESD可视化装置观测施加于P…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(四)

第四节 质量非数据资料分析的基础工具 1 关 联 图 2.1 概念 所谓关联图&#xff0c;就是对关系复杂而相互纠缠的问题&#xff0c;依据原因—结果或目的一手段等关系&#xff0c; 在逻辑上用箭头把各要素之间的因果关系连接起来&#xff0c;厘清复杂问题、整理语言文字资料…

软考初级网络管理员__Web网站的建立、管理维护以及网页制作单选题

1.在HTML 中&#xff0c;用于输出“>”符号应使用()。 gt \gt > %gt 2.浏览器本质上是一个&#xff08;&#xff09;。 连入Internet的TCP/IP程序 连入Internet的SNMP程序 浏览Web页面的服务器程序 浏览Web页面的客户程序 3.HTML 语言中&#xff0c;单选按钮的…

重塑IT审计的未来:数智化审计赋能平台的创新与实践

重塑IT审计的未来&#xff1a;数智化审计赋能平台的创新与实践 一、当前企业开展IT审计面临的挑战 随着信息技术的快速发展、企业数字化转型的持续深入&#xff0c;以及网络安全合规要求的不断增强&#xff0c;企业开展新型IT审计重要性越来越突出&#xff0c;但实施难度却越来…

微信删好友了聊天记录还能找回来吗?3种简单方法分享

微信删好友了聊天记录还能找回来吗&#xff1f;有时候删除好友后&#xff0c;发现需要找回与该好友的聊天记录。很多人会问&#xff1a;“微信删好友了聊天记录还能找回来吗&#xff1f;”本文将详细探讨这一问题&#xff0c;并提供多种可能的解决方案&#xff0c;帮助用户找回…

vue3医疗项目

配置src别名 打开viteconfig.js文件进行配置 import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; // 引入node提供内置模块path&#xff1a;可以获取绝对路径 import path from "path";// https://vitejs.dev/config…

LIMS(实验室)信息管理系统源码:系统构架组成与功能实现

LIMS&#xff08;实验室&#xff09;信息管理系统源码&#xff1a;系统构架组成与功能实现 采用先进的计算机网络技术、数据库技术和标准化的实验室管理思想&#xff0c;组成一个全面、规范的管理体系&#xff0c;为实现分析数据网上调度、分析数据自动采集、快速分布、信息共…

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么&#xff1f;&#xff1f;&#xff1f; 这些精度是用来干嘛的&#xff1f;&#xff1f;混合精度 mixed precision training什么是混合精度&#xff1f;怎么转换呢&#xff1f; 为什么大语言模型通常使用FP32精度训练量化…

房地产房型展示信息小程序的内容是什么

地产业规模之大且品牌众多&#xff0c;还有房屋租赁、中介等&#xff0c;无论开发商公司还是衍生行业商家都需要多渠道宣传品牌和客户触达沟通转化&#xff0c;除了线下各种传单&#xff0c;线上也是主要场景&#xff0c;通过各种连接来达到相应目标。 也因此需符合平台生态开…

基于cortex-M3的rtos原理(上)

一、RTOS是什么&#xff1f; 下面是网上搜索到的定义&#xff1a; 看到系统一般会想到window&#xff0c;linux这种&#xff0c;但是rtos区别于它们的是占用资源小&#xff0c;实时性强&#xff0c;可以运行在资源受限的mcu上。一些soc厂商编写的sdk里带有添加“任务”的功能&…