"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Zig! Pouvez-vous C?

Zig! Pouvez-vous C?

Publié le 2024-08-05
Parcourir:347

Zig! Can you C?

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... Non...
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écouvrir!

Nous devons indiquer où se trouve la bibliothèque ! C'est ici:

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",
        },
    },
}

Essayer de créer un projet ?

$ zig build

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",
        },
    },
}

Réessayez :

$ 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 ? Allons vérifier!

$ zig build

OH MON DIEU! 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!

Déclaration de sortie Cet article est reproduit sur : https://dev.to/fazibear/zig-can-you-c-3adl En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3