zig v0.12.0 发布 — x-cmd 提供 zig 快捷安装方法和 x zig 模块

news2024/10/6 5:56:01

文章目录

    • 简介
    • 功能特点
    • v0.12.0 新特性
      • [重新设计 Autodoc 的工作原理](https://ziglang.org/download/0.12.0/release-notes.html#Redesign-How-Autodoc-Works)
      • 语法变更
      • 各类标准库变更
      • 构建系统变更
    • 常见用法
    • **使用案例**:
    • 竞品和相关项目
    • 进一步阅读

简介

Zig 是一种通用编程语言和工具链,旨在提供 C 语言更友好的替代方案。Zig 最初由 Andrew Kelley 启动,现在由 Zig 软件基金会 (ZSF) 维护。

x-cmd 同时也提供了 zig 模块,实现如下增强:

  • zig 代码可以快速部署并执行: x hi.zig
  • 采用 zig 模拟 cc 环境: x zig initcc
  • zig 命令可视化增强: x zig target

详情请参考 zig 模块

功能特点

  1. 语法设计简单清晰
    • Zig 提供了一种轻量级、类似 Rust 的语法,具有 C 提供的大部分功能
    • 虽然没有 Rust 和 C++ 所具有的复杂功能集和语法,但提供了像 Go 一样简单优先的开发环境。
  2. 完整的、功能齐全的工具链:
    • 用户可以使用 Zig 来创建、开发、测试和构建程序/库,而无需第三方构建工具
    • Zig 还支持交叉编译 C/C++ 项目。
  3. 性能、安全性
    • Zig 允许对内存分配和释放进行细粒度控制,有助于减少内存泄漏
    • 提供四种构建模式(Debug, ReleaseSafe, ReleaseFast, ReleaseSmall),开发人员可以根据自己的性能和安全要求使用。例如,使用 ReleaseSafe 模式生成带有运行时安全检查的优化二进制文件
    • Zig 官方文档声称,Zig 的性能比 C 更快。
  4. 活跃的社区:Zig 拥有一个活跃且热情的社区,提供了大量的文档、教程和开源项目,以及频繁的更新和改进。

v0.12.0 新特性

重新设计 Autodoc 的工作原理

  • zig 删除了之前的(实验性的)Autodoc 实现,并用新的 Autodoc 实现替代。
  • 新的 Autodoc 设计让 Autodoc 在实现和构建工件方面都更加简单,且生成的 Web 应用程序总文件大小也大幅度降低
  • Autodoc 新增 嵌入式源列表搜索文档评论错误集视图等新功能

语法变更

  1. 避免不必要的 var,当局部变量声明为 var 时会发出错误提示
  2. 对结果位置语义 (RLS) 增强
  3. 引入了新语法来允许解构可索引聚合:即元组、向量和数组。
  4. 命名空间类型等效
  5. 彻底修改了编译器的 comptime 内存的内部表示
  6. 删除第一个参数以支持使用结果类型
  7. 禁止函数类型对齐
  8. @errSetCast 函数替换为 @errorCast
  9. @fabs 函数替换为 @abs

各类标准库变更

构建系统变更

  • 该项变更包括 声明可选的系统库集成、系统帮助部分集成、使用系统集成选项 等支持。

详情请参考 官方关于 0.12

常见用法

运行 Zig 代码:

zig run hello.zig

编译当前目录下的项目:

zig build

使用案例:

在这里插入图片描述

竞品和相关项目

  1. Rust:Rust 是一种由 Mozilla Research 开发的系统级编程语言,专注于安全性、并发性和性能。Rust 具备现代编程语言的特性和优势,被广泛应用于网络服务、嵌入式系统和密集计算等领域。
  2. C/C++:作为传统的系统编程语言,C 和 C++ 仍然是 Zig 的竞争对手。尽管它们在安全性和易用性方面不如 Zig,但它们在广泛的工业应用和庞大的生态系统中具有优势。
  3. Nim:Nim 是一种静态类型编译系统编程语言。它结合了 Python、Ada 和 Modula 等成熟语言的成功概念。

进一步阅读

  • Zig 源代码 - Zig 项目的源代码托管在 GitHub,你可以在这里找到最新版本的 Zig 和参与社区贡献。
  • Zig 官方网站 - 学习和使用 Zig 的官方网站,提供了 Zig 的文档、教程和社区资源。
  • zig 模块 - x-cmd 的 zig 模块,帮助用户更方便使用 zig。

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

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

相关文章

OpenCV基本图像处理操作(九)——特征匹配

Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法,经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括: 特征提取&#xff…

VOC2012数据集免费获取

你是否遇到过如下情况: 使用官方网站下载数据集,emmm这效率 我放到网盘中了,有需要的自取 https://pan.quark.cn/s/f8b457086b6c

1.为什么选择Vue框架

参考:百战程序员 为什么选择Vue框架 Vue是什么? 渐进式 JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架 为什么要学习Vue Vue是目前前端最火的框架之一Vue是目前企业技术栈中要求的知识点Vue可以…

开源贡献代码之​探索一下CPython

探索一下Cython 本篇文章将会围绕最近给Apache提的一个feature为背景,展开讲讲CPython遇到的问题,以及尝试自己从0写一个库出来,代码也已经放星球了,感兴趣的同学可以去下载学习。 0.背景 最近在给apache arrow提的一个feature因为…

Unity UGUI透明区域点击无效

是这样的&#xff0c;我有一张图&#xff0c;客户给的是1920*1080&#xff0c;但只有中间部分是按钮&#xff0c;是有效像素。为了让空白区域点击无效。需要设置如下 并且加上下面这句 this.GetComponent<Image>().alphaHitTestMinimumThreshold 0.1f;

设计模式学习笔记 - 开源实战三(中):剖析Google Guava中用到的设计模式

概述 上篇文章&#xff0c;我通过 Google Guava 这样一个优秀的开源类库&#xff0c;讲解了如何在业务开发中&#xff0c;发现跟业务无关、可以复用的通用功能模块&#xff0c;并将它们抽离出来&#xff0c;设计成独立的类库、框架或功能组件。 本章再来学习下&#xff0c;Go…

Vue3——组件基础

组件基础 1. 组件定义与使用 1.1 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>组件基础&l…

力扣-LCP 02.分式化简

题解&#xff1a; class Solution:def fraction(self, cont: List[int]) -> List[int]:# 初始化分子和分母为 0 和 1n, m 0, 1# 从最后一个元素开始遍历 cont 列表for a in cont[::-1]:# 更新分子和分母&#xff0c;分别为 m 和 (m * a n)n, m m, (m * a n)# 返回最终的…

程序员如何应对久坐带来的不良影响

久坐是程序员工作中常见的问题&#xff0c;它可能对身体健康产生多种负面影响。为了应对这些影响&#xff0c;程序员可以采取以下措施&#xff1a; 定时休息&#xff1a;每隔45分钟至1小时&#xff0c;起身活动5-10分钟。这可以帮助缓解长时间坐姿带来的身体压力&#xff0c;促…

YOLOv9改进策略 | 添加注意力篇 | 挤压和激励单元SENetV2助力YOLOv9细节涨点(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是SENetV2&#xff0c;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何一个模型相结合的模块(可以看作是一种通道型的注意力机制但是相对于SENetV1来说…

Aws Nat Gateway

要点 NAT网关要能访问外网&#xff0c;所以需要部署在有互联网网关的Public子网中。 关键&#xff1a; NAT网关创建是选择子网&#xff0c;一定要选择公有子网&#xff08;有互联网网关子网&#xff09; 特别注意&#xff1a; 新建nat网关的时候&#xff0c;选择的子网一定…

Ubuntu无法安装向日癸15.2.0.63062_amd64.deb最新版

Ubuntu安装向日葵远程控制 安装包下载 安装方式 方式一&#xff1a;运行安装包安装 方式二&#xff1a;终端命令安装 通过以下教程可以快速的安装向日葵远程控制&#xff0c;本教程适用于Ubuntu18.04/20.04/22.04 安装包下载 进入向日葵远程控制下载官网下载向日葵远程控制Lin…

使用Python+opencv实现自动扫雷

大家好&#xff0c;相信许多人很早就知道有扫雷这么一款经典的游戏&#xff0c;更是有不少人曾听说过中国雷圣&#xff0c;也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经典游戏&#xff0c;从过去到现在依然都有着它独特的…

Spark-机器学习(3)回归学习之线性回归

在之前的文章中&#xff0c;我们了解我们的机器学习&#xff0c;了解我们spark机器学习中的特征提取和我们的tf-idf&#xff0c;word2vec算法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你…

安居水站:水站经营秘籍:年入30万不是梦。水站创业指南。

在这个快节奏的社会里&#xff0c;初创企业家们总是在寻找一条明路&#xff0c;以在竞争激烈的市场中立足。为了帮助他们更好地实现这一目标&#xff0c;我根据经验决定制定一份水站经营指导手册。这份手册将详细阐述如何从零起步&#xff0c;如何运营&#xff0c;如何进行市场…

开源博客项目Blog .NET Core源码学习(16:App.Hosting项目结构分析-4)

本文学习并分析App.Hosting项目中前台页面的文章专栏页面和文章详情页面。< 文章专栏页面 文章专栏页面总体上为左右布局&#xff0c;左侧显示文章列表&#xff0c;右侧从上向下为关键词搜索、分类导航、热门文章等内容。整个页面使用了layui中的面包屑导航、表单、模版、流…

【C++初阶】List使用特性及其模拟实现

1. list的介绍及使用 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前…

利用OpenCV4.9制作自己的线性滤波器!

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9使用 inRange 的阈值操作 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 f…

Android JetPack Compose+Room----实现搜索记录功能

文章目录 需求概述功能展示实现搜索功能使用的技术1.Android Jetpack room2.Android JetPack Compose 代码实现编写搜索界面接入Room实现搜索功能的管理引入依赖定义包结构定义操作表的Dao类定义数据库的基础配置定义数据库的Dao管理类使用数据库升级 源码地址 需求概述 搜索功…

java:Java中的抽象类

什么是抽象类&#xff1a; 我们知道&#xff0c;类用来模拟现实的事物&#xff0c;一个类模拟一类事物&#xff0c;某个类的一个实例化对象可以模拟某个属于该类的具体事物。类中描绘了该类所有对象的共同的特性&#xff0c;当一个类中给出的信息足够全面时候&#xff0c;我们就…