زيج (لغة برمجة)
Zig هي لغة برمجة أنظمة مصممة لتكون تحسينًا عامًا للغة البرمجة C. [ 11 ] وهي برنامج مجاني ومفتوح المصدر ، صادر بموجب ترخيص MIT على Codeberg ، وهي منصة لمشاركة شفرة المصدر . [ 12 ]
تختلف لغة Zig عن لغة C في جوانب التحكم في التدفق ، واستدعاء الدوال ، واستيراد المكتبات ، وتعريف المتغيرات ، ودعم Unicode . ولا تستخدم Zig وحدات الماكرو أو تعليمات المعالج المسبق . ومن بين الميزات المُقتبسة من اللغات الحديثة إضافة أنواع بيانات البرمجة العامة في وقت الترجمة ، مما يسمح للدوال بالعمل على مجموعة متنوعة من البيانات، بالإضافة إلى مجموعة صغيرة من توجيهات المُترجم الجديدة التي تُتيح الوصول إلى معلومات حول هذه الأنواع باستخدام الانعكاس . [ 13 ] تتطلب Zig إدارة يدوية للذاكرة . [ 13 ] تشمل ميزات البرمجة منخفضة المستوى الهياكل المُعبأة، والأعداد الصحيحة ذات العرض العشوائي [ 14 ] ، وأنواع المؤشرات المتعددة . [ 15 ]
صُمم برنامج Zig بواسطة أندرو كيلي، وأُعلن عنه لأول مرة في عام 2016. [ 1 ] يتم تمويل تطويره من قِبل مؤسسة Zig Software Foundation (ZSF) التي تتلقى رعاية من الشركات بالإضافة إلى التبرعات الشخصية. [ 16 ] [ 17 ]
لغة
الأهداف
الهدف الأساسي من لغة Zig هو تقديم حل أفضل لأنواع المهام التي تُحل حاليًا باستخدام لغة C. ومن أهم الاعتبارات في هذا الصدد سهولة القراءة؛ إذ تسعى Zig إلى استخدام المفاهيم والقواعد النحوية الموجودة قدر الإمكان، متجنبةً إضافة قواعد نحوية مختلفة للمفاهيم المتشابهة. علاوة على ذلك، تهدف Zig إلى أن تكون لغة مصممة لتحقيق "المتانة، والكفاءة، وسهولة الصيانة". وتُعدّ القواعد النحوية البسيطة والمختصرة جزءًا مهمًا من سهولة الصيانة، حيث يتمثل أحد أهداف اللغة في تمكين القائمين على الصيانة من تصحيح أخطاء التعليمات البرمجية المكتوبة بلغة Zig دون الحاجة إلى تعلم تعقيدات لغة قد لا يكونون على دراية بها. [ 18 ] حتى مع هذه التغييرات، يمكن ترجمة Zig إلى تعليمات برمجية بلغة C موجودة أو ترجمتها إليها؛ إذ يمكن تضمين ملفات رأس C في مشروع Zig واستدعاء وظائفها، كما يمكن ربط تعليمات Zig البرمجية بمشاريع C عن طريق تضمين ملفات الرأس التي أنشأها المُترجم. [ 19 ]
تتم معالجة الأخطاء من خلال أنواع الأخطاء، ويمكن معالجتها باستخدام catchأو try. يتم تحقيق الأنواع العامة من خلال توليد التعليمات البرمجية في وقت الترجمة، واستيعاب شكل من أشكال الكتابة الديناميكية باستخدام comptimeالتوجيه .
إدارة الذاكرة
تتبع عملية تخصيص الذاكرة في مكتبة Zig القياسية اصطلاحًا يقضي بأن يتم التعامل مع التخصيص من خلال structوصف الإجراء، بدلاً من استدعاء دوال إدارة الذاكرة في مكتبة libc . على سبيل المثال، في لغة C، إذا أراد شخص ما كتابة دالة تُنشئ سلسلة نصية تحتوي على نسخ متعددة من سلسلة نصية أخرى، فقد تبدو الدالة كما يلي:
const char * repeat ( const char * original , size_t times );في الكود، تقوم الدالة بفحص حجم المتغير originalثم timesتخصيص مساحة ذاكرة له باستخدام دالة malloc. هذا التخصيص غير مرئي للدوال التي تستدعيه؛ فإذا فشلت هذه الدوال في تحرير الذاكرة لاحقًا، سيحدث تسريب. في Zig، يمكن معالجة هذا باستخدام دالة مثل:
const Allocator = std.mem.Allocator ;fn repeat ( allocator : Allocator , original : [] const u8 , times : usize ) Allocator . Error ! [] const u8 ;في هذا الكود، allocatorيُمرَّر إلى المتغير بنية بيانات تُحدد الكود الذي يجب أن يُنفِّذ عملية تخصيص الذاكرة، repeatوتُعيد الدالة إما السلسلة النصية الناتجة أو، باستخدام النوع الاختياري المُشار إليه !، خطأً من نوع Allocator.Error. من خلال التعبير المباشر عن مُخصِّص الذاكرة كمدخل، لا يتم "إخفاء" تخصيص الذاكرة داخل دالة أخرى، بل يتم عرضه دائمًا لواجهة برمجة التطبيقات (API) بواسطة الدالة التي تستدعي تخصيص الذاكرة في النهاية. لا تُجرى أي عمليات تخصيص داخل مكتبة Zig القياسية . علاوة على ذلك، بما أن بنية البيانات يُمكن أن تُشير إلى أي شيء، يُمكن استخدام مُخصِّصات ذاكرة بديلة، حتى تلك المكتوبة في البرنامج نفسه. هذا يُتيح، على سبيل المثال، مُخصِّصات ذاكرة للكائنات الصغيرة التي لا تستخدم دوال نظام التشغيل التي تُخصِّص عادةً صفحة ذاكرة كاملة . [ 20 ]
تُعدّ الأنواع الاختيارية مثالًا على ميزة لغوية توفر وظائف عامة مع الحفاظ على بساطتها وعموميتها. لا يقتصر استخدامها على حل مشكلات المؤشر الفارغ، بل هي مفيدة أيضًا لأي نوع من القيم حيث يكون "لا توجد قيمة" إجابة مناسبة. لنفترض دالة countTheNumberOfUsersتُرجع عددًا صحيحًا، ومتغيرًا صحيحًا theCountedUsersيحتوي على النتيجة. في العديد من اللغات، يُوضع رقم سحريtheCountedUsers في المتغير للإشارة إلى أنه countTheNumberOfUsersلم يتم استدعاء الدالة بعد، بينما تقوم العديد من التطبيقات بتعيينه إلى الصفر. في لغة Zig، يمكن تنفيذ ذلك باستخدام دالة تُعيّن قيمة المتغير إلى قيمة واضحة تُشير إلى "عدم استدعائها". [ 20 ]vartheCountedUsers:?i32=null
من الميزات العامة الأخرى في Zig التي تُساعد أيضًا في إدارة مشاكل الذاكرة مفهوم "تأجيل التنفيذ" defer، الذي يُحدد تنفيذ جزء من التعليمات البرمجية في نهاية نطاق معين بغض النظر عما يحدث، بما في ذلك أخطاء وقت التشغيل المحتملة. إذا قامت دالة معينة بتخصيص بعض الذاكرة ثم تخلصت منها عند اكتمال العملية، فيمكن إضافة سطر لتأجيل التنفيذ freeلضمان تحريرها بغض النظر عما يحدث. [ 20 ]
تتجنب مكتبة Zig القياسية عمليات التخصيص المخفية. لا تتم إدارة التخصيص في اللغة مباشرةً. بدلاً من ذلك، يتم الوصول إلى الكومة بشكل صريح عبر المكتبة القياسية . [ 21 ]
التفاعل المباشر مع C
يشجع Zig على اتباع نهج تدريجي في قابلية النقل، يجمع بين كود Zig الجديد وكود C الحالي. ولتحقيق ذلك، يهدف إلى جعل التفاعل مع مكتبات C الحالية سلسًا قدر الإمكان. يستورد Zig مكتباته الخاصة باستخدام التوجيه @import، عادةً على النحو التالي:
const std = @import ( "std" );يمكن الآن لرمز Zig الموجود داخل هذا الملف استدعاء وظائف داخل std، على سبيل المثال:
std.debug.print ( "Hello , world! \ n " , .{} ) ;للعمل مع كود C، يتم استبدال @importبـ @cImport:
const c = @cImport ( @cInclude ( "soundio/soundio.h" ));يمكن الآن لبرنامج Zig استدعاء الدوال في مكتبة soundio كما لو كانت جزءًا من برنامج Zig الأصلي. ولأن Zig يستخدم أنواع بيانات جديدة مُعرَّفة بشكل صريح، على عكس أنواع البيانات العامة في لغة C int، floatيتم استخدام عدد قليل من التوجيهات لنقل البيانات بين أنواع C وZig، بما في ذلك التوجيهات الخاصة بـ ` @intCast. @ptrCast[ 20 ] ` .
تم إيقاف دعم Zig 0.16.0 @cImport، وسيتم التعامل مع ترجمة لغة C من الآن فصاعدًا عبر نظام البناء بدلاً من استخدام @cImportاللغة المدمجة، التي تم حذفها من اللغة. بالإضافة إلى ذلك، تم إهمال الإصدار السابق std.Build.Step.TranslateC لصالح استخدام تبعية حزمة translate-c الرسمية بشكل صريح، وهي نفس تنفيذ إصدار خطوة البناء السابق مع خيارات تكوين إضافية. [ 22 ]
ونتيجة لذلك، فإن المثال المستخدم سابقًا لتضمين كود C كما هو مستخدم في إصدارات Zig قبل التغيير يتطلب ترحيلًا، ويجب استيراد أي ملفات رأس C باستخدام نظام البناء، ولترحيل المثال السابق، على سبيل المثال، يلزم إنشاء ملف رأس بسيط مع إضافة أسطر تضمين C القياسية: [ 23 ]
#include <soundio/soundio.h>يجب الإشارة إلى ملف الرأس هذا على النحو التالي داخل build.zigالملف المستخدم بواسطة المشروع (في هذا المثال، تم تسمية الملف c.hفي srcالدليل): [ 22 ]
const Translator = @import ( "translate_c" ). Translator ;const translate_c = b . dependency ( "translate_c" , .{});const translator : Translator = . init ( translate_c , .{ . c_source_file = b . path ( "src/ch" ), . target = target , . optimize = optimize , }); translator . linkSystemLibrary ( "soundio" , .{});const exe = b.addExecutable (.{ .name = " hello - sound" , .root_module = b.createModule (.{ .root_source_file = b.path ( " src / main.zig" ) , .optimize = optimize , .target = target , .imports = & . { . { .name = " c " , .module = translator.mod , } , } , } ), } ) ;بعد تغيير استدعاء وظائف مكتبة soundio، سيتطلب الأمر ما يلي في كود Zig الأصلي:
const c = @import ( "c" );وقت التعويض
باستخدام comptimeالكلمة المفتاحية، يستطيع المبرمج أن يجعل Zig يُقيّم أجزاءً من التعليمات البرمجية صراحةً في وقت الترجمة ، بدلاً من وقت التشغيل . تُمكّن القدرة على تشغيل التعليمات البرمجية في وقت الترجمة Zig من امتلاك وظائف وحدات الماكرو والترجمة الشرطية دون الحاجة إلى لغة معالجة مسبقة منفصلة . [ 24 ]
أثناء وقت الترجمة، تصبح الأنواع عناصر أساسية . وهذا يُمكّن من استخدام الكتابة الديناميكية في وقت الترجمة ، وهي الطريقة التي تُنفّذ بها Zig الأنواع العامة. [ 15 ]
على سبيل المثال، في لغة Zig، يمكن تنفيذ نوع قائمة مرتبطة عامة باستخدام دالة مثل:
fn LinkedList ( comptime T : type ) type ;تأخذ هذه الدالة نوعًا ما T، وتعيد structتعريفًا مخصصًا لقائمة مرتبطة بنوع البيانات هذا.
المترجم
يتضمن Zig أيضًا مُصرّفًا للغتين C وC++، ويمكن استخدامه مع أيٍّ من اللغتين أو كلتيهما باستخدام الأوامر zig cc[ 25 ] ،zig c++ حيث يوفر العديد من ملفات الرأس، بما في ذلك مكتبة C القياسية (libc) ومكتبة C++ القياسية (libcxx) للعديد من المنصات المختلفة. وهذا يسمح لأوامر Zig الفرعية بالعمل كمُصرّفات متقاطعة جاهزة للاستخدام (على غرار Clang ). [ 26 ] [ 27 ]ccc++
تعتبر لغة Zig الترجمة المتقاطعة استخدامًا أساسيًا لها. [ 13 ] وهذا يعني أن أي مترجم Zig قادر على ترجمة ملفات تنفيذية قابلة للتشغيل لأي من منصاته المستهدفة، والتي يبلغ عددها العشرات. لا تقتصر هذه المنصات على الأنظمة الحديثة واسعة الانتشار مثل ARM و x86-64 فحسب ، بل تشمل أيضًا PowerPC و SPARC و MIPS و RISC-V و LoongArch64 وحتى IBM z/Architectures (S390). يمكن لمجموعة الأدوات الترجمة إلى أي من هذه المنصات المستهدفة دون تثبيت برامج إضافية، حيث يتوفر كل الدعم اللازم في النظام الأساسي. [ 20 ] كما يُقدم دعم تجريبي لمنصات أقل شهرة مثل وحدات معالجة الرسومات من AMD و Nvidia أو PlayStation 4 و5 (بدرجات متفاوتة من الدعم).
تتوفر خاصية الترجمة المتقاطعة لأنظمة تشغيل متنوعة (معظمها أنظمة سطح المكتب). وتدعم هذه الخاصية رسميًا (وموثقة)، أنظمة التشغيل الشائعة الشبيهة بنظام يونكس وويندوز، ولكن يمكن إنشاء تطبيقات (بسيطة) لأنظمة أندرويد (باستخدام Android NDK ) أو iOS ، وقد تم ذلك بالفعل .
يستخدم Zig مكتبة LLVM (المكتوبة بلغة C++) كخلفية لتحسين الأداء. منذ الإصدار 0.10، كُتب مُصرّف Zig بلغة برمجة Zig، أي أنه مُصرّف ذاتي الاستضافة . ويرتبط الرابط ذاتي الاستضافة ارتباطًا وثيقًا بالمُصرّف ذاتي الاستضافة.
يُعدّ LLVM الواجهة الخلفية الافتراضية لمعظم الأنظمة المستهدفة، باستثناء SPIR-V و x86-64 [ 28 ] (مع العلم أن هذا متاح حاليًا في وضع التصحيح فقط). كما يدعم Zig واجهته الخلفية ذاتية الاستضافة، والتي يمكن تفعيلها باستخدام ...-fno-llvm
تاريخ
بدأ كيلي بتطوير محطة عمل صوتية رقمية ، [ 29 ] لكنه وجد صعوبة في التوافق بين لغة Go ومكتبات C، واكتشف أن جامع البيانات المهملة يتسبب في تأخيرات صوتية. جرب لغة C++، لكنه وجد أن الأخطاء الصغيرة تؤدي إلى أخطاء في الذاكرة تستغرق أسابيع لإصلاحها. جرب لغة Rust لكنه "واجه صعوبة بالغة في كتابة كود يفي بقواعد Rust"، وقضى شهرًا يحاول جعل عرض الخطوط يعمل. [ 30 ]
تم اختيار اسم Zig باستخدام برنامج نصي يقوم بتوليد مجموعات عشوائية من الأحرف تبدأ بالحرف z . [ 31 ]
تمت إزالة مُجمِّع التمهيد السابق ، المكتوب بلغة Zig وC++ باستخدام LLVM كخلفية، [ 32 ] [ 33 ] والذي يدعم العديد من أهدافه الأصلية، [ 34 ] في الإصدار 0.11. تستخدم الإصدارات الأحدث من Zig إصدار WebAssembly مُجمَّعًا مسبقًا من Zig لتهيئة نفسه.
في 26 نوفمبر 2025، انتقل تطوير Zig من GitHub إلى Codeberg ، مشيرًا إلى تراجع موثوقية GitHub كسبب رئيسي. [ 35 ]
الطرود
تتضمن النسخة 0.11.0 مدير حزم تجريبي ، ولكن لا يوجد مستودع حزم رسمي متاح. بدلاً من ذلك، تُعرَّف الحزمة ببساطة بأنها رابط URL يشير إلى ملف مضغوط ، أو إلى مستودع Git . تحتوي كل حزمة، في الوضع الأمثل، على ملف قياسي (يستخدمه مُصرِّف Zig اصطلاحًا لتجميع الشفرة المصدرية) وملف يحتوي على بيانات وصفية تتضمن اسم الحزمة وإصدارها.build.zigbuild.zig.zon
أمثلة
مرحبا بالعالم
const std = @import ( "std" ); const File = std . Io . File ;pub fn main ( init : std . process . Init ) ! void { _ = try File . stdout (). writeStreamingAll ( init . io , "Hello, World! \n " ); }قائمة مرتبطة عامة
const std = @import ( " std " ) ; const FormatOptions = std.fmt.FormatOptions ; const stdout = std.io.getStdOut ( ) . writer ( ) ;دالة LinkedList ( comptime T : type ) type { return struct { const Self = @This ();pub const Node = struct { next : ?* Node = null , data : T , };أولًا : ؟* العقدة = لا شيء ،pub fn prepend ( list : * Self , new_node : * Node , ) void { new_node . next = list . first ; list . first = new_node ; }دالة عامة للتنسيق ( القائمة : الذات ، تنسيق وقت التجميع : [ ] ثابت u8 ، الخيارات : خيارات التنسيق ، دفق الإخراج : أي نوع ، ) ! فارغ { حاول دفق الإخراج . كتابة الكل ( "( " );var it = list.first ; while ( it ) | node | : ( it = node.next ) { try std.fmt.formatType ( node.data , fmt , options , out_stream , 1 , ) ;try out_stream.writeAll ( " " ) ; }try out_stream.writeAll ( ")" ) ; } } ; }pub fn main () ! void { const ListU32 = LinkedList ( u32 );قائمة فار = ListU32 {}; فار العقدة1 = ListU32 . العقدة { . البيانات = 1 }; فار العقدة2 = ListU32 . العقدة { . البيانات = 2 }; فار العقدة3 = ListU32 . العقدة { . البيانات = 3 };list.prepend ( & node1 ) ; list.prepend ( & node2 ) ; list.prepend ( & node3 ) ;حاول طباعة السطر التالي : `{} \n` ، ` . { list }`. حاول طباعة السطر التالي : `{b} \n`، ` . { list } ` .الناتج:
(3 2 1) (11 10 1)تكرار السلاسل باستخدام مُخصِّص الذاكرة
const std = @import ( " std " ) ; const ArenaAllocator = std.heap.ArenaAllocator ; const Allocator = std.mem.Allocator ;fn repeat ( allocator : Allocator , original : [ ] const u8 , times : usize , ) Allocator.Error ! [ ] u8 { const buffer = try allocator.alloc ( u8 , original.len * times , ) ;for ( 0 .. times ) | i | { std . mem . copyForwards ( u8 , buffer [( original . len * i )..], original , ); }return buffer ; }pub fn main () ! void { var arena = ArenaAllocator . init ( std . heap . page_allocator , ); defer arena . deinit ();const allocator = arena.allocator ( ) ;const original = "Hello " ; const repeated = try repeat ( allocator , original , 3 , );std.debug.print ( "{s} \ n " , . { repeat } ) ; }الناتج:
مرحباً مرحباً مرحباًمشاريع بارزة
تشمل المشاريع التي تستخدم (أو استخدمت سابقًا) برنامج Zig ما يلي:
- Bun ، وهو وقت تشغيل JavaScript و TypeScript مكتوب أصلاً بلغة Zig (حتى الإصدار 1.3.14) وأعيد كتابته بلغة Rust (بدءًا من الإصدار 1.4.0) في عام 2026، باستخدام الآلة الافتراضية JavaScriptCore الخاصة بمتصفح Safari . [ 36 ]
- TigerBeetle، قاعدة بيانات للمعاملات المالية [ 37 ] [ 38 ]
- Ghostty ، محاكي طرفي مُسرّع بواسطة وحدة معالجة الرسومات [ 39 ]
مراجع
الاقتباسات
- 1 2 كيلي، أندرو (8 فبراير 2016). "مقدمة إلى لغة برمجة زيج" . andrewkelley.me . تم الاطلاع عليه في 8 نوفمبر 2020 .
- ↑ "تم إصدار النسخة 0.16.0" . 14 أبريل 2026. تم الاطلاع عليه بتاريخ 14 أبريل 2026 .
- ↑ "ما هي مزايا وعيوب Zig مقابل Rust؟ أرى أن Zig يُذكر أكثر فأكثر هنا... | Hacker News" .
- ↑ "لماذا Zig في حين أن هناك بالفعل C++ و D و Rust؟ ⚡ لغة برمجة Zig" .
- ↑ "لا مفاجآت في أي نظام: أسئلة وأجوبة مع لوريس كرو من شركة Zig - Stack Overflow" . 2 أكتوبر 2023.
- ↑ "علاقة زيج الجديدة مع LLVM | أخبار الهاكر" .
- ↑ "ما الذي يملكه زيج ولا يملكه سي، راست، وجو؟ (مع لوريس كرو)" . يوتيوب . ١٥ نوفمبر ٢٠٢٣.
- ↑ "لماذا Zig في حين أن هناك بالفعل C++ و D و Rust؟ | Hacker News" .
- ↑ "نظرة عامة ⚡ لغة برمجة Zig" .
- ↑ "بعد يوم من البرمجة في زيغ" . 29 ديسمبر 2023. مؤرشف من الأصل في 11 فبراير 2025. تم الاطلاع عليه في 31 ديسمبر 2024 .
- ↑ "التخلص من عيوب لغة C، مع أندرو كيلي، مبتكر لغة البرمجة Zig" . سورسغراف . ١٩ أكتوبر ٢٠٢١. مؤرشف من الأصل في ٥ يناير ٢٠٢٥. تم الاطلاع عليه في ١٨ أبريل ٢٠٢٤ .
- ↑ "ziglang/zig" . كودبيرغ . تم الاسترجاع في 11 فبراير 2020 .
- 1 2 3 "لغة برمجة زيج" . Ziglang.org . تم الاطلاع عليه بتاريخ 11 فبراير 2020 .
- ↑ أندرسون، تيم (24 أبريل 2020). "هل ترغب في استخدام _ExtInt؟ مُصرّف LLVM Clang يُضيف دعمًا للأعداد الصحيحة ذات العرض المُخصّص" . www.theregister.co.uk . تاريخ الاطلاع: 30 ديسمبر 2024 .
- 1 2 "التوثيق" . Ziglang.org . تم الاطلاع عليه بتاريخ 24 أبريل 2020 .
- ↑ "الإعلان عن مؤسسة برمجيات زيج" . Ziglang.org . تم الاطلاع عليه بتاريخ 28 مايو 2021 .
- ↑ "التعهد بتقديم 400 ألف دولار إضافية لمؤسسة زيج للبرمجيات" . ميتشل هاشيموتو . 21 يونيو 2026. تم الاطلاع عليه في 7 يوليو 2026 .
- ↑ إليزابيث 2017 .
- ↑ يغولالب 2016 .
- 1 2 3 4 5 "المخصصون" . 11 سبتمبر 2023.
- ↑ تايسون، ماثيو (9 مارس 2023). "تعرّف على زيج: البديل العصري لـ C" . InfoWorld.com .
- ١ ٢ "ملاحظات إصدار Zig 0.16.0" . ملاحظات إصدار Zig . ١٤ أبريل ٢٠٢٦. تم الاطلاع عليه بتاريخ ٢٤ أبريل ٢٠٢٦ .
{{cite web}}: CS1 maint: url-status ( link ) - ↑ "ملاحظات الإصدار 0.16.0: نقل @cImport إلى نظام البناء" . ziglang.org . تم الاطلاع عليه بتاريخ 17 يوليو 2026 .
- ↑ الطريق إلى زيج 1.0 - أندرو كيلي . ChariotSolutions. 9 مايو 2019 – عبر يوتيوب .
- ↑ "ملاحظات الإصدار 0.6.0" . Ziglang.org . تم الاطلاع عليه بتاريخ 19 أبريل 2020 .
- ↑ ""zig cc": بديل قوي وسهل الاستخدام لـ GCC/Clang - أندرو كيلي . andrewkelley.me . تم الاطلاع عليه بتاريخ 28 مايو 2021 .
- ↑ "Zig يجعل عملية الترجمة المتقاطعة للغة Go تعمل بسلاسة" . مجتمع المطورين . 24 يناير 2021. تم الاطلاع عليه بتاريخ 28 مايو 2021 .
- ↑ "ملاحظات الإصدار 0.15.1 ⚡ لغة برمجة Zig" . ziglang.org . تم الاطلاع عليه في 3 سبتمبر 2025 .
- ↑ andrewrk. "daw" . Codeberg.org . تم الاطلاع عليه بتاريخ 29 مايو 2026 .
- ↑ أندرسون، تيم (28 مايو 2026). "مبتكر زيج يسعى إلى 'الكمال المطلق' قبل إطلاق النسخة 1.0" . ذا ريجستر . تم الاطلاع عليه بتاريخ 29 مايو 2026 .
- ↑ أندرو ورك (13 مارس 2024). "أصل اسم لغة برمجة زيغ. بقلم @andrewrk" . تم الاطلاع عليه بتاريخ 13 مارس 2024 .
- ↑ "رد على _الطريق إلى زيغ 1.0_" . www.gingerbill.org . 13 مايو 2019. تم الاطلاع عليه بتاريخ 11 فبراير 2020 .
- ↑ "ziglang/zig" . كودبيرغ . لغة برمجة Zig. 11 فبراير 2020. تم الاطلاع عليه بتاريخ 11 فبراير 2020 .
- ↑ "لغة برمجة زيج" . Ziglang.org . تم الاطلاع عليه بتاريخ 11 فبراير 2020 .
- ↑ كيلي، أندرو (26 نوفمبر 2025). "الانتقال من جيت هاب إلى كودبيرج" . ziglang.org . مؤرشف من الأصل في 27 نوفمبر 2025. تم الاطلاع عليه في 27 نوفمبر 2025 .
- ↑ سومنر، جاريد (8 يوليو 2026). "إعادة كتابة Bun في Rust" . مدونة Bun .
- ↑ غريف، جوران ديرك (4 أغسطس 2023). "عصر جديد لتصميم قواعد البيانات مع تايجر بيتل" . إنفو كيو . تم الاطلاع عليه بتاريخ 28 يناير 2026 .
- ↑ خنفساء النمر/خنفساء النمر ، خنفساء النمر، 28 يناير 2026 ، تم الاطلاع عليه في 28 يناير 2026
- ↑ بروفن، ليام (8 يناير 2025). "عندما ظننت أن برامج محاكاة الطرفيات لا يمكن أن تتحسن أكثر، ها هي غوستي تُطلق" . ذا ريجستر .
فهرس
- إليزابيث، جين (19 أكتوبر 2017). "هل سئمت من لغة C؟ لغة البرمجة الجديدة Zig تهدف إلى أن تكون أكثر عملية وسهولة في القراءة" . jaxenter . مؤرشف من الأصل في 1 أكتوبر 2020. تم الاطلاع عليه في 22 أبريل 2020 .
- يغولالب، سردار (29 أغسطس 2016). "منافس جديد ينضم إلى لغة Rust لإزاحة لغة C" . إنفوورلد . تم الاطلاع عليه بتاريخ 11 فبراير 2020 .
روابط خارجية
- مترجمات لغة البرمجة C
- لغات البرمجة المترجمة
- برامج مجانية متعددة المنصات
- برامج متعددة المنصات
- الأنظمة المدمجة
- مترجمات مجانية ومفتوحة المصدر
- مكتبات حاسوب مجانية
- لغات البرمجة عالية المستوى
- لغات البرمجة
- لغات البرمجة التي تم إنشاؤها في عام 2015
- برنامج مرخص بموجب ترخيص MIT
- لغات البرمجة ذات الكتابة الثابتة
- لغات برمجة الأنظمة
