Skip to content

RFC: عنوان_رمز — أخذ عنوان رمز الرابط (اللبنة 3.13، إطفاء C)#38

Open
SalehKadah wants to merge 1 commit into
mainfrom
rfc/symbol-addr
Open

RFC: عنوان_رمز — أخذ عنوان رمز الرابط (اللبنة 3.13، إطفاء C)#38
SalehKadah wants to merge 1 commit into
mainfrom
rfc/symbol-addr

Conversation

@SalehKadah

Copy link
Copy Markdown
Contributor

ملخّص

مدمج عنوان_رمز("اسم") يعيد عنوان رمز رابط خارجيّ (دالّة/بيانات/رمز .ld) كـرقم،
موسَّعًا بالأصفار من عرض مؤشّر الهدف. يُطفئ نمط الجالب *_addr (~25 دالّة C في نواة
النحلة) ويصل إلى رموز الرابط البحتة (_kernel_start/_stk) التي لا مخزن C لها.

السياق

اللبنة 3.13 من موجة «إطفاء C» في نواة النحلة. حدّد تقرير أميليا أنّ غياب أخذ
عنوان رمز هو الرافعة الأعلى أثرًا المتبقّية: وحده يُبقي ~25 جالب C وكلّ مخازن
.bss/.rodata
حبيسةً في C.

التصميم (خلاصة)

  • مدمج بوسيط سلسلة حرفيّة ثابتة، يعيد رقم (i64).
  • الخفض (backend): getFunction(sym) أو getOrInsertGlobal(sym, i8) بربط خارجيّ
    CreatePtrToInt ⇒ i64. توسيع أصفار من 32-بت (i686) يطابق عقد الجالبات القائم
    (unsigned int)&رمز كـunsigned long long.
  • الوضعان: يقبله المترجم (حرّ + مستضاف FFI)، يرفضه المفسّر.
  • خطأ جديد SEM_SYMBOL_ADDR_ARG للوسيط غير الثابت/الفارغ.
  • 6 نقاط تماسّ تحاكي نمط اقرأ_سجل_تحكم + emitPtrToInt (بلا صياغة/معجم/AST جديد).
  • توافق خلفيّ: مدمج جديد باسم غير مستعمَل ⇒ لا كسر.

أسئلة للنقاش (في المسودّة)

  1. الاسم: عنوان_رمز (اسم-اسم، مُنتِج قيمة) مقابل فعل-أوّلًا خذ_عنوان_رمز.
  2. سلوك المفسّر: رفض صريح (المقترح) أم dlsym.
  3. الحصر بالوضع الحرّ أم إتاحته مستضافًا كـFFI.
  4. البديل الأنظف نوعيًّا (تصريح رمز خارجيّ مُعرَّف) — مؤجَّل كتحسين مستقبليّ.

🤖 Generated with Claude Code

مدمج عنوان_رمز("اسم") يعيد عنوان رمز رابط خارجيّ (دالّة/بيانات/رمز .ld) كـرقم،
موسَّعًا بالأصفار من عرض مؤشّر الهدف. يُطفئ نمط الجالب *_addr (~25 دالّة C في
نواة النحلة) ويصل إلى رموز الرابط البحتة (_kernel_start/_stk) بلا مخزن C.

اللبنة 3.13 من موجة «إطفاء C». الخفض يحاكي اقرأ_سجل_تحكم + emitPtrToInt:
getOrInsertGlobal(sym) بربط خارجيّ ⇒ ptrtoint ⇒ i64. يقبله المترجم (حرّ+مستضاف
FFI)، يرفضه المفسّر. خطأ SEM جديد للوسيط غير الثابت.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SalehKadah added a commit to sadlang/s-programming-language that referenced this pull request Jul 21, 2026
… إطفاء C) (#224)

عنوان_رمز("اسم") يعيد عنوان رمز رابط خارجيّ (دالّة/بيانات/رمز .ld) كـرقم i64.
الخفض: يُعاد استخدام أيّ تصريح سابق (getNamedValue) وإلّا getOrInsertGlobal(sym,i8)
بربط خارجيّ، ثمّ ptrtoint ⇒ i64. على i686 المؤشّر 32-بت ⇒ توسيع أصفار (LangRef
يضمنه) يطابق عقد الجالبات (unsigned int)&sym كـu64. يعمل في الوضعين؛ الوسيط غير
الثابت/الفارغ يُرفَض بخطأ SEM021 (اسم الرمز يجب أن يُعرَف وقت الترجمة لإصدار
relocation). يُطفئ نمط الجالب *_addr (~25 دالّة C في نواة النحلة).

6 نقاط تماسّ تحاكي اقرأ_سجل_تحكم + emitPtrToInt:
- SoT: compiler_os_core.yaml CPUCTL_20 = عنوان_رمز (+ توليد الكتالوج)
- SIROpcode LOWLEVEL_SYMBOL_ADDR
- frontend: فرع CPUCTL_20 (وسيط ConstantString)
- backend: case + emitLowlevelSymbolAddr
- خطأ SEM021 SEM_SYMBOL_ADDR_ARG (yaml + تعداد + توليد)
- اختبار انحدار 9 حالات (حرّ+مستضاف+إعادة استخدام+رفض غير ثابت/رقميّ/فارغ+لا ازدواج)

منفّذ RFC عنوان_رمز (sadlang/rfcs#38). مراجعة أميليا: صفر خطأ صحّة، ZExt مؤكَّد
عبر LangRef، تحسينات مطبَّقة (getNamedValue ضدّ تصادم الترتيب، تمييز رسالة الرمز
الفارغ، 4 حالات اختبار إضافيّة، سطر قيد النطاق). 17/17 اختبار حرّ أخضر، gen --check
أخضر.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@SalehKadah

Copy link
Copy Markdown
Contributor Author

📌 تحديث تنفيذ: نُفِّذت القدرة ودُمِجت في dev كـ#224 (commit c34b5f8a): مدمج عنوان_رمز + خطأ SEM021 + 9 اختبارات انحدار (17/17 أخضر). واستُهلِكت في نواة النحلة (اللبنة 3.13ب، commit 86b4821) بإطفاء 16 جالب bee_X_addr — بوّابة الإقلاع 16/16. مراجعة أميليا: صفر خطأ صحّة في الطرفين.

الأسئلة غير المحسومة حُسِمت في التنفيذ: (1) الاسم عنوان_رمز؛ (2) المفسّر يرفضه (مدمج نظام)؛ (3) متاح في المترجم (حرّ + مستضاف FFI). البديل «رمز خارجيّ» المُعرَّف يبقى تحسينًا مستقبليًّا فوق نفس الخفض.

هذا التعليق للإحاطة؛ القرار النهائيّ (قبول/دمج الـRFC) لك.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant