تخصيص سجلات المسح الخطي: معالجة فجوات العمر الافتراضي

2025-08-26
تخصيص سجلات المسح الخطي: معالجة فجوات العمر الافتراضي

تشرح هذه المشاركة التحسينات التي أدخلت على خوارزمية تخصيص سجلات المسح الخطي للتعامل مع فجوات العمر الافتراضي. يشرح الكاتب كيف تنشأ هذه الفجوات من خلال تقليل رسم بياني تدفق التحكم إلى تسلسل خطي من التعليمات، مما يؤدي إلى حدوث انقطاعات في أعمار السجلات الظاهرية. الحل يتضمن تعديل بنية بيانات الفترة الزمنية لدعم نطاقات متعددة غير متداخلة، مما يسمح بتحديد هذه الفجوات واستغلالها. ثم يتم تكييف خوارزمية المسح الخطي لتضع هذه الفجوات في الاعتبار أثناء تخصيص السجلات، مما يحسن من استخدام السجلات. هذا يحسن قدرة المُجمع على الاستفادة من موارد السجلات، مما يؤدي في النهاية إلى زيادة أداء التعليمات البرمجية.

اقرأ المزيد

استخدام snprintf بأمان: تجنب تجاوزات المخزن المؤقت

2025-08-19
استخدام snprintf بأمان: تجنب تجاوزات المخزن المؤقت

تسلط هذه المقالة الضوء على ميزة غير معروفة جيدًا لوظيفة `snprintf` وهي قدرتها على تحديد حجم المخزن المؤقت المطلوب قبل التنسيق، وبالتالي منع تجاوزات المخزن المؤقت. من خلال استدعاء `snprintf` مرتين - مرة واحدة باستخدام `NULL` و 0 للحصول على الحجم، ومرة أخرى باستخدام مخزن مؤقت مخصص بشكل صحيح - يتم القضاء على الحاجة إلى حسابات حجم المخزن المؤقت اليدوية. كما يوصي الكاتب بمكتبة خفيفة الوزن فقط في رأس الملف لتسهيل الاستخدام.

اقرأ المزيد

مُترجم بلغة بايثون مكون من ٣٠٠ سطر: تحويل الإغلاقات مُفصّلًا

2025-08-11
مُترجم بلغة بايثون مكون من ٣٠٠ سطر: تحويل الإغلاقات مُفصّلًا

أثناء العمل على البرنامج التعليمي لـ Ghuloum، أعاد المؤلف تنفيذ مُترجم مكتوب أصلاً بلغة C، محققًا نسخة مختصرة من بايثون تتكون من ٣٠٠ سطر (بما في ذلك الاختبارات). يقوم هذا المُترجم بتحويل الإغلاقات، مُعالجة ربط المتغيرات، وتتبع المتغيرات الحرة، وإدارة كائنات التعليمات البرمجية. تُفصّل هذه المقالة التنفيذ، مُغطية تعبيرات lambda و let، ونداءات الوظائف، مُقدمة حالات اختبار وأمثلة رمز التجميع. والنتيجة هي مُترجم مُدمج بشكل مُدهش قادر على معالجة الإغلاقات ونداءات الوظائف غير المباشرة، مُظهرًا حلولًا أنيقة للمشاكل المعقدة.

اقرأ المزيد

تصميم تمثيل وسيط المُترجم: القرارات المحلية والتحسين

2025-06-17
تصميم تمثيل وسيط المُترجم: القرارات المحلية والتحسين

تتناول هذه المقالة تصميم تمثيل وسيط المُترجم (IR)، مع التركيز على اتخاذ القرارات باستخدام معلومات محلية فقط. يقارن الكاتب بين رسوم بيانية تدفق التحكم (CFG)، و IR القائمة على السجلات، وشكل التعيين المفرد الثابت (SSA)، مع تقديم تصميمات أكثر تقدمًا مثل المعلومات المفردة الثابتة (SSI) وبحر العُقد (SoN). يُبسط SSA التحليل عن طريق تعيين كل متغير مرة واحدة فقط، بينما يسمح SSI بإضافة معلومات أكثر دقة لنفس المتغير عبر فروع البرنامج المختلفة. يمثل SoN جميع التعليمات كعقد في رسم بياني، مع تمثيل التبعيات البياناتية والتحكمية بشكلٍ صريح لزيادة مرونة التحسين. تهدف هذه التصميمات إلى جعل مُحسّنات المُترجم أكثر كفاءة، مما ينتج عنه رمز مُحسّن في النهاية.

