インストール
SHxxxxxxxxxx
1brew install zig
Output
プロジェクトの作成
SHxxxxxxxxxx
1mkdir zig-playground
2cd zig-playground
3zig init-exe
Output
build.zig
ファイルを使ってビルドする。自分でビルドコマンドを実行してもよい。
実行
SHxxxxxxxxxx
1zig run src/main.zig
2# もしくは
3zig build run
Output
ハローワールド
ZIGxxxxxxxxxx
1const std = @import("std");
2
3pub fn main() anyerror!void {
4std.debug.print("Hello, {s}!\n", .{"World"});
5}
Output
クイックソート
ZIGxxxxxxxxxx
1pub fn quicksort() void {
2var array = [_]i32{ 4, 6, 1, 3, 9, 2, 1 };
3
4for (array) |_, i| {
5var j: usize = 0;
6while (j < array.len - i - 1) : (j += 1) {
7if (array[j] > array[j + 1]) {
8// swap
9const temp = array[j];
10array[j] = array[j+1];
11array[j+1] = temp;
12}
13}
14}
15
16// 出力
17for (array) | v | {
18std.debug.print("{d}\n", .{ v });
19}
20}
Output
wasm
ZIGxxxxxxxxxx
1export fn add(a: i32, b: i32) i32 {
2return a + b;
3}
Output
コンパイルする。
SHxxxxxxxxxx
1zig build-lib src/wasm.zig -target wasm32-freestanding-musl -dynamic -O ReleaseSmall --export=add
Output
HTMLから読み込む。
HTMLxxxxxxxxxx
1<!DOCTYPE html>
2<html lang="ja">
3<head>
4<meta charset="UTF-8">
5<meta http-equiv="X-UA-Compatible" content="IE=edge">
6<meta name="viewport" content="width=device-width, initial-scale=1.0">
7<title>WebAssembly</title>
8</head>
9<body>
10<script>
11WebAssembly.instantiateStreaming(fetch('wasm.wasm'))
12.then(obj => {
13const res = obj.instance.exports.add(1, 2);
14console.log(res)
15});
16</script>
17</body>
18</html>
Output
wasmの中身。
WASMxxxxxxxxxx
1(module
2(memory $memory (;0;) (export "memory") 1)
3(global $global0 (mut i32) (i32.const 65536))
4(func $add (;0;) (export "add") (param $var0 i32) (param $var1 i32) (result i32)
5local.get $var1
6local.get $var0
7i32.add
8)
9)
Output