Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

اكتب الأكواد البرمجية، شغّلها وشاركها — بدون أي إعداد.

main.0
Output
Click Run to see the output here.

جرّب 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 ولاحظ كيف يُجبرك الـ annotation raises على التعامل مع مسار الخطأ بـ check. هذا هو الـ idiom الكامل لـ Zero لتحقيق الأمان دون استثناءات، في مثال صغير واحد.
  • اقرأ معاملًا من سطر الأوامر باستخدام std.args.get(N)، وفكّ تغليف الـ optional بـ .has / .value. حرّر القيم في لوحة Args أسفل المحرر — تُمرَّر إلى برنامجك عند الضغط على Run، تمامًا مثل argv حقيقي.
  • اكتب fun صغيرة تعيد String، ونادها من main، وراقب كيف تنسجم الأنواع من تلقاء نفسها. تستنتج Zero الـ generics بشكل أكثر جرأة من Rust، فلا تحتاج معظم نقاط الاستدعاء إلى أي annotations.

أسئلة شائعة حول Zero

ما هي لغة البرمجة Zero؟
Zero هي systems language تجريبية من Vercel Labs، صدرت لأول مرة في مايو 2026. تُجمَّع إلى ملفات تنفيذية نيتيف صغيرة (غالبًا أقل من 10 KiB)، وقد بُنيت مع وضع وكلاء البرمجة بالذكاء الاصطناعي في الاعتبار: يُصدر المُجمِّع تشخيصات JSON منظمة، ويقبل كل subcommand في الـ CLI الخيار --json، ويُنتج وضع منفصل اسمه zero fix --plan خططَ إصلاح مكتوبة بأنواع يمكن للوكلاء تطبيقها مباشرة. في الصياغة، تقع Zero في مكان ما بين Rust وZig. الفكرة الرئيسية هي I/O قائم على capabilities عبر parameter اسمه World.
هل أحتاج إلى تثبيت مُجمِّع Zero لاستخدام هذا الـ playground؟
لا. يشغّل Coddy الـ toolchain الخاصة بـ zero على جانب الخادم داخل حاوية معزولة، فأنت تكتب الشيفرة في المتصفح وتضغط Run. إصدار المُجمِّع مثبَّت (حاليًا v0.1.3)، والـ sandbox هو نفسه في كل تشغيل. إذا أردت أيضًا التطوير محليًا، فمشروع Zero ينشر binaries مُسبَقة البناء على صفحة GitHub releases.
لماذا لا يحتوي Zero playground على مربع إدخال stdin؟
لأن Zero v0.1.3 لم يكشف بعد عن API للـ stdin. تصل اللغة إلى العالم الخارجي عبر capabilities موضوعة على parameter World فقط (world.out، world.err)، إضافةً إلى std.args لمعاملات سطر الأوامر، وstd.env لمتغيرات البيئة. إلى أن تطلق Vercel Labs capability لـ stdin، استخدم لوحة Args أسفل المحرر — بهذا تُمرِّر المدخلات إلى برنامجك.
ما هي capability World ولماذا تستقبلها main؟
لا تملك Zero فضاء أسماء عامًا ضمنيًا للـ I/O. أي دالة تريد كتابة مخرجات أو قراءة ملفات أو الوصول إلى الشبكة، عليها أن تستقبل قيمة World وتستدعي عليها methods (world.out.write، world.err.write، وهكذا). هذا يحوّل توقيع الدالة إلى إعلان أمين عن آثارها الجانبية — فالدالة التي لا تأخذ World لا يمكنها برهانًا أن تلمس العالم الخارجي. تتلقاها main لأن الـ runtime هو من يمنح الـ capability الأولى.
ماذا يعني raises وcheck؟
تعالج Zero الأخطاء بشكل صريح بدلًا من الاستثناءات. الدالة التي قد تفشل تضع raises في توقيعها (مع إمكانية تعداد أسماء الأخطاء المحددة)، والمنادي يكتب check expr ليمرر الفشل لأعلى الـ stack. فكّر فيها كمعامل ? في Rust لكن مع أنواع أخطاء مسماة: الأخطاء قيم، لا مفاجآت في تدفق التحكم.