Zero Playground
قراءة التوثيقاكتب الأكواد البرمجية، شغّلها وشاركها — بدون أي إعداد.
جرّب Zero في المتصفح
Zero هي لغة برمجة الأنظمة الجديدة من Vercel Labs، وقد صدرت لأول مرة في مايو 2026. تبدو من الخارج قريبة من Rust — pub fun، let mut، ->، أقواس الـ generics — لكن هدفها التصميمي غير معتاد: كل جزء من الـ toolchain مصمَّم ليقرأه ويعدّله ويصلحه وكلاء الذكاء الاصطناعي بنفس سهولة البشر. تُصدَر التشخيصات (diagnostics) على هيئة JSON منظَّم برموز أخطاء ثابتة، ويستطيع المُجمِّع توليد repair plans مكتوبة بأنواع، وتأتي الـ binaries بأقل من 10 KiB. يمنحك الـ playground محررًا نظيفًا للعبث باللغة دون تثبيت أي شيء.
أبرز فكرة في Zero هي الـ I/O القائم على capabilities. لا توجد عوامل عامة ضمنية ولا stdout عائم في الخلفية — أي دالة تريد الكتابة على الـ terminal مضطرة لاستقبال parameter اسمه World واستدعاء world.out.write(...). تنتشر الأخطاء عبر raises وcheck بدلاً من الاستثناءات أو الـ panics، والقيم الاختيارية تستخدم .has / .value بدلاً من null. اضغط Run، ويتولى المحرر تجميع شيفرتك على الخادم وعرض الناتج. الـ stdin غير موصول بعد لأن Zero v0.1.3 لم يُطلِق بعد API للـ stdin — استخدم std.args عبر لوحة Args بدلاً من ذلك.
ما الذي يجعل Zero ممتعة
- I/O قائم على capabilities: كل أثر جانبي (stdout، ملفات، شبكة) يمر عبر parameter اسمه
World، فتُخبرك توقيع الدالة بدقّة بما يمكنها أن تلمسه. لا عوامل عامة مخفية، ولا allocator ضمني، ولا async مفاجئ. - Toolchain يضع الوكلاء أولًا:
zeroيُصدر تشخيصات JSON ثابتة، وzero fix --plan --jsonيُنتج repair plans مكتوبة بأنواع، وكل subcommand في الـ CLI يقبل--jsonليتمكن الوكلاء من تمرير المخرجات (pipe) بدلًا من تحليلها بالـ regex. - Binaries نيتيف صغيرة جدًا، غالبًا أقل من 10 KiB. يستخدم المُجمِّع emitters مباشرة لـ ELF وMach-O وPE وWebAssembly، فلا حاجة لجرّ اعتماد LLVM خلفك.
- صياغة مألوفة، أمان أكثر حدّة: تبدو على الورق مثل Rust، لكن دون panic-on-null، ودون GC ضمني، ودون تدفق تحكم خفي. الأخطاء مجرد قيم تُمرّرها بواسطة
check.
أفكار تجربها داخل Zero playground
- اطبع شيئًا عبر
world.out.writeولاحظ كيف يُجبرك الـ annotationraisesعلى التعامل مع مسار الخطأ بـcheck. هذا هو الـ idiom الكامل لـ Zero لتحقيق الأمان دون استثناءات، في مثال صغير واحد. - اقرأ معاملًا من سطر الأوامر باستخدام
std.args.get(N)، وفكّ تغليف الـ optional بـ.has/.value. حرّر القيم في لوحة Args أسفل المحرر — تُمرَّر إلى برنامجك عند الضغط على Run، تمامًا مثل argv حقيقي. - اكتب
funصغيرة تعيدString، ونادها منmain، وراقب كيف تنسجم الأنواع من تلقاء نفسها. تستنتج Zero الـ generics بشكل أكثر جرأة من Rust، فلا تحتاج معظم نقاط الاستدعاء إلى أي annotations.
أسئلة شائعة حول Zero
ما هي لغة البرمجة Zero؟
--json، ويُنتج وضع منفصل اسمه zero fix --plan خططَ إصلاح مكتوبة بأنواع يمكن للوكلاء تطبيقها مباشرة. في الصياغة، تقع Zero في مكان ما بين Rust وZig. الفكرة الرئيسية هي I/O قائم على capabilities عبر parameter اسمه World.هل أحتاج إلى تثبيت مُجمِّع Zero لاستخدام هذا الـ playground؟
zero على جانب الخادم داخل حاوية معزولة، فأنت تكتب الشيفرة في المتصفح وتضغط Run. إصدار المُجمِّع مثبَّت (حاليًا v0.1.3)، والـ sandbox هو نفسه في كل تشغيل. إذا أردت أيضًا التطوير محليًا، فمشروع Zero ينشر binaries مُسبَقة البناء على صفحة GitHub releases.لماذا لا يحتوي Zero playground على مربع إدخال stdin؟
World فقط (world.out، world.err)، إضافةً إلى std.args لمعاملات سطر الأوامر، وstd.env لمتغيرات البيئة. إلى أن تطلق Vercel Labs capability لـ stdin، استخدم لوحة Args أسفل المحرر — بهذا تُمرِّر المدخلات إلى برنامجك.ما هي capability World ولماذا تستقبلها main؟
World وتستدعي عليها methods (world.out.write، world.err.write، وهكذا). هذا يحوّل توقيع الدالة إلى إعلان أمين عن آثارها الجانبية — فالدالة التي لا تأخذ World لا يمكنها برهانًا أن تلمس العالم الخارجي. تتلقاها main لأن الـ runtime هو من يمنح الـ capability الأولى.ماذا يعني raises وcheck؟
raises في توقيعها (مع إمكانية تعداد أسماء الأخطاء المحددة)، والمنادي يكتب check expr ليمرر الفشل لأعلى الـ stack. فكّر فيها كمعامل ? في Rust لكن مع أنواع أخطاء مسماة: الأخطاء قيم، لا مفاجآت في تدفق التحكم.