By Tag: ziglang
Chapter 4 - 使用C工作 - 了解Zig编程语言如何利用C代码。本教程包括C数据类型、FFI、用C构建、translate-c等内容!
title: Chapter 4 - 使用C工作 weight: 5 date: 2023-04-28 18:00:00 description: Chapter 4 - 了解Zig编程语言如何利用C代码。本教程包括C数据类型、FFI、用C构建、translate-c等内容! Zig的设计从一开始就把C语言的互操作作为一个首要功能。在这一节中,我们将介绍如何工作. ABI ABI *(application binary interface)*是一种标准,与以下方面有关: 类型的内存布局(即一个类型的大小、对齐方式、偏移量和它的字段的布局) 符号的内存命名(例如,名称混用) 函数的调用约定(即函数调用在二进制水平上如何工作) 通过定义这些规则并且不破坏它们,ABI被认为是稳定的,这可以被用来,例如,可靠地连接多个库、可执行文件或单独编译的对象(可能在不同的机器上,或使用不同的编译器)。这允许FFI *(外部函数接口)*的发生,我们可以在编程语言之间共享代码。 Zig原生支持用于 外部 事物的C ABI;使用哪种C ABI取决于你所编译的目标(如CPU架构、操作系统)。这允许与不是用Zig编写的代码进行近乎无缝的互操作;使用C ABI是编程语言中的标准。 Zig内部不使用ABI,这意味着在需要可复制和定义的二进制级别行为时,代码应明确地符合C ABI。 C原始类型 Zig提供了特殊的c_前缀类型,以符合C ABI的要求。这些类型没有固定的大小,而是根据所使用的ABI来改变大小. TypeC EquivalentMinimum Size (bits) c_shortshort16 c_ushortunsigned short16 c_intint16 c_uintunsigned int16 c_longlong32 c_ulongunsigned long32 c_longlonglong long64 c_ulonglongunsigned longlong64 c_longdoublelong doubleN/A c_voidvoidN/A 注意:C的void(和Zig的c_void)有一个未知的非零大小。Zig的void是一个真正的零尺寸类型. 调用约定 调用约定描述了函数的调用方式。这包括如何向函数提供参数(即它们的位置--在寄存器中还是在堆栈中,以及如何),以及如何接收返回值。 在Zig中,callconv 属性可以被赋予给一个函数。可用的调用约定可以在std.biltin.CallingConvention中找到。这里我们使用了cdecl的调用约定 . fn add(a: u32, b: u32) callconv(.C) u32 { return a + b; } 当你从C语言中调用Zig时,用C语言的调用惯例来标记你的函数是至关重要的. 外部结构 Zig中的普通结构没有定义布局;当你希望结构的布局与C ABI的布局相匹配时,就需要extern结构。 我们来创建一个extern结构。这个测试应该在x86_64和gnuABI下运行,可以用-target x86_64-native-gnu完成. const expect = @import(std).testing.expect; const Data = extern struct { a: i32,...
Chapter 0 ziglang 入门 Ziglearn --Zig编程语言指南/教程。在这里安装并开始使用ziglang
title: "Chapter 0 - 入门" weight: 1 description: "Ziglearn --Zig编程语言指南/教程。在这里安装并开始使用ziglang." 欢迎 Zig 是一种通用编程语言和工具链,用于— 维护健壮、 优化 和 可重用 的软件。 警告:最新的主要版本是0.10.1 - Zig仍然是1.0之前的版本;仍然不建议在生产中使用,你可能会遇到编译器的错误。. 遵循本指南,我们假设你有: 先前的编程经验 对低级别的编程概念有一定了解 了解一种语言,如C、C++、Rust、Go、Pascal或类似的语言,将有助于遵循本指南。你应该有一个编辑器、终端和互联网连接。本指南是非官方的,与Zig软件基金会没有关系,旨在从头开始按顺序阅读. 安装 本指南假定你使用的是Zig的主版本,而不是最新的主要版本,这意味着从网站上下载二进制文件或从源代码编译;你的软件包管理器中的Zig版本可能已经过时。本指南不支持Zig 0.10.1。 从以下网站下载并提取Zig的预建主二进制文件: https://ziglang.org/download/ 增加Zig配置 path linux, macos, bsd 将Zig二进制文件的位置添加到你的PATH环境变量中。在安装时,将export PATH=$PATH:~/zig或类似的内容添加到你的/etc/profile(全系统)或$HOME/.profile。如果这些变化没有立即应用,请从你的shell中运行这一行。 windows a) 系统级别 (admin powershell) [Environment]::SetEnvironmentVariable( "Path", [Environment]::GetEnvironmentVariable("Path", "Machine") + ";C:\your-path\zig-windows-x86_64-your-version", "Machine" ) b) 用户级 (powershell) [Environment]::SetEnvironmentVariable( "Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\your-path\zig-windows-x86_64-your-version", "User" ) 关闭你的终端并创建一个新的终端. 用 zig version验证你安装的zig. 输出结果应该是这样的 $ zig version 0.11.0-dev.2777+b95cdf0ae (可选,第三方)为了在你的编辑器中进行补全和去定义,请安装Zig语言服务器,从: https://github.com/zigtools/zls/ (可选) 加入 Zig community. Hello World 创建...
Chapter 0 ziglang 入门 Ziglearn --Zig编程语言指南/教程。在这里安装并开始使用ziglang
欢迎 Zig 是一种通用编程语言和工具链,用于— 维护健壮、 优化 和 可重用 的软件。 警告:最新的主要版本是0.10.1 - Zig仍然是1.0之前的版本;仍然不建议在生产中使用,你可能会遇到编译器的错误。. 遵循本指南,我们假设你有: 先前的编程经验 对低级别的编程概念有一定了解 了解一种语言,如C、C++、Rust、Go、Pascal或类似的语言,将有助于遵循本指南。你应该有一个编辑器、终端和互联网连接。本指南是非官方的,与Zig软件基金会没有关系,旨在从头开始按顺序阅读. 安装 本指南假定你使用的是Zig的主版本,而不是最新的主要版本,这意味着从网站上下载二进制文件或从源代码编译;你的软件包管理器中的Zig版本可能已经过时。本指南不支持Zig 0.10.1。 从以下网站下载并提取Zig的预建主二进制文件: https://ziglang.org/download/ 增加Zig配置 path linux, macos, bsd 将Zig二进制文件的位置添加到你的PATH环境变量中。在安装时,将export PATH=$PATH:~/zig或类似的内容添加到你的/etc/profile(全系统)或$HOME/.profile。如果这些变化没有立即应用,请从你的shell中运行这一行。 windows a) 系统级别 (admin powershell) [Environment]::SetEnvironmentVariable( "Path", [Environment]::GetEnvironmentVariable("Path", "Machine") + ";C:\your-path\zig-windows-x86_64-your-version", "Machine" ) b) 用户级 (powershell) [Environment]::SetEnvironmentVariable( "Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\your-path\zig-windows-x86_64-your-version", "User" ) 关闭你的终端并创建一个新的终端. 用 zig version验证你安装的zig. 输出结果应该是这样的 $ zig version 0.11.0-dev.2777+b95cdf0ae (可选,第三方)为了在你的编辑器中进行补全和去定义,请安装Zig语言服务器,从: https://github.com/zigtools/zls/ (可选) 加入 Zig community. Hello World 创建 main.zig, 其内容: const std = @import("std"); pub fn main()...
Chapter 3 - 构建系统 - Ziglang构建系统详解
title: Chapter 3 - 构建系统 weight: 4 date: 2021-02-12 12:49:00 description: Chapter 3 - Ziglang构建系统详解. 构建模式 Zig提供了四种构建模式,其中调试模式是默认的,因为它能产生最短的编译时间。. 运行时安全优化 DebugYesNo ReleaseSafeYesYes, Speed ReleaseSmallNoYes, Size ReleaseFastNoYes, Speed 这些可以在zig run和zig test中启用,参数为-O ReleaseSafe、-O ReleaseSmall和-O ReleaseFast. 建议用户在开发软件时启用运行时安全,尽管它在速度上有小的缺点. 输出一个可执行文件 命令zig build-exe、zig build-lib和zig build-obj可以分别用来输出可执行文件、库和对象。这些命令接收一个源文件和参数。 一些常见的参数: -fsingle-threaded,它断言二进制文件是单线程的。这将把线程安全措施(如互斥)变成无操作。 -fstrip,从二进制文件中删除调试信息。 --dynamic,与zig build-lib一起使用,输出一个动态/共享库。 让我们创建一个小小的hello world。保存为tiny-hello.zig,然后运行zig build-exe .\tiny-hello.zig -O ReleaseSmall -fstrip -fsingle-readed。目前对于x86_64-windows,这将产生一个2.5KiB的可执行文件。 const std = @import(std); pub fn main() void { std.io.getStdOut().writeAll( Hello World!, ) catch unreachable; } 交叉编译 默认情况下,Zig将为你的CPU和操作系统的组合进行编译。这可以通过-target来重写。让我们把我们的小hello世界编译到64位的arm linux平台上. zig build-exe .\tiny-hello.zig...