تحليل تدفق البيانات
تحليل تدفق البيانات هو أسلوب لجمع معلومات حول مجموعة القيم المحتملة المحسوبة في نقاط مختلفة من برنامج الحاسوب . ويُشكّل هذا التحليل أساسًا لمجموعة واسعة من تحسينات المُصرّفات وتقنيات التحقق من البرامج. يُستخدم مخطط تدفق التحكم (CFG) للبرنامج لتحديد أجزاء البرنامج التي قد تنتقل إليها قيمة مُعينة مُسندة إلى متغير. غالبًا ما تستخدم المُصرّفات المعلومات المُجمّعة عند تحسين البرنامج. ومن الأمثلة الشائعة على تحليل تدفق البيانات الوصول إلى التعريفات . تشمل تحليلات تدفق البيانات الأخرى الشائعة الاستخدام تحليل المتغيرات النشطة، والتعبيرات المتاحة، وانتشار الثوابت، والتعبيرات المُرهقة، ولكل منها غرض مُحدد في مراحل تحسين المُصرّف.
تتمثل إحدى الطرق البسيطة لتحليل تدفق البيانات في البرامج في وضع معادلات تدفق البيانات لكل عقدة في مخطط تدفق التحكم، وحلها عن طريق حساب المخرجات من المدخلات محليًا عند كل عقدة بشكل متكرر حتى يستقر النظام بأكمله، أي يصل إلى نقطة ثابتة . تتأثر كفاءة ودقة هذه العملية بشكل كبير بتصميم إطار عمل تدفق البيانات، بما في ذلك اتجاه التحليل (أمامي أو خلفي)، ونطاق القيم، وعملية الربط المستخدمة لدمج المعلومات من مسارات تحكم متعددة.طُوّر هذا النهج العام، المعروف أيضاً باسم طريقة كيلدال ، على يد غاري كيلدال أثناء تدريسه في كلية الدراسات العليا البحرية . [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ]
المبادئ الأساسية
تحليل تدفق البيانات هو عملية جمع معلومات حول كيفية تعريف المتغيرات واستخدامها في البرنامج. ويهدف إلى الحصول على معلومات محددة عند كل نقطة في الإجراء. عادةً، يكفي الحصول على هذه المعلومات عند حدود الكتل الأساسية ، حيث يسهل من ذلك حساب المعلومات عند نقاط داخل الكتلة الأساسية. في تحليل التدفق الأمامي، تكون حالة الخروج من الكتلة دالةً لحالة دخولها. هذه الدالة هي مجموع تأثيرات التعليمات البرمجية في الكتلة. أما حالة دخول الكتلة فهي دالةً لحالات الخروج من الكتل السابقة لها. ينتج عن ذلك مجموعة من معادلات تدفق البيانات.
لكل كتلة ب:
في هذا،هي دالة نقل الكتلةيعمل على حالة الدخولمما يؤدي إلى حالة الخروجعملية الربطيجمع حالات الخروج الخاصة بالبرامج السابقةلمما ينتج عنه حالة الدخول لـ.
بعد حل هذه المجموعة من المعادلات، يمكن استخدام حالات الدخول والخروج للكتل لاستنتاج خصائص البرنامج عند حدود الكتل. ويمكن تطبيق دالة التحويل لكل عبارة على حدة للحصول على معلومات عند نقطة داخل كتلة أساسية.
لكل نوع من أنواع تحليل تدفق البيانات دالة نقل خاصة به وعملية ربط مميزة. تتطلب بعض مسائل تدفق البيانات تحليل التدفق العكسي، والذي يتبع نفس المنهجية، باستثناء أن دالة النقل تُطبق على حالة الخروج لتُنتج حالة الدخول، بينما تعمل عملية الربط على حالات دخول الحالات اللاحقة لتُنتج حالة الخروج.
تلعب نقطة الدخول (في التدفق الأمامي) دورًا هامًا: نظرًا لعدم وجود نقاط سابقة لها، فإن حالة دخولها تكون محددة بدقة عند بدء التحليل. على سبيل المثال، تكون مجموعة المتغيرات المحلية ذات القيم المعروفة فارغة. إذا لم يحتوي مخطط تدفق التحكم على دورات (أي لم تكن هناك حلقات صريحة أو ضمنية في الإجراء)، فإن حل المعادلات يكون مباشرًا. يمكن بعد ذلك فرز مخطط تدفق التحكم طوبولوجيًا ؛ وبتشغيله وفقًا لهذا الترتيب، يمكن حساب حالات الدخول في بداية كل كتلة، نظرًا لأن جميع النقاط السابقة لتلك الكتلة قد تمت معالجتها بالفعل، وبالتالي فإن حالات خروجها متاحة. أما إذا احتوى مخطط تدفق التحكم على دورات، فسيلزم استخدام خوارزمية أكثر تطورًا.
خوارزمية تكرارية
الطريقة الأكثر شيوعًا لحل معادلات تدفق البيانات هي استخدام خوارزمية تكرارية. تبدأ هذه الخوارزمية بتقريب حالة الدخول لكل كتلة. ثم تُحسب حالات الخروج بتطبيق دوال النقل على حالات الدخول. ومن هذه الحالات، تُحدَّث حالات الدخول بتطبيق عمليات الربط. تُكرَّر الخطوتان الأخيرتان حتى نصل إلى ما يُسمى بالنقطة الثابتة : وهي الحالة التي لا تتغير فيها حالات الدخول (وبالتالي حالات الخروج).
تُعد خوارزمية التكرار الدوري (round-robin) خوارزمية أساسية لحل معادلات تدفق البيانات :
- من أجل i ← 1 إلى N
- تهيئة العقدة i
- بينما ( لا تزال المجموعات تتغير )
- من أجل i ← 1 إلى N
- إعادة حساب المجموعات عند العقدة i
- من أجل i ← 1 إلى N
التقارب
لكي يكون النهج التكراري قابلاً للاستخدام، يجب أن يصل فعلياً إلى نقطة ثابتة. ويمكن ضمان ذلك من خلال فرض قيود على مجموعة نطاق قيم الحالات، ودوال النقل، وعملية الربط.
ينبغي أن يكون نطاق القيمة ترتيبًا جزئيًا بارتفاع محدود (أي، لا توجد سلاسل تصاعدية لانهائية).<...). يجب أن يكون الجمع بين دالة التحويل وعملية الربط رتيبًا بالنسبة لهذا الترتيب الجزئي. يضمن الرتابة أن تظل القيمة ثابتة أو تزداد في كل تكرار، بينما يضمن الارتفاع المحدود عدم إمكانية نموها إلى ما لا نهاية. وبالتالي، سنصل في النهاية إلى حالة يكون فيها T(x) = x لجميع قيم x، وهي النقطة الثابتة.
نهج قائمة العمل
من السهل تحسين الخوارزمية المذكورة أعلاه بملاحظة أن حالة الإدخال (in-state) للكتلة لا تتغير إذا لم تتغير حالات الإخراج (out-state) للكتلات السابقة لها. لذلك، نقدم قائمة عمل : وهي قائمة بالكتل التي لا تزال بحاجة إلى معالجة. كلما تغيرت حالة الإخراج (out-state) لكتلة ما، نضيف الكتل اللاحقة لها إلى قائمة العمل. في كل تكرار، تُزال كتلة من قائمة العمل، ثم تُحسب حالة الإخراج (out-state) الخاصة بها. إذا تغيرت حالة الإخراج، تُضاف الكتل اللاحقة لها إلى قائمة العمل. ولتحقيق الكفاءة، يجب ألا تتكرر الكتلة في قائمة العمل.
تبدأ الخوارزمية بوضع كتل توليد المعلومات في قائمة العمل. وتنتهي عندما تصبح قائمة العمل فارغة.
الطلب
تتأثر كفاءة حل معادلات تدفق البيانات بالتكرار بترتيب زيارة العقد المحلية. [ 9 ] كما تعتمد على ما إذا كانت معادلات تدفق البيانات تُستخدم لتحليل تدفق البيانات الأمامي أو العكسي على مخطط تدفق التحكم. وبشكل بديهي، في مسألة التدفق الأمامي، يكون الحل أسرع إذا تمت معالجة جميع العقد السابقة للكتلة قبل الكتلة نفسها، لأن التكرار سيستخدم حينها أحدث المعلومات. في حال عدم وجود حلقات تكرار، يمكن ترتيب الكتل بحيث تُحسب حالات الخروج الصحيحة بمعالجة كل كتلة مرة واحدة فقط.
فيما يلي، نناقش بعض ترتيبات التكرار لحل معادلات تدفق البيانات (مفهوم ذو صلة بترتيب تكرار CFG هو اجتياز الشجرة ) .
- الترتيب العشوائي - لا يُراعي هذا الترتيب التكراري ما إذا كانت معادلات تدفق البيانات تحل مشكلة تدفق بيانات أمامي أم خلفي. لذلك، يكون الأداء ضعيفًا نسبيًا مقارنةً بترتيبات التكرار المتخصصة.
- الترتيب اللاحق - هذا ترتيب تكراري نموذجي لمشاكل تدفق البيانات العكسي. في التكرار اللاحق ، تتم زيارة العقدة بعد زيارة جميع العقد اللاحقة لها. عادةً مايُنفذ التكرار اللاحق باستخدام استراتيجية البحث العميق أولاً .
- الترتيب اللاحق العكسي - هذا ترتيب تكراري نموذجي لمسائل تدفق البيانات الأمامي. في التكرار ذي الترتيب اللاحق العكسي ، تتم زيارة عقدة قبل زيارة أي من العقد اللاحقة لها، إلا إذا تم الوصول إلى العقدة اللاحقة عن طريق حافة خلفية. (لاحظ أن الترتيب اللاحق العكسي يختلف عن الترتيب المسبق ).
التهيئة
تُعدّ القيمة الابتدائية لحالات الإدخال مهمةً للحصول على نتائج صحيحة ودقيقة. إذا استُخدمت النتائج لتحسينات المُصرّف، فينبغي أن تُقدّم معلومات مُتحفّظة ، أي عند تطبيق هذه المعلومات، يجب ألا يُغيّر البرنامج دلالاته. ستأخذ تكرارات خوارزمية النقطة الثابتة القيم في اتجاه العنصر الأقصى. لذا، فإن تهيئة جميع الكتل بالعنصر الأقصى غير مُجدٍ. تبدأ كتلة واحدة على الأقل في حالة بقيمة أقل من القيمة القصوى. تعتمد التفاصيل على مشكلة تدفق البيانات. إذا كان العنصر الأدنى يُمثّل معلومات مُتحفّظة تمامًا، فيمكن استخدام النتائج بأمان حتى أثناء تكرار تدفق البيانات. أما إذا كان يُمثّل المعلومات الأكثر دقة، فيجب الوصول إلى النقطة الثابتة قبل تطبيق النتائج.
أمثلة
فيما يلي أمثلة على خصائص برامج الحاسوب التي يمكن حسابها باستخدام تحليل تدفق البيانات. تجدر الإشارة إلى أن الخصائص المحسوبة بواسطة تحليل تدفق البيانات عادةً ما تكون تقريبية فقط للخصائص الحقيقية. ويعود ذلك إلى أن تحليل تدفق البيانات يعمل على البنية النحوية لقواعد تدفق التحكم دون محاكاة تدفق التحكم الدقيق للبرنامج. ومع ذلك، ولضمان فائدته العملية، يُصمم خوارزمية تحليل تدفق البيانات عادةً لحساب قيمة تقريبية عليا أو دنيا لخصائص البرنامج الحقيقية.
التحليل الأمامي
يقوم تحليل تعريف الوصول بحساب مجموعة التعريفات التي قد تصل إلى نقطة البرنامج هذه لكل نقطة من نقاط البرنامج.
إذا كان b يساوي 4، أ = 5؛ آخر أ = 3؛ endif إذا كانت قيمة a أقل من 4، ... إن تعريف الوصول للمتغير aفي السطر 7 هو مجموعة التعيينات a = 5في السطر 2 a = 3وفي السطر 4.
التحليل العكسي
يحسب تحليل المتغيرات النشطة لكل نقطة في البرنامج المتغيرات التي يُحتمل قراءتها لاحقًا قبل تحديثها التالي بالكتابة. وتُستخدم النتيجة عادةً في عملية حذف التعليمات البرمجية غير المستخدمة لإزالة العبارات التي تُسند قيمة إلى متغير لا تُستخدم قيمته لاحقًا.
حالة الدخول للكتلة هي مجموعة المتغيرات النشطة في بدايتها. تحتوي مبدئيًا على جميع المتغيرات النشطة (المُضمنة) في الكتلة، قبل تطبيق دالة النقل وحساب القيم الفعلية المُضمنة. تُطبق دالة النقل للعبارة بحذف المتغيرات المكتوبة داخل هذه الكتلة (إزالتها من مجموعة المتغيرات النشطة). أما حالة الخروج للكتلة فهي مجموعة المتغيرات النشطة في نهايتها، وتُحسب باتحاد حالات الدخول للكتلات اللاحقة.
الكود الأولي:
ب1: أ = 3؛ ب = 5؛ د = 4؛ x = 100؛ إذا كان أ > ب، ب2: ج = أ + ب؛ د = 2؛ ب3: نهاية الشرط ج = 4؛ أعد b * d + c؛ |
التحليل العكسي:
// في: {} ب1: أ = 3؛ ب = 5؛ د = 4؛ x = 100; // لن يتم استخدام x لاحقًا، وبالتالي لن يكون ضمن مجموعة الإخراج {a,b,d} إذا كان أ > ب، // الناتج: {أ، ب، د} // اتحاد جميع (الداخل) خلفاء b1 => b2: {أ، ب}، و b3: {ب، د} // في: {أ، ب} ب2: ج = أ + ب؛ د = 2؛ // الناتج: {ب، د} // في: {ب، د} ب3: نهاية الشرط ج = 4؛ أعد b * d + c؛ // خارج:{} |
تحتوي الحالة الداخلية لـ b3 على b و d فقط ، نظرًا لكتابة c . أما الحالة الخارجية لـ b1 فهي اتحاد الحالتين الداخليتين لـ b2 و b3. يمكن حذف تعريف c في b2، لأن c لا يكون نشطًا مباشرةً بعد العبارة.
يبدأ حل معادلات تدفق البيانات بتهيئة جميع حالات الدخول والخروج إلى مجموعة فارغة. تُهيأ قائمة العمل بإضافة نقطة الخروج (b3) إليها (وهو أمر شائع في التدفق العكسي). تختلف حالة الدخول المحسوبة لهذه النقطة عن سابقتها، لذا تُضاف حالتا الدخول السابقتان b1 وb2، وتستمر العملية. يُلخص الجدول أدناه التقدم المُحرز.
| يعالج | خارج الولاية | كبار السن في الولاية | جديد داخل الولاية | قائمة العمل |
|---|---|---|---|---|
| ب3 | {} | {} | {ب، د} | (ب1، ب2) |
| ب1 | {ب، د} | {} | {} | (ب2) |
| ب2 | {ب، د} | {} | {أ، ب} | (ب1) |
| ب1 | {أ، ب، د} | {} | {} | () |
لاحظ أن b1 أُدخل في القائمة قبل b2، مما أجبر على معالجة b1 مرتين (أُعيد إدخال b1 باعتباره العنصر السابق لـ b2). كان إدخال b2 قبل b1 سيسمح بإكمال العملية في وقت أبكر.
تُعدّ التهيئة بالمجموعة الفارغة تهيئةً متفائلة، حيث تبدأ جميع المتغيرات كحالات فارغة. تجدر الإشارة إلى أن حالات الخروج لا يمكن أن تتقلص من تكرار إلى آخر، على الرغم من إمكانية أن تكون حالة الخروج أصغر من حالة الدخول. ويتضح ذلك من حقيقة أنه بعد التكرار الأول، لا يمكن أن تتغير حالة الخروج إلا بتغير حالة الدخول. وبما أن حالة الدخول تبدأ كمجموعة فارغة، فلا يمكنها إلا أن تكبر في التكرارات اللاحقة.
مناهج أخرى
تستخدم العديد من المترجمات الحديثة شكل التعيين الفردي الثابت كطريقة لتحليل تبعيات المتغيرات. [ 10 ]
في عام ٢٠٠٢، وصف ماركوس موهنين طريقة جديدة لتحليل تدفق البيانات لا تتطلب إنشاء رسم بياني صريح لتدفق البيانات، [ ١١ ] بل تعتمد على تفسير مجرد للبرنامج والاحتفاظ بمجموعة عمل من عدادات البرنامج. عند كل تفرع شرطي، تُضاف كلتا الهدفتين إلى مجموعة العمل. يُتبع كل مسار لأكبر عدد ممكن من التعليمات (حتى نهاية البرنامج أو حتى يدخل في حلقة تكرارية دون تغييرات)، ثم يُزال من المجموعة ويُسترجع عداد البرنامج التالي.
لقد أثبت الجمع بين تحليل تدفق التحكم وتحليل تدفق البيانات فائدته وتكامله في تحديد مناطق شفرة المصدر المتماسكة التي تنفذ وظائف النظام (مثل الميزات أو المتطلبات أو حالات الاستخدام ). [ 12 ]
أنواع خاصة من المسائل
توجد مجموعة متنوعة من الفئات الخاصة لمشاكل تدفق البيانات التي لها حلول فعالة أو عامة.
مشاكل المتجهات الثنائية
الأمثلة المذكورة أعلاه هي مسائل يكون فيها تدفق البيانات عبارة عن مجموعة، مثل مجموعة تعريفات الوصول (باستخدام بت لتحديد موضع التعريف في البرنامج)، أو مجموعة المتغيرات النشطة. يمكن تمثيل هذه المجموعات بكفاءة كمتجهات بت ، حيث يمثل كل بت انتماء عنصر معين إلى المجموعة. باستخدام هذا التمثيل، يمكن تنفيذ دالتي الربط والتحويل كعمليات منطقية على مستوى البت. عادةً ما تكون عملية الربط هي الاتحاد أو التقاطع، وتُنفذ باستخدام عمليتي " أو" و" و " المنطقيتين على مستوى البت . يمكن تقسيم دالة التحويل لكل كتلة إلى ما يُسمى بمجموعتي "التوليد" و "الحذف" .
على سبيل المثال، في تحليل المتغيرات الحية، تُسمى عملية الربط "الاتحاد". مجموعة الحذف هي مجموعة المتغيرات التي تُكتب في كتلة، بينما مجموعة التوليد هي مجموعة المتغيرات التي تُقرأ دون كتابتها أولاً. تصبح معادلات تدفق البيانات كما يلي:
في العمليات المنطقية، يُقرأ هذا على النحو التالي
out( b ) = 0 for s in succ( b ) out( b ) = out( b ) or in( s ) in( b ) = (out( b ) and not kill( b )) or gen( b )
تُسمى مسائل تدفق البيانات التي تحتوي على مجموعات من قيم تدفق البيانات التي يمكن تمثيلها كمتجهات ثنائية بمسائل المتجهات الثنائية ، أو مسائل التوليد والحذف ، أو المسائل القابلة للفصل محليًا . [ 13 ] لهذه المسائل حلول عامة في زمن متعدد الحدود. [ 14 ]
بالإضافة إلى مشاكل تعريفات الوصول والمتغيرات الحية المذكورة أعلاه، فإن المشاكل التالية هي أمثلة على مشاكل المتجهات الثنائية: [ 14 ]
- التعبيرات المتاحة
- تعابير وجه شديدة الانشغال
- سلاسل تعريف الاستخدام
مشاكل نظام IFDS
تُعدّ مسائل المجموعات الجزئية، أو مسائل المجموعات الجزئية المحدودة، أو مسائل IFDS، فئة أخرى من المسائل ذات حلول عامة متعددة الحدود. [ 13 ] [ 15 ] توفر حلول هذه المسائل تحليلات لتدفق البيانات حساسة للسياق وحساسة لتدفق البيانات.
هناك العديد من تطبيقات تحليلات تدفق البيانات القائمة على IFDS للغات البرمجة الشائعة، على سبيل المثال في إطار عمل Soot [ 16 ] و WALA [ 17 ] لتحليل Java.
كل مشكلة تتعلق بالمتجهات الثنائية هي أيضًا مشكلة IFDS، ولكن هناك العديد من مشاكل IFDS المهمة التي لا تعتبر مشاكل متجهات ثنائية، بما في ذلك المتغيرات الحية حقًا والمتغيرات التي ربما تكون غير مهيأة.
الحساسيات
عادةً ما يكون تحليل تدفق البيانات غير حساس للمسار، على الرغم من أنه من الممكن تحديد معادلات تدفق البيانات التي تؤدي إلى تحليل حساس للمسار.
- يأخذ التحليل الحساس لتدفق البرنامج في الاعتبار ترتيب التعليمات البرمجية. على سبيل المثال، قد يحدد تحليل أسماء المؤشرات غير الحساس لتدفق البرنامج أن "المتغيرين x و y قد يشيران إلى نفس الموقع"، بينما قد يحدد التحليل الحساس لتدفق البرنامج أن "المتغيرين x و y قد يشيران إلى نفس الموقع بعد التعليمات البرمجية رقم 20 ".
- يُجري التحليل الحساس للمسار حساباتٍ لمعلومات تحليلية مختلفة بناءً على الشروط في تعليمات التفرع الشرطي. على سبيل المثال، إذا احتوى فرعٌ ما على شرطٍ ما
x>0، فسيفترض التحليل في مسار التنفيذx<=0أن هذا الشرط صحيح، بينما سيفترض في هدف الفرع أن هذاx>0الشرط صحيحٌ بالفعل. - التحليل الحساس للسياق هو تحليل بين الإجراءات يأخذ في الاعتبار سياق الاستدعاء عند تحليل هدف استدعاء الدالة. على وجه الخصوص، باستخدام معلومات السياق، يمكن الرجوع إلى موقع الاستدعاء الأصلي، بينما بدون هذه المعلومات، يجب نشر معلومات التحليل إلى جميع مواقع الاستدعاء المحتملة، مما قد يؤدي إلى فقدان الدقة.
قائمة تحليلات تدفق البيانات
انظر أيضاً
مراجع
- ↑ كيلدال، غاري آرلين (مايو 1972). تحسين التعبيرات الشاملة أثناء الترجمة (أطروحة دكتوراه). سياتل، واشنطن، الولايات المتحدة الأمريكية: جامعة واشنطن ، قسم علوم الحاسوب. رقم الأطروحة 20506، رقم التقرير الفني 72-06-02.
- ↑ كيلدال، غاري آرلين (1973-10-01). "نهج موحد لتحسين البرامج العالمية" (ملف PDF) . وقائع الندوة السنوية الأولى لجمعية ACM SIGACT-SIGPLAN حول مبادئ لغات البرمجة - POPL '73 . الصفحات 194-206 . doi : 10.1145/512927.512945 . hdl : 10945/42162 . S2CID 10219496. مؤرشف (PDF) من الأصل بتاريخ 2017-06-29 . تم الاطلاع عليه بتاريخ 2006-11-20 . ()
- ↑ روثينغ، أوليفر؛ كنوب، ينس؛ ستيفن، برنارد (31 يوليو 2003) [1999]. "التحسين: اكتشاف تساوي المتغيرات، والجمع بين الكفاءة والدقة" . في: كورتيسي، أغوستينو؛ فيلي، جيلبرتو (محرران). التحليل الثابت: الندوة الدولية السادسة، SAS'99، البندقية، إيطاليا، 22-24 سبتمبر 1999، وقائع المؤتمر . سلسلة محاضرات في علوم الحاسوب. المجلد 1694 ( طبعة مصورة). سبرينغر. الصفحات 232-247 [233]. ISBN 9783540664598ISSN 0302-9743
- ↑ هيوت، روبرت؛ يوبانكس، جوردون ؛ رولاندر، توماس "توم" آلان ؛ لوز، ديفيد؛ ميشيل، هوارد إي.؛ هالا، برايان؛ وارتون، جون هاريسون ؛ بيرج، برايان؛ سو، ويليان؛ كيلدال، سكوت ؛ كامبي، بيل (25 أبريل 2014). لوز، ديفيد (محرر). "إرث غاري كيلدال: إهداء IEEE لمعلم CP/M" (ملف PDF) (نص الفيديو). باسيفيك غروف، كاليفورنيا، الولايات المتحدة الأمريكية: متحف تاريخ الحاسوب . رقم مرجع CHM: X7170.2014 . تاريخ الاسترجاع : 19 يناير 2020.
[...]
يوبانكس
: [...]
غاري
[...] كان مخترعًا، وكان مبدعًا، وكان يُنجز. أثبتت أطروحته للدكتوراه أن تحليل التدفق العالمي يتقارب. [...] هذه فكرة أساسية في علوم الحاسوب. […] حضرتُ دورةً صيفيةً ذات مرة مع شخص يُدعى
دامدهير
[…] تحدثوا عن التحسين لمدة أسبوع تقريبًا، ثم عرضوا شريحةً وقالوا: "طريقة كيلدال"، هذه هي القصة الحقيقية. […] هذا شيء لا يفكر فيه أحدٌ أبدًا. […]
(33 صفحة)
- ↑ كيلدال، غاري أ. (1973). "نهج موحد لتحسين البرامج العالمية". وقائع الندوة السنوية الأولى لجمعية ACM SIGACT-SIGPLAN حول مبادئ لغات البرمجة - POPL '73 . الصفحات 194-206 . doi : 10.1145/512927.512945 . hdl : 10945/42162 .
- ↑ أهو، ألفريد ف.؛ لام، مونيكا س.؛ سيثي، رافي؛ أولمان، جيفري د. (2006). المترجمات: المبادئ والتقنيات والأدوات (الطبعة الثانية). بيرسون. ISBN 978-0321486813.
- ^ نيلسون، فليمنج. نيلسون، هان ر. هانكين، كريس (2005). مبادئ تحليل البرامج. سبرينغر. ردمك 978-3540654100.
- ↑ موشنيك، ستيفن س. (1997). تصميم وتنفيذ المترجمات المتقدمة. مورغان كوفمان. ISBN 978-1558603202.
- ↑ كوبر، كيث د .؛ هارفي، تيموثي ج.؛ كينيدي، كين (26 مارس 2004) [نوفمبر 2002]. "تحليل تدفق البيانات التكراري، مُعاد النظر فيه" (ملف PDF) . PLDI 2003. ACM . TR04-432 . تاريخ الاسترجاع: 1 يوليو 2017 .
- ↑ "التعيين الفردي الثابت (مع أمثلة ذات صلة)" . GeeksforGeeks . 2021-10-02 . تم الاسترجاع في 2023-08-16 .
- ↑ موهنين، ماركوس (2002). "نهج تحليل تدفق البيانات بدون استخدام الرسوم البيانية". بناء المترجمات . سلسلة محاضرات في علوم الحاسوب. المجلد 2304. الصفحات 185-213 . doi : 10.1007/3-540-45937-5_6 . ISBN 978-3-540-43369-9.
- ↑ كوانغ، هونغيو؛ مادير، باتريك؛ هو، هاو؛ غابي، أشرف؛ هوانغ، ليغو؛ لو، جيان؛ إيغيد، ألكسندر (2015-11-01). "هل يمكن لاعتمادات بيانات الأساليب أن تدعم تقييم إمكانية التتبع بين المتطلبات وشفرة المصدر؟". مجلة البرمجيات: التطور والعملية . 27 (11): 838-866 . doi : 10.1002/smr.1736 . ISSN 2047-7481 . S2CID 39846438 .
- 1 2 ريبس، توماس؛ هورويتز، سوزان؛ ساغيف، مولي (1995). "تحليل دقيق لتدفق البيانات بين الإجراءات عبر إمكانية الوصول إلى الرسم البياني". وقائع الندوة الثانية والعشرين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة - POPL '95 . نيويورك، نيويورك، الولايات المتحدة الأمريكية: مطبعة ACM . الصفحات 1، 49-61 . doi : 10.1145/199448.199462 . ISBN 0-89791692-1. S2CID 5955667 .
- 1 2 كنوب، ينس؛ ستيفن، برنارد ؛ فولمر، يورغن (1996-05-01). "التوازي مجانًا: تحليلات متجهات البت الفعالة والمثلى للبرامج المتوازية" . معاملات ACM في لغات البرمجة والأنظمة . 18 (3): 268-299 . doi : 10.1145/229542.229545 . ISSN 0164-0925 . S2CID 14123780 .
- ↑ نعيم، نومير أ.؛ لهوتاك، أوندري؛ رودريغيز، جوناثان (2010)، "امتدادات عملية لخوارزمية IFDS"، بناء المترجمات ، سلسلة محاضرات في علوم الحاسوب، المجلد 6011، برلين/هايدلبرغ، ألمانيا: سبرينغر فيرلاغ ، الصفحات 124-144 ، doi : 10.1007/978-3-642-11970-5_8 ، ISBN 978-3-64211969-9
- ↑ بودين، إريك (2012). "تحليل تدفق البيانات بين الإجراءات باستخدام IFDS/IDE وSoot". وقائع ورشة عمل ACM SIGPLAN الدولية حول أحدث التقنيات في تحليل برامج جافا . نيويورك، نيويورك، الولايات المتحدة الأمريكية: مطبعة ACM . الصفحات 3-8 . doi : 10.1145/2259051.2259052 . ISBN 978-1-45031490-9. S2CID 3020481 .
- ↑ رابوبورت، ماريانا؛ لهوتاك، أوندري؛ تيب، فرانك (2015). تحليل دقيق لتدفق البيانات في وجود استدعاءات طرق مترابطة . ندوة التحليل الثابت الدولية. سلسلة محاضرات في علوم الحاسوب. المجلد 9291. برلين / هايدلبرغ، ألمانيا: سبرينغر فيرلاغ . الصفحات 54-71 . doi : 10.1007/978-3-662-48288-9_4 . ISBN 978-3-66248287-2.
للمزيد من القراءة
- كوبر، كيث د .؛ توركزون، ليندا (2003) [2002-01-01]. هندسة المترجمات . مورغان كوفمان . ISBN 978-1-55860-698-2.
- موشنيك، ستيفن ستانلي (1997). تصميم وتنفيذ المترجمات المتقدمة . دار مورغان كوفمان للنشر . رقم ISBN 978-1-55860-320-2.
- هيشت، ماثيو س. (3 مايو 1977). تحليل تدفق برامج الحاسوب . سلسلة لغات البرمجة. المجلد 5. دار نشر إلسيفير نورث هولاند. رقم ISBN 978-0-44400210-5.
- خيدكر، أوداي ب.؛ سانيال، أميتابها؛ كاركاري، باجيشري (2009). تحليل تدفق البيانات: النظرية والتطبيق . مطبعة سي آر سي ( مجموعة تايلور وفرانسيس ).
- نيلسون، فليمنج؛ نيلسون، هان ريس ؛ هانكين، كريس (2005). مبادئ تحليل البرامج . سبرينغر ساينس + بيزنس ميديا .
- تحليل تدفق البيانات
- تحسينات المُترجم
