سؤال

متى يأتي شخصيا على وقف المشكلة في الميدان ؟ هذا يمكن أن يكون عند زميل / مدرب اقترح الحل الذي من شأنه أن ينتهك الحدود الأساسية من حساب ، أو عندما أدركت نفسك أن المشكلة التي تحاول حلها ، في الواقع ، من المستحيل حلها.

آخر مرة جاء مع أنه كان عند دراسة نوع من لعبة الداما.لدينا فئة أدركت أنه سيكون من المستحيل أن أكتب نوع مثالي مدقق (واحد من شأنه أن يقبل جميع البرامج التي سوف تعمل دون نوع الأخطاء ، ورفض كافة البرامج التي من شأنها أن تعمل مع نوع الأخطاء) لأن هذا سوف, في الواقع, حل مشكلة لوقف.وكان آخر عندما أدركنا في نفس الفئة ، التي سيكون من المستحيل تحديد ما إذا كان التقسيم قد تحدث من قبل الصفر ، في تدقيق النوع المرحلة ، لأن التحقق من ما إذا كان عدد, في وقت التشغيل, صفر, هو أيضا نسخة من وقف المشكلة.

هل كانت مفيدة؟

المحلول

أنا حرفيا يجب تعيين وقف المشكلة ، كما في "كتابة رصد المساعد لتحديد ما إذا كان المضيف هو دائم أسفل".على محمل الجد ؟ حسنا, سوف تعطي فقط هو عتبة."لا, لأنه قد يعود بعد ذلك."

الكثير من معرض النظري تلت ذلك.

نصائح أخرى

منذ سنوات, أتذكر قراءة استعراض (في مجلة Byte, أعتقد) من منتج يسمى الأساسي حلقة لانهائية الباحث أو BILF.BILF كان من المفترض أن تفحص Microsoft Basic البرمجية المصدر و تجد أي الحلقات التي لم تنهي.فإنه ادعى أن تتمكن أي من العثور على أي حلقات لانهائية في المدونة.

المراجع كان من الدهاء ما يكفي أن نشير إلى أن هذا البرنامج يعمل في جميع الحالات ، سيكون لديك لحل مشكلة وقف و ذهب أبعد من ذلك إلى تقديم البرهان الرياضي لماذا لا يعمل في جميع الحالات.

في العدد القادم ، نشروا رسالة من ممثل الشركة موضحا أن المشكلة تم إصلاحها في الإصدار التالي.

تحديث: ركضت عبر صورة من هذه المادة على imgur.تذكرت الخطأ مجلة.كان الإبداعية الحوسبة ، وليس بايت.خلاف ذلك, انها تقريبا كما تذكرت ذلك.

يمكنك ان ترى hi-res نسخة منه على imgur.

enter image description here enter image description here

في مشروع أعمل عليه الآن وقد غير مقرر المشاكل في كل ذلك.انها وحدة اختبار المولد, في ذلك العام ما تحاول تحقيقه هو الإجابة على السؤال "ماذا يفعل هذا البرنامج".وهو مثيل ووقف المشكلة.مشكلة أخرى ظهرت خلال التنمية "يتم إعطاء اثنين (اختبار) وظائف نفس"?أو حتى "هل ترتيب هذين المكالمات (التأكيدات) المسألة"?

ما هو المثير للاهتمام حول هذا المشروع هو أنه حتى لو كنت لا يمكن الإجابة على هذه الأسئلة في كل الحالات ، يمكن تجد الحلول الذكية حل مشكلة 90% من الوقت الذي هذا المجال هو في الواقع جيدة جدا.

وغيرها من الأدوات التي تحاول أن سبب عن رمز آخر ، مثل تحسين المجمعين/المترجمين الفوريين رمز ثابت أدوات التحليل ، حتى إعادة بيع ديون أدوات المرجح أن ضرب (وبالتالي ستضطر لايجاد الحلول) وقف المشكلة.

المثال 1.كيف العديد من الصفحات في التقرير ؟

عندما كنت تعلم برنامج لعبت مع صنع أداة لطباعة جميلة تقارير من البيانات.ومن الواضح أن أردت حقا أن تكون مرنة وقوية لذلك سيكون التقرير مولد نهاية كل تقرير المولدات.

تعريف التقرير انتهى مرنة بحيث كان تورينج كاملة.ويمكن أن ننظر إلى المتغيرات الاختيار بين البدائل ، استخدام الحلقات إلى تكرار الأشياء.

