Skip to content

الملعب — جرّب لغة ص

اكتبْ كودَ لغة ص وشغِّلْه. وما تراه مخرَجُ المترجِّمِ نفسِه — يُترجَمُ مصدرُك إلى ثنائيٍّ أصيلٍ ثمّ يُشغَّلُ الثنائيّ، لا محاكاةَ ولا تفسير.

أمثلة جاهزة:
📝 المحررمرحبا.ص
⌨️ إدخال stdin (اختياري)
📤 الخرج
اضغط "تشغيل" لتنفيذ الكود ✨
🎨 الرسوميات Canvas
جارٍ تحميل مفسر لغة ص...

كيف يعمل

كودك .ص  →  ① sad-build (ترجمة)  →  ثنائيٌّ أصيل  →  ② تشغيل  →  النتيجة

مرحلتان، ويُبلَّغُ عن كلٍّ منهما على حِدَة. 🔑 وإخفاقُ الترجمةِ ليس عطبًا يُخفى: هو جوابُ المترجِّمِ برمزٍ من الكتالوجِ ونصٍّ عربيٍّ وعلاج — وهو أنفعُ ما يراه المتعلّم. فيُعرَضُ كما خرج:

برنامج.ص: error: [SEM001] (AR) المتغير 'س' غير معرَّف
  → عرّف المتغير قبل استخدامه: متغير س = <قيمة>

أين يُترجَم؟ على خادم، لا في متصفّحك

هذا فرقٌ يُقالُ ولا يُخفى. والسببُ مقيسٌ لا مُقدَّر: sad-build يربطُ LLVM ١٨ (cmake/llvm.cmake) ويستدعي رابطًا خارجيًّا بـstd::system في compiler/src/backend/arm64_codegen.cpp:355. فحملُه إلى المتصفّحِ يعني حملَ LLVM وlld معه — مشروعٌ مستقلٌّ لا رقعةُ موقع.

كان هنا sad.wasm

شحنَ هذا الموقعُ يومًا ثلاثةً ونصفًا ميغابايت من WebAssembly إلى كلِّ زائر — وكانت المفسّرَ مترجَمًا. والمفسّرُ حُذِفَ من اللغة، ومعه tools/wasm/ وملفُّ بنائه، فذلك الثنائيُّ لا يُعادُ بناؤه لو وُجِدَ فيه عطب. والملعبُ اليومَ يبلغُ المحرّكَ الوحيدَ الباقيَ — وهو المحرّكُ الذي يُنتِجُ برامجَك.

على جهازك — بالمترجِّمِ نفسِه

يعملُ الملعبُ كاملًا محلّيًّا، ويلتقطُه الموقعُ في وضعِ التطويرِ تلقائيًّا:

bash
npm run api                               # يبحثُ عن sad-build في مستودعٍ شقيق
SAD_BUILD=/path/to/sad-build npm run api  # أو بمسلكٍ صريح
bash
docker build -f api/Dockerfile -t sad-playground .
# سطرُ التشغيلِ بأعلامِ العزلِ كاملةً في api/README.md
powershell
irm https://sad-lang.org/install.ps1 | iex
sad-build برنامجي.ص -o برنامجي.exe
.\برنامجي.exe
bash
curl -fsSL https://sad-lang.org/install.sh | bash
sad-build برنامجي.ص -o برنامجي
./برنامجي

الحدودُ المُعلَنة

ما لا يفعلُه الملعب

  • لا ترجمةَ في المتصفّح — التشغيلُ يمرُّ بخادم، وقد قِيسَ سببُه أعلاه.
  • مهلةُ التشغيلِ ثمانِ ثوانٍ، ومهلةُ الترجمةِ عشرون؛ ويُوقَفُ البرنامجُ متى تجاوزَ مخرَجُه ٦٤ ك.بايت.
  • حجمُ المصدرِ ٦٤ ك.بايت، وأربعُ ترجماتٍ متزامنةٍ على الأكثر، و٣٠ طلبًا في الدقيقةِ لكلِّ عنوان.
  • البرنامجُ يعملُ في حاويةٍ معزولةٍ بلا حالةٍ باقية — لا ملفَّ يُحفَظُ بين تشغيلَين، ولا شبكةَ يُعتمَدُ عليها.

🔑 وهذه الحدودُ مقيسةٌ لا مذكورة. npm run check:playground يسبرُ كلَّ واحدٍ منها بطلبٍ يخرقُه على خادمٍ حيّ، وnpm run calib:playground يُبرهِنُ أنّ الحارسَ يعَضُّ بأن يُشغِّلَه على خادمٍ بلا حدٍّ واحدٍ ويُلزِمَه بالحمرةِ في كلِّ سبرة. فحدٌّ مكتوبٌ ولا يُقاسُ دعوى لا عقد.

مُرخَّص بموجب رخصة MIT