Skip to content

حالُ قواعدِ البياناتِ في لغة ص

الخلاصةُ في سطر

لا سبيلَ إلى قاعدةِ بياناتٍ من لغةِ ص اليوم. والشفرةُ موجودةٌ في الشجرةِ ومقطوعةٌ عنها في ثلاثةِ مواضعَ معًا — وكلُّ موضعٍ منها مقيسٌ ويُسمّى باسمِه أدناه.

البرهانُ الأوّل: الاستيرادُ يُرفَض

sad
استورد قاعدة_بيانات
اطبع_سطر("مرحبًا")
(AR) خطأ: لم يُعثر على الوحدة / (EN) Error: Module not found: قاعدة_بيانات
db.ص: error: خطأ: لم يُعثر على الوحدة 'قاعدة_بيانات' / Error: Module 'قاعدة_بيانات' not found
1 error(s) generated.

وليس اسمًا أخطأتُه: language-truth/stdlib/modules.yaml يُعلِنُ عشرَ وحداتٍ لا غير — نصوص · أساسيات · رياضيات · تأكيدات · خرائط · تزامن_متقدم · منصة · شبكة · مقابس · تشفير. ولا وحدةَ قاعدةِ بياناتٍ بينها.

المواضعُ الثلاثةُ المقطوعة

#الموضعالمقيس
stdlib/database/database_module.cpp — ١٬٠٣٨ سطرًاغلافُ SQLite حقيقيّ، لكنّ جسدَه كلَّه بينَ #ifdef HAS_SQLITE3 في السطرِ ١٥ و#endif في آخرِ الملفّ. والراية تُعرَّفُ في cmake/libraries.cmake فقط إن وُجِدَ SQLite3 بـfind_package(… QUIET) — فإن غاب، طُبِعَ «⚠ SQLite3: غير موجود» وتُرجِمَ الملفُّ فارغًا
stdlib/database/database_builtins.cpp — ٩٢٣ سطرًا وفيها حرّاسُ حقنِ SQL وتنفيذٌ بمعامِلاتٍ آمنةليس في أيِّ هدفِ بناء: cmake/sources.cmake يذكرُ database_module.cpp في موضعَين ولا يذكرُ هذا الملفَّ في موضعٍ واحد
مصدرُ الحقيقةلا language-truth/builtins/database.yaml، ولا مدخلَ قواعدِ بياناتٍ في أيٍّ من ملفّاتِ builtins/، ولا اسمَ استيرادٍ في stdlib/modules.yaml

والنتيجةُ اسمُها الصحيح

الدوالُّ شفرةٌ ميّتةٌ لا واجهةَ لها. فحتّى لو وُجِدَ SQLite3 على جهازِ البناءِ وفُعِّلَتِ الرايةُ، بقيَ الغلافُ بلا ذراعِ إرسالٍ من اللغةِ إليه، وبقيَ سطحُ المدمَجاتِ خارجَ البناءِ كلِّه.

وما ليس في الشجرةِ أصلًا

لا مُشغِّلاتِ PostgreSQL، ولا MySQL، ولا ODBC، ولا تجميعَ وصلات (connection pooling). فليست المسألةُ سطحًا ناقصًا يُكمَّل: ليس ثمّةَ سطحٌ.

ما يفتحُ المجال — ثلاثُ خطواتٍ محدَّدة

#الخطوةما تحلُّه
إضافةُ stdlib/database/database_builtins.cpp إلى cmake/sources.cmakeالشفرةُ تدخلُ البناءَ فتصيرُ حيّةً بدلَ ميّتة
كتابةُ language-truth/builtins/database.yamlللدوالِّ قاعدةٌ مُعلَنة: أسماءٌ ومعامِلاتٌ ومُرجَعاتٌ وحالة — فيُطلَبُ من المترجِّمِ ما يُشتقُّ من مصدرِ الحقيقةِ لا ما تُخرِجُه شفرةُ C++
تسجيلُ اسمِ استيرادٍ في stdlib/modules.yamlاستورد … يُحَلُّ فيصيرُ للسطحِ بابٌ من اللغة

ولماذا هذا الترتيبُ بالذات

الخطوةُ ② ليست توثيقًا يتبعُ التنفيذ: هي شرطُه. فقاعدةُ المشروعِ أنّ ما يُطلَبُ من المترجِّمِ يُشتقُّ من قاعدةٍ مُعلَنةٍ في language-truth/ لا من سلوكِ مُنفِّذ. وغلافٌ يُوصَلُ بلا مواصفةٍ يُثبِّتُ عللَه عقدًا.

ولحظةَ تتمُّ الثلاثُ وتُكتَبُ دعوى قدرةٍ واحدةٌ صادقةٌ في tracks/db.yaml، تنقلبُ درجةُ البطاقةِ من «خارجَ النطاق» إلى «ناشئ» من تلقاءِ نفسِها في البناءِ التالي.

ماذا تفعلُ اليوم

إن لزِمَك حفظُ بياناتٍ الآن، فالمسارُ الحيُّ المقيسُ هو ملفّاتُ وحدةِ أساسيات لقراءةِ الملفّاتِ وكتابتِها، ووحدةُ خرائط لتمثيلِ البِنى وتسلسلِها. وهي حلٌّ لِما دونَ الاستعلام، ولا تُقدَّمُ بديلًا عن قاعدةِ بيانات.

ما لم يُقَسْ في هذه الصفحة

الأسطرُ والمواضعُ أعلاه مقروءةٌ من شجرةِ لغةِ ص العاملةِ مباشرةً. ولم يُبْنَ المشروعُ ههنا بـSQLite3 موجودًا للتحقّقِ ممّا يجري حينَ تُفعَّلُ الراية — والدعوى المكتوبةُ هنا لا تحتاجُه: الموضعانِ ② و③ يقطعانِ الطريقَ سواءٌ فُعِّلَتِ الرايةُ أم لم تُفعَّل.

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