मैं बस कुछ अलग विकसित करना चाहता हूं। क्या पर? गेम, ग्राफ़िक्स, ध्वनि प्रसंस्करण?
निश्चित रूप से आप कहेंगे जंग! हाँ, रस्ट में बहुत सारी चीज़ें कीं। लेकिन शायद सी?
ओह...नहीं...
विभाजन दोष याद है?
आप निर्भरता का प्रबंधन कैसे करेंगे?
ठीक है, तो ZIG में कुछ C लाइब्रेरी का उपयोग करने का प्रयास करें! यह कितना कठिन होगा? चलो देखते हैं।
रेलिब का उपयोग करके कुछ सरल ऐप लिखने का प्रयास करें।
$ mkdir ray_test_zig $ cd ray_test_zig $ zig init-exe
एक प्रोजेक्ट मिला। चलाने का प्रयास करें?
$ zig build run
हां यह काम कर रहा है।
हमें किसी तरह raylib लाने और शामिल करने की आवश्यकता है।
ज़िग निर्भरता लाने के लिए ज़ोन का उपयोग करता है। क्या यह सी पुस्तकालयों के साथ काम करता है? पता लगाना!
हमें यह बताना होगा कि परिवाद कहां है! यह रहा:
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", }, }, }
परियोजना बनाने का प्रयास करें?
$ zig build
यह क्या है?
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",
ठीक है, ज़ोन को हैश की उम्मीद है, अगर कोई कंप्यूटर को हैक करने की कोशिश करेगा। फिर एक बार:
.{ .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", }, }, }
एक बार फिर प्रयास करें:
$ zig build
यह काम करता है! वाह! इतना ही?
नहीं! हमें ज़िग को निर्माण के दौरान रेलिब को शामिल करने के लिए कहना होगा!
अब हम build.zig संपादित करेंगे। पंक्ति ~30 के ठीक ऊपर हमारे पास b.installArtifact(exe);
है
उस पंक्ति से पहले हमें जोड़ना होगा:
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize, }); exe.installLibraryHeaders(raylib.artifact("raylib")); exe.linkLibrary(raylib.artifact("raylib"));
हम ज़िग को बता रहे हैं कि हेडर फ़ाइलें कहां हैं और निष्पादन योग्य को रेलिब के साथ लिंक करना है।
क्या यह काम करता है? की जाँच करें!
$ zig build
हे भगवान! ऐसा लगता है कि रायलिब के साथ कुछ हुआ था। यह संकलित है?
आइए एक सरल उदाहरण को raylib से zig में पोर्ट करें।
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
त्रुटियाँ नहीं? महान!
$ zig build run
हमें रेलिब विंडो मिली!
जैसा कि आप देख सकते हैं! कोड की बस एक लाइन और रेलिब नेटिव लिब की तरह काम कर रहा है!
हां! जिग कैन सी!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3