تعريف المدمج في المتغير N ، عدد الصفحات في التقرير على سبيل المثال ، إذا كنت قد وضعت سلسلة وقالت صفحة "ن ن" على كل صفحة.لا يمر الأولى لحساب الصفحات (حيث N هو تعيين إلى صفر) والثانية في الواقع يولد لهم باستخدام N الحصول عليها من تمر أولا.

في بعض الأحيان يمر أولا أن حساب N, ثم الثاني تمريرة من شأنه أن يولد عدد مختلف من الصفحات (لأنه الآن غير الصفر ن أن تغيير ما لم التقرير).حاولت القيام يمر تكرارا حتى ن استقر.ثم أدركت أن هذا كان ميئوسا منه لأن ما إذا لم تستقر ؟

ثم هذا يؤدي إلى السؤال: "هل يمكنني على الأقل الكشف عن تحذير المستخدم إذا كان التكرار لن يستقر على استقرار قيمة عدد صفحات التقرير تنتج?" لحسن الحظ قبل هذا الوقت كنت قد تصبح مهتمة في القراءة عن تورينج ، غودل, computability.... الخوجعل اتصال.

سنوات في وقت لاحق لاحظت أن مرض التصلب العصبي المتعدد الوصول في بعض الأحيان يطبع "صفحة 6 من 5" ، الذي هو حقا شيء رائع.

مثال 2:C++ compilers

عملية تجميع ينطوي على توسيع القوالب.قالب التعاريف يمكن اختيارها من متعددة التخصصات (جيد بما فيه الكفاية لتكون بمثابة "كوند") و يمكن أيضا أن تكون متكررة.لذلك هو تورينج كاملة (الوظيفية البحتة) الفوقية التي القالب تعريفات اللغة ، أنواع هي القيم و المترجم هو حقا مترجم.كان هذا حادث.

وبالتالي ليس من الممكن أن تدرس أي C++ برنامج و أقول ما إذا كان المترجم يمكن من حيث المبدأ أن ينهي بنجاح تجميع البرنامج.

مترجم البائعين الحصول على حول هذا عن طريق الحد من كومة عمق القالب العودية.يمكنك ضبط عمق في g++.

العديد من أقمار عديدة مضت كنت مساعدة مستشار الشركة الذين تم تنفيذ معقدة جدا نظام السكك الحديدية لنقل سلال من أجزاء معدنية من 1500 درجة فرن الانفجار.المسار نفسه كانت معقدة إلى حد ما 'ميني-railyard على متجر الكلمة التي تتقاطع نفسها في عدة أماكن.العديد من المنصات الآلية من شأنه نقل سلال حول أجزاء وفقا لجدول زمني.كان من المهم جدا أن الفرن الأبواب كانت مفتوحة لمدة أقصر وقت ممكن.

منذ المصنع في الإنتاج الكامل ، مستشار كان غير قادر على تشغيل البرنامج له في "الوقت الحقيقي" على اختبار خوارزميات الجدولة.بدلا من ذلك, كتب جميلة الرسم-y محاكاة.كما شاهدنا الظاهري المنصات التحرك على الشاشة تخطيط المسار ، سألت "كيف يمكنك معرفة إذا كان لديك أي جدولة الصراعات؟"

له إجابة سريعة ، "من السهل - المحاكاة لن تتوقف".

متطورة تحليل رمز ثابت يمكن أن تصل إلى وقف هذه المشكلة.

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

هذا لا يزال يمثل مشكلة بالنسبة تظليل في GPU التطبيقات.إذا تظليل وقد حلقة لا نهائية (أو طويل جدا حساب) أن السائق (بعد بعض الوقت الحد) توقف عن ذلك, قتل جزء ، أو مجرد السماح لها تشغيل ؟ الألعاب وغيرها من الأشياء التجارية السابق هو على الارجح ما تريد ، ولكن بالنسبة العلمية/GPU computing ، وهذا الأخير هو ما تريد.والأسوأ من ذلك أن بعض إصدارات ويندوز نفترض أنه منذ تشغيل الرسومات قد لا تستجيب لبعض الوقت ، فإنه يقتل ، مما يحد بشكل مصطنع قوة الحوسبة عند القيام على حساب GPU.

لا يوجد API من أجل تطبيق للتحكم في كيفية السائق يجب أن تتصرف أو تعيين مهلة أو ما شابه, و بالتأكيد لا يوجد طريقة للسائق معرفة إذا تظليل هو الذهاب الى النهاية أم لا.