اقرأ المزيد

بناء محرك بحث مدونة من الصفر باستخدام Word2Vec

2025-05-20
بناء محرك بحث مدونة من الصفر باستخدام Word2Vec

قام المؤلفان ببناء محرك بحث مدونة من الصفر باستخدام بايثون و Word2Vec. تم دمج المنشورات واستفسارات البحث في فضاء متجه ثلاثي الأبعاد، ويتم استخدام تشابه جيب التمام لترتيب النتائج. لجعله مناسبًا للويب، تم تقسيم نموذج Word2Vec إلى فهرس ومتجهات، مع استخدام طلبات HTTP Range لتحميل البيانات الضرورية فقط، مما يقلل من عبء الويب بشكل كبير. تم تصميم مقياس تقييم لتقييم دقة محرك البحث، وتم مناقشة التحسينات المستقبلية، مثل استخدام TF-IDF للحد من الضوضاء.

اقرأ المزيد

مقالات ومدونات غيّرت نظرتي بلغات البرمجة

2025-05-14
مقالات ومدونات غيّرت نظرتي بلغات البرمجة

تسرد هذه التدوينة عددًا من المقالات ومدونات الإنترنت التي أثرت بشكل عميق في فهم الكاتب للغات البرمجة والمُترجمات. تتناول المواضيع المُناقشة جمع القمامة، وتحسين الكود، وتخصيص السجلات، وآليات التعابير النظامية، والتعلم الآلي، وصيغة SSA، وتصميم المُترجمات. يُبرز الكاتب النهج البصيرة المُقدمة، مثل استخدام Z3 كمحرك لإثبات الصحة، واستخدام تقنية fuzzing لاكتشاف الأخطاء، والتقنيات الفعّالة لتحليل التعابير. تُظهر المجموعة الغوص العميق للكاتب في تعقيدات تصميم وتنفيذ لغات البرمجة.

اقرأ المزيد
التطوير المُترجمات

إنشاء اشتقاق Nix يدويًا: غوص عميق في توليد التجزئة

2025-04-09
إنشاء اشتقاق Nix يدويًا: غوص عميق في توليد التجزئة

تتناول هذه المدونة رحلة الكاتب في إنشاء اشتقاق Nix بسيط يدويًا. من خلال تحليل تدوينة Farid خطوة بخطوة، يتعمق الكاتب في آلية عمل اشتقاقات Nix الداخلية، وتحديدًا عملية توليد التجزئة. واجه الكاتب العديد من التحديات، مثل فهم التمثيل ATerm، وخوارزمية التجزئة SHA256، وترميز base32 الفريد في Nix. في النهاية، نجح الكاتب في توليد نفس قيمة التجزئة الموجودة في تدوينة Farid، وقام بإنشاء اشتقاق "hello world" بنجاح.

اقرأ المزيد

تسريع 100 مرة: جمع القمامة و وحدات معالجة الرسومات في بايثون

2025-03-25
تسريع 100 مرة: جمع القمامة و وحدات معالجة الرسومات في بايثون

تشرح هذه المشاركة كيف حقق الكاتب تسريعًا بنسبة 100 مرة لبرنامج بايثون من خلال تحسينات بسيطة في التعليمات البرمجية. استخدم البرنامج الأولي NumPy للحساب المتوازي، لكنه كان بطيئًا ومستهلكًا للذاكرة بسبب سوء إدارة الذاكرة. من خلال تنفيذ آلية بسيطة لجمع القمامة لإطلاق المتغيرات الوسيطة غير المستخدمة، قلل الكاتب وقت التنفيذ من 40 ثانية إلى 10 ثوانٍ، مما قلل بشكل كبير من استخدام الذاكرة. بعد ذلك، باستخدام CuPy لنقل الحساب إلى وحدة معالجة الرسومات، تم تقليل وقت التنفيذ أكثر إلى 1.5 ثانية، مما يدل على تحسين كبير في الأداء.

