Maison > développement back-end > C++ > Zig! Pouvez-vous C?

Zig! Pouvez-vous C?

WBOY
Libérer: 2024-07-17 03:48:39
original
570 Les gens l'ont consulté

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... 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
Copier après la connexion

J'ai un projet. Essayez de courir ?

$ zig build run
Copier après la connexion
Copier après la connexion

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",
        },
    },
}
Copier après la connexion

Essayez de construire un projet ?

$ zig build
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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",
Copier après la connexion

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",
        },
    },
}
Copier après la connexion

Essayez encore :

$ zig build
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ç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"));

Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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();
    }
}
Copier après la connexion
$ zig build
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Aucune erreur ? Super !

$ zig build run
Copier après la connexion
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal