أوّلُ خادمٍ يردُّ على طلب
مسارٌ واحدٌ مضمونٌ بلا تفريع: من ملفٍّ فارغٍ إلى خادمِ HTTP يردُّ على curl مُترجَمًا إلى ملفٍّ تنفيذيٍّ واحد. الخياراتُ والأفعالُ الأربعةُ في المساراتُ والأفعالُ الأربعة.
المقصودُ بـ«ويب» ههنا: جانبُ الخادم
لغةُ ص تكتبُ الخادمَ لا صفحةَ المتصفّح. ولا تنفيذَ لشفرةِ ص داخلَ متصفّح: كان ذلك يعملُ بمفسّرٍ مترجَمٍ إلى WebAssembly، وقد حُذِفَ المفسّرُ من اللغة.
١ · اكتُبِ الملفّ
احفَظْ هذا في خادم.ص بمحرِّرٍ يحفظُ UTF-8:
استورد شبكة
دالة معالج_الجذر()
عين_نص_الرد("مرحبًا من لغة ص")
نهاية
متغير الخادم = أنشئ_خادم(0)
عند_طلب_جلب(الخادم، "/"، "معالج_الجذر")
اطبع_سطر("يستمعُ على http://127.0.0.1:8731/")
ابدأ_الاستماع(الخادم، 8731)خمسةُ أشياءَ تجري ههنا، ولا سادسَ:
| السطر | ما يفعل |
|---|---|
استورد شبكة | وحدةُ الشبكةِ تلزمُها استيرادٌ صريح (require_import: true في مصدرِ الحقيقة) |
أنشئ_خادم(0) | يُنشئُ الخادمَ ويُرجِعُ مِقبضَه؛ والمنفذُ الحقيقيُّ يُحسَمُ عندَ الاستماع |
عند_طلب_جلب(…) | يُسجّلُ معالِجَ GET على المسار — والمعالِجُ اسمُ دالّةٍ حرفيّ |
عين_نص_الرد(…) | يُثبِّتُ نصَّ الرد؛ الطلبُ والردُّ يُقرآنِ من داخلِ المعالِجِ ولا يُمرَّرانِ إليه |
ابدأ_الاستماع(الخادم، 8731) | يحجزُ المنفذَ ويحجزُ الخيطَ: لا يعودُ ما دامَ الخادمُ حيًّا |
اسمُ المعالِجِ نصٌّ حرفيٌّ في موضعِ النداء
"معالج_الجذر" — لا متغيّرٌ يحملُه ولا معاملٌ يُمرِّرُه. وهذا قيدٌ مُعلَنٌ برمزٍ (SEM049) لا سهوٌ، وتفصيلُه في لماذا يجبُ أن يكونَ المعالجُ اسمًا حرفيًّا.
٢ · ترجِمْ
sad-build خادم.ص -o خادم.exeخطوتانِ لا ثلاث: ترجمةٌ ثمّ تشغيلُ الثنائيّ. لا مفسّرَ ولا حلقةَ تفاعليّة.
٣ · شغِّلْ
./خادم.exeفيُطبَع:
يستمعُ على http://127.0.0.1:8731/ثمّ يتوقّفُ البرنامجُ عندَ هذا السطر: ابدأ_الاستماع لا يعود. وذاك هو النجاحُ — الخادمُ حيّ.
٤ · اطرُقْ عليه
من طرفيّةٍ أخرى:
curl -i http://127.0.0.1:8731/وهذا مخرَجٌ مقيسٌ حرفًا بحرف:
HTTP/1.1 200 OK
Content-Length: 27
Content-Type: text/plain
Date: Sun, 06 Sept 2026 07:46:19 GMT
Server: Sad/1.0
مرحبًا من لغة صهذا هو النجاحُ الأوّل. أوقِفِ الخادمَ بـCtrl+C.
المنفذُ مشغولٌ؟ الرقمُ ليس مقدَّسًا
جُرِّبَ ٨٠٨٠ أوّلًا فوجِدَ محجوزًا على الجهازِ المقيس، فأخفقَ الحجزُ بصمتٍ ورجعَ ابدأ_الاستماع فورًا وانتهى البرنامج. فإن رأيتَ برنامجَك ينتهي بدل أن يتوقّف، فالمنفذُ محجوزٌ: بدّلْه.
ما بعدَ ذلك
- أربعةُ أفعالٍ وقراءةُ الطلب ⟵ المساراتُ والأفعالُ الأربعة
- طلبٌ صادرٌ إلى خدمةٍ أخرى ⟵ كيف تُرسِلُ طلبًا
- ما دونَ HTTP ⟵ مقابسُ TCP وUDP مباشرةً
- والحدودُ المُعلَنةُ كلُّها ⟵ حدودُ الويبِ المُعلَنة