اقرأ المزيد
التطوير تحسين بايثون

محول Cinder JIT: تمثيل الأنواع بكفاءة باستخدام مجموعات البتات وشبه الشبكات

2025-03-11
محول Cinder JIT: تمثيل الأنواع بكفاءة باستخدام مجموعات البتات وشبه الشبكات

يستخدم مُحوّل Cinder JIT تمثيلًا ذكيًا للأنواع، حيث يعامل الأنواع على أنها مجموعات (أو حتى شبكات) ويختار تمثيلًا مضغوطًا لمجموعات البتات. تتعمق هذه المقالة في كيفية استخدام Cinder لمجموعات البتات وهياكل شبه الشبكات للتعامل مع معلومات الأنواع بكفاءة، حيث تغطي تمثيل الأنواع الأساسية، واتحادات الأنواع، والتخصيص. من خلال ترميز معلومات الأنواع في مجموعات البتات، يمثل Cinder اتحادات الأنواع بكفاءة ويسمح بتمييزات أكثر دقة للأنواع. بالإضافة إلى ذلك، يُدخِل Cinder آلية تخصيص لتتبع القيمة المحددة للأشياء الفردية، مما يحسّن من كفاءة تحسين المُحوّل. تناقش المقالة أيضًا نوع Bottom والتفاصيل المتعلقة بإنشاء شبكة الأنواع.

اقرأ المزيد

غطسة عميقة في تحسينات مترجم Static Single Assignment (SSA)

2025-02-11
غطسة عميقة في تحسينات مترجم Static Single Assignment (SSA)

تتبع هذه المقالة تطور عقود من تقنيات تحسين المترجم Static Single Assignment (SSA). من الأوراق الأولى حول تحريك التعليمات البرمجية وتعداد القيم العالمية، مروراً بعمل Cytron الرائد في تقليل تعليمات phi، وصولاً إلى نهج توليد تمريرة واحدة من Brandis و Mössenböck و Sea of Nodes IR من Click و Paleczny، تتبع المقالة العديد من الأوراق الرئيسية وتناقش نقاط قوتها وضعفها. كما تتطرق إلى عمل Appel حول العلاقة بين البرمجة الوظيفية و SSA، وإزالة عقد phi التكرارية من Aycock و Horspool، والنهج الحديثة القائمة على التفسير المجرد. وتختتم المقالة بقائمة بأوراق وموارد إضافية، مما يوفر منظورًا شاملًا للقراء المهتمين بتعلم المزيد حول SSA.

اقرأ المزيد

غوص عميق في CPS: رحلة في تجميع البرمجة الوظيفية

2024-12-25
غوص عميق في CPS: رحلة في تجميع البرمجة الوظيفية

تتناول هذه المقالة بالتفصيل أسلوب تمرير الاستمرارية (CPS) وتطبيقه في تجميع لغات البرمجة الوظيفية. يقوم الكاتب ببناء محوّل CPS خطوة بخطوة بلغة بسيطة تشبه Scheme، مع شرح استراتيجيات التحسين وطرق توليد التعليمات البرمجية. تُفصّل المقالة تحويل الأعداد الصحيحة، والمتغيرات، ونداءات الدوال، وعوامل الحساب، وتعابير لامدا، وتعابير if إلى شكل CPS. كما تناقش المقالة الاستمرارية الفوقية وتقنيات التحسين مثل طي الثوابت والاختزال بيتا. وأخيراً، تُلخّص المقالة عدة طرق لتوليد شفرة قابلة للتنفيذ من CPS، بما في ذلك توليد شفرة C، واستخدام الـtrampolines، واستخدام جملة switch واحدة كبيرة.

اقرأ المزيد
التطوير مُجمّع