Je veux juste développer quelque chose de différent. Mais quoi ? Jeu, graphisme, traitement du son ?
Vous direz sûrement Rust ! Oui, j'ai fait beaucoup de choses dans Rust. Mais peut-être C ?
Ohhh... Noooon...
Vous vous souvenez d'un défaut de segmentation ?
Comment allez-vous gérer les dépendances ?
OK, alors essayez d'utiliser une bibliothèque C dans ZIG ! À quel point ce sera dur ? Voyons.
Essayez d'écrire une application simple en utilisant Raylib.
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
J'ai un projet. Essayez de courir ?
$ zig build run
Oui, ça marche.
Nous devons récupérer et inclure Raylib d'une manière ou d'une autre.
Zig utilise zon pour récupérer les dépendances. Est-ce que ça marche avec les bibliothèques C ? Découvrez-le !
Nous devons indiquer où se trouve la bibliothèque ! Le voici :
Créez le fichier build.zig.zon.
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", }, }, }
Essayez de construire un projet ?
$ zig build
Qu'est-ce que c'est ?
Fetch Packages... raylib... ./ray_test_zig/build.zig.zon:7:20: error: url field is missing corresponding hash field .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: expected .hash = "1220c28847ca8e8756734ae84355802b764c9d9cf4de057dbc6fc2b15c56e726f27b",
Ok, zon attend un hachage, juste au cas où quelqu'un essaierait de pirater l'ordinateur. Encore une fois :
.{ .name = "ray_test_zig", .version = "0.0.1", .dependencies = .{ .raylib = .{ .url = "https://github.com/raysan5/raylib/archive/refs/tags/5.0.tar.gz", .hash = "1220c28847ca8e8756734ae84355802b764c9d9cf4de057dbc6fc2b15c56e726f27b", }, }, }
Essayez encore :
$ zig build
Ça marche ! Waouh ! C'est ça ?
Non ! Nous devons dire à zig d'inclure Raylib lors de la construction !
Nous allons maintenant éditer build.zig. Juste au-dessus de la ligne ~30, nous avons b.installArtifact(exe);
Avant cette ligne, nous devons ajouter :
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize, }); exe.installLibraryHeaders(raylib.artifact("raylib")); exe.linkLibrary(raylib.artifact("raylib"));
Nous indiquons à zig où se trouvent les fichiers d'en-tête et lions l'exécutable avec Raylib.
Est-ce que ça marche ? Vérifions !
$ zig build
OMG ! On dirait que quelque chose s'est produit avec Raylib. C'est compilé ?
Portons un exemple simple de Raylib vers zig.
Dans le src/main.zig :
const std = @import("std"); const ray = @cImport({ @cInclude("raylib.h"); }); pub fn main() !void { ray.InitWindow(800, 450, "Hey ZIG"); defer ray.CloseWindow(); while (!ray.WindowShouldClose()) { ray.BeginDrawing(); ray.ClearBackground(ray.RAYWHITE); ray.DrawText("Congrats! You created your first window!", 190, 200, 20, ray.LIGHTGRAY); ray.EndDrawing(); } }
$ zig build
Aucune erreur ? Super !
$ zig build run
Nous avons la fenêtre Raylib !
Comme vous pouvez le voir! Une seule ligne de code et Raylib fonctionne comme une bibliothèque native !
Alors oui ! Zig peut C !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!