إزالة التعليمات البرمجية غير المستخدمة
في نظرية المترجمات ، يُعدّ حذف التعليمات البرمجية غير المستخدمة ( DCE ، أو إزالة التعليمات البرمجية غير المستخدمة ، أو تجريد التعليمات البرمجية غير المستخدمة ، أو تجريد التعليمات البرمجية غير المستخدمة ) تحسينًا للمترجم يهدف إلى إزالة التعليمات البرمجية غير المستخدمة (التعليمات البرمجية التي لا تؤثر على نتائج البرنامج). لإزالة هذه التعليمات البرمجية فوائد عديدة: فهي تُقلّل حجم البرنامج (وهو أمر بالغ الأهمية في بعض السياقات)؛ وتُقلّل من استهلاك الموارد، مثل عدد البايتات المراد نقلها [ 1 ] ؛ وتُمكّن البرنامج من تجنّب تنفيذ العمليات غير ذات الصلة ، مما يُقلّل من وقت تشغيله . كما يُمكنها أيضًا تمكين المزيد من التحسينات من خلال تبسيط بنية البرنامج. تشمل التعليمات البرمجية غير المستخدمة التعليمات البرمجية التي لا يُمكن تنفيذها أبدًا ( التعليمات البرمجية غير القابلة للوصول ) والتعليمات البرمجية التي تؤثر فقط على المتغيرات غير المستخدمة (التي كُتبت إليها، ولكن لم تُقرأ مرة أخرى)، أي أنها غير ذات صلة بالبرنامج.
أمثلة
انظر إلى المثال التالي المكتوب بلغة C.
int foo ( void ) { int a = 24 ; int b = 25 ; // إسناد قيمة إلى متغير غير مستخدم int c ; c = a * 4 ; return c ; b = 24 ; // كود غير قابل للوصول return 0 ; }يُظهر تحليل بسيط لاستخدامات القيم أن قيمة المتغير bبعد أول عملية إسناد لا تُستخدم داخل الدالة foo. علاوة على ذلك، bتم تعريف المتغير كمتغير محلي داخل الدالة foo، لذا لا يمكن استخدام قيمته خارجها foo. وبالتالي، فإن المتغير bغير مُستخدم ، ويمكن للمُحسِّن استعادة مساحة التخزين الخاصة به وإلغاء تهيئته.
علاوة على ذلك، ولأن عبارة الإرجاع الأولى تُنفَّذ دون شروط، ولا يوجد أي وسم بعدها يمكن الوصول إليه باستخدام عبارة "goto"، فلا يوجد مسار تنفيذي ممكن للوصول إلى عملية الإسناد الثانية b. وبالتالي، فإن عملية الإسناد غير قابلة للوصول ويمكن حذفها. أما إذا كان للإجراء مسار تحكم أكثر تعقيدًا ، مثل وجود وسم بعد عبارة الإرجاع ووسم gotoآخر في مكان ما من الإجراء، فقد يوجد مسار تنفيذي ممكن للوصول إلى عملية الإسناد b.
كذلك، على الرغم من إجراء بعض العمليات الحسابية داخل الدالة، فإن قيمها لا تُخزَّن في مواقع يمكن الوصول إليها خارج نطاق هذه الدالة. علاوة على ذلك، بما أن الدالة تُرجع قيمة ثابتة (96)، فإنه يمكن تبسيطها إلى القيمة التي تُرجعها (يُسمى هذا التبسيط طي الثوابت ).
تتيح معظم المترجمات المتقدمة خيارات لتفعيل حذف التعليمات البرمجية غير المستخدمة، أحيانًا بمستويات متفاوتة. قد يقتصر المستوى الأدنى على حذف التعليمات التي لا يمكن تنفيذها. وقد لا يحجز المستوى الأعلى مساحة للمتغيرات غير المستخدمة. أما المستوى الأعلى جدًا فقد يحدد التعليمات أو الدوال التي لا فائدة منها ويحذفها.
يُعدّ حذف التعليمات البرمجية غير المستخدمة بديلاً شائعاً لإدراج التعليمات البرمجية الاختيارية عبر المعالج المسبق . انظر إلى التعليمات البرمجية التالية.
// اضبط DEBUG_MODE على false constexpr bool DEBUG_MODE = false ;int main ( void ) { int a = 5 ; int b = 6 ; int c ; c = a * ( b / 2 ); if ( DEBUG_MODE ) { printf ( "%d \n " , c ); } return c ; }لأن الثابت DEBUG_MODEسيُقيّم دائمًا إلى خطأ (بسبب تعريفه على هذا النحو)، فلن يُنفّذ الكود الموجود داخل عبارة if أبدًا، وسيؤدي حذف الكود غير المُستخدم إلى إزالته بالكامل من البرنامج المُحسَّن. هذه التقنية شائعة في تصحيح الأخطاء لتفعيل أجزاء من الكود بشكل اختياري؛ استخدام مُحسِّن مع حذف الكود غير المُستخدم يُغني عن استخدام مُعالِج مُسبق لأداء المهمة نفسها.
عمليًا، ينشأ جزء كبير من التعليمات البرمجية غير المستخدمة التي يكتشفها مُحسِّن الأداء من عمليات تحويل أخرى داخله. على سبيل المثال، تُضيف التقنيات التقليدية لتقليل قوة العمليات حسابات جديدة إلى التعليمات البرمجية، مما يجعل الحسابات القديمة الأكثر تكلفة غير مستخدمة. [ 2 ] وتؤدي عملية إزالة التعليمات البرمجية غير المستخدمة اللاحقة إلى إزالة تلك الحسابات وإتمام العملية (دون تعقيد خوارزمية تقليل القوة).
تاريخيًا، كان يتم حذف التعليمات البرمجية غير المستخدمة باستخدام معلومات مستمدة من تحليل تدفق البيانات . [ 3 ] ظهرت خوارزمية تعتمد على نموذج التعيين الفردي الثابت (SSA) في المقالة الأصلية المنشورة في مجلة حول نموذج SSA بقلم رون سيترون وآخرون. [ 4 ] قام روبرت شيلينغسبورغ (المعروف أيضًا باسم شيلنر) بتحسين الخوارزمية وطوّر خوارزمية مصاحبة لإزالة عمليات التحكم في التدفق غير الضرورية. [ 5 ]
وقت الاستبعاد
وقت التجميع
في المثال أعلاه، نتخلص من التعليمات البرمجية غير المستخدمة أثناء الترجمة . يتيح هذا الإجراء إزالة التعليمات البرمجية غير المستخدمة بشكل قاطع ، والتي يمكن للمُحسِّن إثبات ذلك. يُعيق وجود حدود وحدة الترجمة (CU) قدرة المُحسِّن على تحديد عدم استخدام التعليمات البرمجية.
وقت الربط
لنفترض، على سبيل المثال، مكتبة ثابتة لنظام يونكس ( *.a) تحتوي على عدد من ملفات الكائنات ( *.o). عند الربط، يفحص الرابط ld الرموز المشار إليها في أجزاء أخرى من التعليمات البرمجية، ويختار تضمين ملفات الكائنات الضرورية فقط - أي تلك التي تحتوي على الرموز المشار إليها، سواءً في التعليمات البرمجية الأصلية أو في ملفات الكائنات المُستدعاة لتلبية احتياجات ملف الكائن الأصلي. وهذا يُعدّ نسخةً تقريبيةً جدًا من عملية حذف التعليمات البرمجية غير المستخدمة.
تتكون ملفات الكائنات من أقسام مستقلة نسبيًا قد تشير إلى بعضها البعض. عند تقسيم ملف الكائن إلى أقسام أكثر، مثلاً بوضع كل دالة و/أو متغير في قسم خاص به -ffunction-sections -fdata-sections، وإذا طُلب من الرابط تحليل الترابطات المتبادلة على مستوى القسم، --gc-sectionsيُمكن تحقيق شكل أكثر اكتمالًا من تحليل الترابط الديناميكي أثناء الربط. ( -fdata-sectionsقد يؤدي ذلك إلى زيادة حجم الملف الثنائي بشكل غير مُجدٍ من خلال إنشاء المزيد من إدخالات النقل). [ 6 ]
يُعتبر المعيار الذهبي لتحسين وقت الربط هو تحويل وقت الربط إلى وقت ترجمة آخر ، أي تحسين وقت الربط . في هذا الإعداد، تحتوي ملفات الكائنات على تمثيلات وسيطة يستخدمها المُترجم بدلاً من (أو بالإضافة إلى) رمز الآلة . وبهذه الطريقة، لا يعود المُحسِّن مُقيدًا بحدود وحدة التجميع، إذ يُصبح لديه إمكانية الوصول إلى البرنامج بأكمله، مما يُتيح له إثبات العديد من خصائص الكود التي يُمكن استخدامها للتحسين. ويُصاحب ذلك جانب سلبي يتمثل في زيادة وقت الترجمة لمعالجة هذا التمثيل الكبير للبرنامج.
متحرك
من الشائع عمليًا أن تمثل أجزاء من التعليمات البرمجية تعليمات برمجية غير قابلة للاستخدام أو غير متاحة فقط في ظل ظروف معينة ، قد لا تكون معروفة وقت الترجمة أو التجميع. قد تُفرض هذه الظروف من قِبل بيئات تشغيل مختلفة (على سبيل المثال، إصدارات مختلفة من نظام التشغيل، أو مجموعات وتوليفات مختلفة من برامج التشغيل أو الخدمات المُحمّلة في بيئة مستهدفة معينة)، مما قد يتطلب مجموعات مختلفة من الحالات الخاصة في التعليمات البرمجية، ولكنها في الوقت نفسه تصبح تعليمات برمجية غير قابلة للاستخدام في حالات أخرى. [ 7 ] [ 8 ] كذلك، قد يكون البرنامج (على سبيل المثال، برنامج تشغيل أو خدمة مقيمة) قابلاً للتكوين لتضمين أو استبعاد ميزات معينة بناءً على تفضيلات المستخدم، مما يجعل أجزاء التعليمات البرمجية غير المستخدمة عديمة الفائدة في سيناريو معين. [ 7 ] [ 8 ] في حين أنه يمكن تطوير برامج معيارية لتحميل المكتبات ديناميكيًا عند الطلب فقط، إلا أنه في معظم الحالات، لا يمكن تحميل الإجراءات ذات الصلة فقط من مكتبة معينة، وحتى لو كان ذلك مدعومًا، فقد يظل الإجراء يتضمن أجزاء من التعليمات البرمجية التي يمكن اعتبارها تعليمات برمجية غير قابلة للاستخدام في سيناريو معين، ولكن لا يمكن استبعادها بالفعل في وقت الترجمة.
تُسمى التقنيات المستخدمة للكشف الديناميكي عن الطلب، وتحديد وحل التبعيات، وإزالة التعليمات البرمجية غير المستخدمة بشكل مشروط، وإعادة تجميع التعليمات البرمجية المتبقية عند التحميل أو وقت التشغيل ، بإزالة التعليمات البرمجية غير المستخدمة ديناميكيًا [ 9 ] [ 10 ] [ 11 ] أو إزالة التعليمات غير المستخدمة ديناميكيًا . [ 12 ]
لا توفر معظم لغات البرمجة والمترجمات وأنظمة التشغيل دعمًا يُذكر، باستثناء التحميل الديناميكي للمكتبات والربط المتأخر ، ولذلك فإن البرامج التي تستخدم حذف التعليمات البرمجية غير المستخدمة ديناميكيًا نادرة جدًا في اللغات التي تُترجم مسبقًا أو تُكتب بلغة التجميع . [ 13 ] [ 14 ] [ 15 ] ومع ذلك، قد تُحسّن تطبيقات اللغات التي تُجري الترجمة الفورية ديناميكيًا لحذف التعليمات البرمجية غير المستخدمة. [ 11 ] [ 16 ] [ 17 ]
على الرغم من اختلاف التركيز إلى حد ما، إلا أن الأساليب المماثلة تستخدم أحيانًا أيضًا لتحديث البرامج الديناميكي والتصحيح السريع .
انظر أيضاً
مراجع
- ↑ مالافولتا، إيفانو وآخرون. "تحديد وإزالة وتقييم تجريبي للتعليمات البرمجية غير المستخدمة في جافا سكريبت". معاملات IEEE في هندسة البرمجيات 49.7 (2023): 3692-3714. على الإنترنت.
- ↑ ألين، فرانسيس؛ كوك، جون ؛ كينيدي، كين (يونيو 1981). "تقليل عدد المشغلين". في جونز، نيل د .؛ موشنيك، ستيفن ستانلي (محرران). تحليل تدفق البرنامج: النظرية والتطبيق . برنتيس هول . ISBN 0-13729681-9.
- ↑ كينيدي، كين (يونيو 1981). "دراسة استقصائية لتقنيات تحليل تدفق البيانات". في جونز، نيل د .؛ موشنيك، ستيفن ستانلي (محرران). تحليل تدفق البرامج: النظرية والتطبيق . برنتيس هول . ISBN 0-13729681-9.
- ↑ سيترون، رون ك.؛ فيرانتي، جين ؛ روزين، باري ك.؛ زاديك، ف. كينيث (1991). حساب نموذج التعيين الفردي الثابت ومخطط تبعية البرنامج بكفاءة . ACM TOPLAS 13(4).
- ↑ كوبر، كيث د .؛ توركزون، ليندا (2003) [2002-01-01]. هندسة المترجم . مورغان كوفمان . ص 498 وما بعدها. ISBN 978-1-55860698-2.
- ↑ "استعلام عن خيارات -ffunction-section و -fdata-sections في gcc" . Stack Overflow .
- ١ ٢ بول، ماتياس ر. (٢٠٠٢-٠٤-٠٣) [٢٠٠١-٠٦-١٨]. " [ fd-dev ] Ctrl+Alt+Del" . freedos-dev . تم الاسترجاع في ٢٠١٧-٠٩-٠٩ .
[...] يمكن استبعاد أي من [...] الخيارات "بشكل دائم" أثناء التثبيت (سيؤدي ذلك أيضًا إلى توفير الذاكرة لمقتطفات التعليمات البرمجية المقابلة نظرًا لتقنية
إزالة التعليمات البرمجية غير المستخدمة الديناميكية
لدينا )، أو يمكن تعطيلها أو تمكينها في أي وقت لاحق عبر وظائف واجهة برمجة التطبيقات في حالة رغبة شخص ما في منع المستخدم من إعادة تشغيل الجهاز. [...] نحن ندرس إضافة المزيد من استدعاءات مسح ذاكرة التخزين المؤقت المتزامنة [...] نظرًا لطريقة إزالة التعليمات البرمجية غير المستخدمة الديناميكية لدينا، فلن يتسبب ذلك في أي نوع من التضخم عندما لا يكون مطلوبًا في تكوين هدف معين، حيث سيتم تضمين استدعاء مسح ذاكرة التخزين المؤقت المحدد في صورة وقت تشغيل FreeKEYB فقط إذا تم تحميل ذاكرة التخزين المؤقت للقرص المقابلة أيضًا أو إذا تم إخبار FreeKEYB بواسطة مفاتيح سطر الأوامر بتحميل الدعم المقابل.
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ١ ٢ بول، ماتياس ر. (٢٠٠٢-٠٤-٠٦). " [ fd-dev ] Ctrl+Alt+Del" . freedos-dev . تم الاسترجاع في ٢٠١٩-٠٤-٢٧ .
[...] يقوم FreeKEYB بإنشاء صورة وقت تشغيل برنامج التشغيل عند بدء التشغيل، وذلك بناءً على نوع الجهاز الذي يتم تحميله عليه، ونوع لوحة المفاتيح، والتخطيط، والبلد، وصفحة الترميز المستخدمة، ونوع الماوس ومحول (محولات) الفيديو المثبتة، وبرامج التشغيل الأخرى المحملة على هذا النظام، ونظام التشغيل، وطريقة (طرق) التحميل والنقل المستخدمة، والميزات الفردية المضمنة، وخيارات التكوين المحددة في سطر الأوامر. نظرًا للعدد الكبير من مفاتيح وخيارات سطر الأوامر المدعومة [...] (حوالي خمسين مفتاحًا [...] مع إعدادات متعددة ممكنة)، يوجد عدد كبير من مجموعات الميزات ذات التبعيات التي لا حصر لها [...] مما ينتج عنه [...] عدد لا نهائي من [...] صور الهدف المختلفة. تنجح تقنية إزالة التعليمات البرمجية الميتة الديناميكية في FreeKEYB في حلّ هذه التبعيات وإزالة التعليمات البرمجية والبيانات الميتة. لا تقتصر هذه التقنية على تضمين أو استبعاد عدد محدود من الوحدات أو الإجراءات الفرعية الكاملة وتصحيح بعض جداول الإرسال كما هو الحال في برمجة TSR التقليدية، بل تعمل على مستوى البايت، حيث تستطيع إزالة التعليمات الفردية في منتصف الإجراءات الأكبر حجمًا، والموزعة في جميع أنحاء الكود لمعالجة حالة معينة أو دعم ميزة محددة. تُستخدم أدوات خاصة لتحليل الكود وإنشاء جداول تصحيح مؤتمتة باستخدام تعريفات شرطية للإعلان عن الحالات المختلفة، ليس فقط اختيارية في وقت التجميع ولكن أيضًا في وقت التهيئة، دون تكلفة إضافية تتمثل في وجود قدر من التعليمات البرمجية الميتة المتبقية في صورة وقت التشغيل. لتتبع جميع التبعيات بين هذه الشروط، يتم بناء صورة وقت التشغيل ونقلها ديناميكيًا، وتصحيح جميع المراجع بين هذه الأجزاء الثنائية الصغيرة والمتغيرة والمتحركة، مع السماح باستخدام نموذج .COM/.SYS الصغير. يتم ذلك في وقت التهيئة. واجهة برمجة التطبيقات (API) لاستيراد وتصدير هياكل الكائنات بين FreeKEYB والتطبيق المُستدعي [...] لتغيير حجمها ونقلها داخليًا بشفافية [...] أثناء التشغيل [...]
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ ثامانور، ساتيانارايان (31 يناير 2001). إطار عمل لتخصيص السجلات وتحسين التعليمات البرمجية في الوقت المناسب للأنظمة المدمجة (رسالة ماجستير). جامعة سينسيناتي ، الهندسة: هندسة الحاسوب. ucin982089462.أُرشف بتاريخ 28 يوليو 2019 في أرشيف الإنترنت (Wayback Machine) .أُرشف بتاريخ 28 يوليو 2019 في أرشيف الإنترنت (Wayback Machine) .
- ↑ كوبيس، جان (2024-10-17). "إزالة التعليمات البرمجية غير المستخدمة ديناميكيًا: التحسين من أجل المرونة" .
- 1 2 كونواي، أندرو (4 ديسمبر 1995). "هياكل البيانات الدورية" . مجموعة الأخبار : comp.lang.functional . تم الاسترجاع في 3 يوليو 2017.
[...]
التقييم الكسول
هو في الأساس
حذف ديناميكي للتعليمات البرمجية غير المستخدمة
. [...]
{{cite newsgroup}}: CS1 maint: deprecated archiveal service ( link ) (NB. ربما يكون هذا أول استخدام علني لمصطلح الإزالة الديناميكية للتعليمات البرمجية الميتة ، على الرغم من أنه مفهومي فقط ومع التركيز على التقييم الكسول في اللغات الوظيفية .) - ↑ بوتس، ج. آدم؛ سوهي، غوري (أكتوبر 2002). "الكشف الديناميكي عن التعليمات الميتة وإزالتها" (ملف PDF) . سان خوسيه، كاليفورنيا، الولايات المتحدة الأمريكية: قسم علوم الحاسوب، جامعة ويسكونسن-ماديسون . ASPLOS X ACM 1-58113-574-2/02/0010 . تاريخ الاسترجاع: 23 يونيو 2017 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ بول، ماتياس ر.؛ فرينك، أكسل سي. (1997-10-13) [نُشر لأول مرة عام 1991]، FreeKEYB - برنامج تشغيل لوحة المفاتيح ووحدة التحكم DOS المحسّن (دليل المستخدم) ( الإصدار 6.5). (ملاحظة: FreeKEYB هو برنامج تشغيل قائم على Unicode وقابل للتكوين ديناميكيًا، وهو خليفة لبرنامج K3PLUS، ويدعم معظم تخطيطات لوحات المفاتيح وصفحات الترميز ورموز الدول . يستخدم البرنامج مُجمِّع ماكرو جاهزًا، بالإضافة إلى إطار عمل لأدوات تحليل ما قبل المعالجة وما بعدها تلقائيًا، لإنشاء بيانات تعريفية للتبعيات وتغيير شكل الكود ، ليتم تضمينها في الملف التنفيذي إلى جانب الكود الثنائي ، ومُحمِّل ذاتي الحذف والتخفيف وإعادة التموضع . يُطبِّق برنامج التشغيل تقنيات دقيقة على مستوى البايت لإزالة الكود الميت وإعادة تموضعه ديناميكيًا أثناء التحميل ، بالإضافة إلى إمكانية تعديل الكود ذاتيًا وإعادة التكوين أثناء التشغيل، وذلك لتقليل استهلاك الذاكرة إلى الحد الأدنى، وصولًا إلى الشكل القياسي ، اعتمادًا على الأجهزة الأساسية ونظام التشغيل وتكوين برنامج التشغيل، بالإضافة إلى مجموعة الميزات واللغة المُختارة (حوالي ستين مفتاحًا للتكوين مع مئات الخيارات لعدد غير محدود تقريبًا من التركيبات الممكنة). هذا التعقيد والديناميكية مخفيان عن المستخدمين، الذين يتعاملون مع ملف تنفيذي واحد تمامًا كما يفعلون مع برنامج تشغيل تقليدي.) كان برنامج K3PLUS برنامج تشغيل لوحة مفاتيح موسع لنظام DOS، وقد تم توزيعه على نطاق واسع في ألمانيا في ذلك الوقت، مع توفر نسخ معدلة لعدد قليل من اللغات الأوروبية الأخرى. كان يدعم مجموعة فرعية من الميزات بالفعل، ولكنه لم يطبق خاصية إزالة التعليمات البرمجية غير المستخدمة ديناميكيًا.
- ↑ بول، ماتياس ر.؛ فرينك، أكسل سي. (2006-01-16)، FreeKEYB - برنامج تشغيل لوحة المفاتيح ووحدة التحكم الدولية المتقدمة لنظام DOS (دليل المستخدم) (الإصدار 7 الأولي ).
- ^ بول ماتياس ر. (2001-04-10). " [ ANN ] تم إصدار النسخة التجريبية السادسة من FreeDOS" (باللغة الألمانية). مجموعة الأخبار : de.comp.os.msdos . تم الاسترجاع 2017/07/02 .
[…] العلامة التجارية الجديدة[s] الميزة، وهي إزالة الشفرات الميتة الديناميكية، والجواهر
المعروفة
Bestandteile des Treibers هي عبارة عن Installationszeitpunkt zusammenbastelt und reloziert، لذلك لا تحتاج إلى إنشاء Code- oder Datenbeeiche mehr Resident bleiben (zB wenn jemand ein bestimmtes) FreeKEYB-Feature nicht benötigt). […]
{{cite newsgroup}}: CS1 maint: deprecated archiveal service ( link ) (NB. This represent the first known implementation of byte-level dynamic dead-code removal for software compiled or compiled ahead of time .) - ↑ جونغ، يسونغ؛ دانييلسون، بير؛ إهنسيو، بير؛ هيرمانسون، ماتس؛ جولانكي، ميكا؛ مور، سكوت؛ ستراندر، لارس؛ ويترغرين، لارس (8 نوفمبر 2002). "الفصل 5. نظرة عامة على جافا وتطبيق iSeries - 5.1.1. مكونات متنوعة". Intentia Movex Java على خادم IBM iSeries - دليل التنفيذ - نظرة عامة على Movex Java على خادم iSeries - تثبيت Movex Java على iSeries وتكوينه - نصائح وتقنيات تشغيلية (PDF) . Red Books. شركة IBM. ص 41. ISBN 0-73842461-7SG24-6545-00. مؤرشف (PDF) من الأصل بتاريخ 2013-10-08 . تم الاطلاع عليه بتاريخ 2019-04-20 .
- ↑ بوليتو، غييرمو (2015). "دعم المحاكاة الافتراضية لتخصيص وتوسيع وقت تشغيل التطبيقات - لغات البرمجة" (ملف PDF) . جامعة العلوم والتكنولوجيا في ليل . الصفحات 111-124 . معرف HAL: tel-01251173. مؤرشف (PDF) من الأصل بتاريخ 23-06-2017 . تم الاطلاع عليه بتاريخ 23-06-2017 .
للمزيد من القراءة
- بوديك، راستيسلاف؛ غوبتا، راجيف (يونيو 1997). "إزالة جزئية للتعليمات البرمجية غير المستخدمة باستخدام تحويلات التقطيع". وقائع مؤتمر ACM SIGPLAN 1997 حول تصميم وتنفيذ لغات البرمجة (PLDI '97) : 682-694 .
- أهو، ألفريد فاينو ؛ سيثي، رافي ؛ أولمان، جيفري ديفيد (1986). المترجمون - المبادئ والتقنيات والأدوات . شركة أديسون ويسلي للنشر . ISBN 0-201-10194-7.
- موشنيك، ستيفن ستانلي (1997). تصميم وتنفيذ المترجمات المتقدمة . دار مورغان كوفمان للنشر . رقم ISBN 1-55860-320-4.
- جرون, ديك ; بال, هنري إيل ; جاكوبس، سيريل ج.ه. لانغندوين، كوين ج. (2000). تصميم المترجم الحديث . جون وايلي وأولاده، وشركة ISBN 0-471-97697-0.
- كينيدي، كين ؛ ألين، راندي (2002). "الفصل 4.4. تحليل تدفق البيانات - الفصل 4.4.2. إزالة التعليمات البرمجية غير المستخدمة". تحسين المترجمات للهياكل الحديثة: منهج قائم على التبعية (طبعة رقمية مطبوعة من الطبعة الأولى، 2011 ). أكاديميك برس / مورغان كوفمان للنشر / إلسيفير . الصفحات 137 ، 145-147 ، 167. ISBN 978-1-55860-286-1. إل سي سي إن 2001092381 .
- موث، روبرت؛ ديبري، سوميا ك.؛ واترسون، سكوت؛ دي بوسشير، كوين (يناير 2001) [1999-11-02]. "alto: مُحسِّن وقت الربط لجهاز Compaq Alpha". البرمجيات: الممارسة والخبرة . 31 (1): 67-101 . CiteSeerX 10.1.1.33.4933 . doi : 10.1002/1097-024X(200101)31:1 < 67::AID-SPE357 > 3.0.CO ; 2-A . S2CID 442062 .
روابط خارجية
- كيف يمكن خداع مترجمات لغة C/C++ لإنتاج كود رديء؟
- تحسينات المُترجم