أنا لا أعرف إذا كان هذا الوضع قد تحسن في الآونة الأخيرة, ولكن أود أن أعرف.

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

هناك طرق جزئيا "حل" الجمود في نظام معقد من خلال فرض طبقة أخرى على رأس قفل (مثل المعرفة من أجل اكتساب) ، ولكن هذه الطرق ليست دائما قابلة للتطبيق.


لماذا هذا هو ما يعادل وقف المشكلة:

تخيل أن لديك اثنين من الأقفال ، و ب ، و اثنين من المواضيع ، X و Y.إذا كان موضوع × قد قفل ، ويريد قفل ب أيضا ، و الخيط Y قد قفل ب و يريد أيضا, ثم لديك طريق مسدود.

إذا كان كل من X و Y الوصول إلى كل من A و B ، فإن الطريقة الوحيدة للتأكد من أنك لا تحصل في حالة سيئة هو تحديد جميع المسارات الممكنة أن كل خيط يمكن أن يستغرق من خلال الكود و الترتيب الذي يمكنهم من الحصول على الاستمرار في تأمين كل تلك الحالات.ثم يمكنك تحديد ما إذا كان اثنين من المواضيع يمكن من أي وقت مضى الحصول على أكثر من واحد قفل في ترتيب مختلف.

ولكن تحديد جميع المسارات الممكنة أن كل خيط يمكن أن يستغرق من خلال رمز (في الحالة العامة) أي ما يعادل وقف المشكلة.

Perl اختبار نظام يحافظ اختبار العداد.يمكنك إما وضع عدد من الاختبارات التي سوف تواجهها في أعلى البرنامج ، أو عليك أن تعلن أنك لن تتبع ذلك.هذا الاحتراس الاختبار الخروج قبل الأوان ، ولكن هناك حراس آخرين حتى انها ليست بتلك الأهمية.

كل مرة واحدة في حين يحاول شخص ما كتابة برنامج لحساب عدد من الاختبارات بالنسبة لك.هذا هو بالطبع هزم من قبل حلقة بسيطة.أنها المضي قدما على أي حال, تفعل أكثر تفصيلا الحيل في محاولة الكشف عن الحلقات و تخمين عدد التكرارات سوف يكون هناك حل لوقف المشكلة.وعادة ما تعلن أنها فقط أن تكون "جيدة بما فيه الكفاية".

وهنا لا سيما وضع المثال.

أنا مرة كنت تعمل على مشروع التكامل في أجهزة الصراف الآلي (الصراف الآلي) المجال.العميل طلب مني أن إنشاء تقرير من نظام المعاملات المرسلة من قبل البلد التبديل التي لا تلقى من قبل النظام!!

وجدت بيركلي الورق: وبير:خفيفة الوزن الكشف عن حلقات لانهائية في وقت التشغيل http://www.eecs.berkeley.edu/~jburnim/pubs/BurnimJalbertStergiouSen-ASE09.pdf

وبير قد تكون مفيدة لأن معظم الحلقات اللانهائية هي تافهة الأخطاء.ومع ذلك ، فإن هذه الورقة لا يذكر حتى وقف مشكلة!

ماذا يقولون عن حدودها ؟

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

وبعبارة أخرى, "سيتم إصلاح المشكلة في الإصدار القادم".

من وظيفية عامة (الكسوف) محرر البصرية:

الكسوف محرر البصرية (VE) يمكن أن يكون تستخدم لفتح أي .ملف جافا.ثم يوزع جافا شفرة المصدر تبحث البصرية الفاصوليا....

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

الكسوف VE, ومع ذلك ، ...يمكن أن تكون إما تستخدم لتحرير واجهات من الصفر ، أو من جافا الملفات التي تم 'ضمنية أو بنيت في مختلف أداة بصرية.المصدر ملف يمكن أن إما أن يكون محدث استخدام رسومية المشاهد ، JavaBeans شجرة أو خصائص عرض أو يمكن تحريرها مباشرة قبل محرر المصدر.

ربما يجب أن العصا مع ماتيس الآن.

لا علاقة لها هنا شخص يسأل عن وقف المشكلة في الكسوف.

لكي نكون منصفين, VE هذا المجال محدودة جدا ، ربما لن يذهب مجنون أكثر الأمور صعبة مثل التفكير.لا تزال المطالبة لبناء واجهة المستخدم الرسومية من أي الملف java يبدو وقف العش.

"كيف يمكنك أن تؤكد لي الكود الخاص بك هو 100 ٪ خالية من الحشرات؟"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top