经过几个月的艰苦努力,Zigar 的 0.15.3 版本终于准备就绪了。本次更新的主要内容是 php-zigar,这是一个允许你在 PHP 中使用 Zig 代码的 PHP 扩展。
假设你需要使用 CityHash 算法生成数据签名。你在 Zig 中编写了以下函数:
const std = @import("std");
const CityHash64 = std.hash.cityhash.CityHash64;
const Options = struct {
seed: ?u64 = null,
seeds: ?[2]u64 = null,
uppercase: bool = false,
};
pub fn hash(allocator: std.mem.Allocator, data: []const u8, options: Options) ![]const u8 {
const value = if (options.seeds) |seeds|
CityHash64.hashWithSeeds(data, seeds[0], seeds[1])
else if (options.seed) |seed|
CityHash64.hashWithSeed(data, seed)
else
CityHash64.hash(data);
return if (options.uppercase)
try std.fmt.allocPrint(allocator, "{X}", .{value})
else
try std.fmt.allocPrint(allocator, "{x}", .{value});
}
在 PHP 端,你可以这样使用它:
<?php
$m = zigar_use(__DIR__ . '/../zig/hash.zig');
echo $m->hash("Hello world"), "\n";
echo $m->hash("Hello world", uppercase: true), "\n";
echo $m->hash("Hello world", uppercase: true, seed: 1234), "\n";
echo $m->hash("Hello world", uppercase: true, seeds: [ 1234, 5678 ]), "\n";
该函数会自动接收一个分配器(allocator),它从 PHP 的内存管理器获取内存。当返回值超出作用域时,内存会被自动释放。
命名参数被用作最后一个参数的结构体字段初始化器。这种安排非常符合 Zig 中的常见做法。
该扩展使得在 PHP 项目中使用原生代码变得超级简单。由于 Zig 是一个交叉编译器,最终的部署也很简单。一个在 Windows 上工作的 PHP 程序员可以在自己的电脑上为 Linux 服务器构建扩展和他的 Zig 模块。他也可以为隔壁坚持使用 Mac 的前端 UI 同事做同样的事情。无需折腾虚拟机,无需折腾 Microsoft Visual Studio CE。只需安装 Zig,世界就是你的!
该扩展专为 PHP 8.1 及更高版本设计。我已经在 Linux (x64)、MacOS (x64 和 aarch64) 以及 Windows (x64) 上对其进行了测试。它旨在与 0.15.2 版本的 Zig 编译器配合使用。向 0.16 版本的迁移已经开始,预计在夏末完成。
如果你想尝试一下,我写了一个简单的教程,涵盖了该扩展的主要功能。
加入我们
Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:
- 供稿,分享自己使用 Zig 的心得
- 改进 ZigCC 组织下的开源项目
- 加入微信群、QQ 群、QQ 频道、Telegram 群组、Google Groups 与更多 Zig 爱好者交流
经过几个月的艰苦努力,Zigar 的 0.15.3 版本终于准备就绪了。本次更新的主要内容是
php-zigar,这是一个允许你在 PHP 中使用 Zig 代码的 PHP 扩展。假设你需要使用 CityHash 算法生成数据签名。你在 Zig 中编写了以下函数:
在 PHP 端,你可以这样使用它:
该函数会自动接收一个分配器(allocator),它从 PHP 的内存管理器获取内存。当返回值超出作用域时,内存会被自动释放。
命名参数被用作最后一个参数的结构体字段初始化器。这种安排非常符合 Zig 中的常见做法。
该扩展使得在 PHP 项目中使用原生代码变得超级简单。由于 Zig 是一个交叉编译器,最终的部署也很简单。一个在 Windows 上工作的 PHP 程序员可以在自己的电脑上为 Linux 服务器构建扩展和他的 Zig 模块。他也可以为隔壁坚持使用 Mac 的前端 UI 同事做同样的事情。无需折腾虚拟机,无需折腾 Microsoft Visual Studio CE。只需安装 Zig,世界就是你的!
该扩展专为 PHP 8.1 及更高版本设计。我已经在 Linux (x64)、MacOS (x64 和 aarch64) 以及 Windows (x64) 上对其进行了测试。它旨在与 0.15.2 版本的 Zig 编译器配合使用。向 0.16 版本的迁移已经开始,预计在夏末完成。
如果你想尝试一下,我写了一个简单的教程,涵盖了该扩展的主要功能。
加入我们
Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来: