2010-12-15 17 views
23

मैं एक स्टैक ओवरफ़्लो प्रश्न, How does differential execution work? पर ठोकर खाई, जिसमें बहुत लंबा और विस्तृत उत्तर है। यह सब समझ में आया ... लेकिन जब मैं किया गया था तब भी मुझे नहीं पता था कि बिल्ली वास्तव में निष्पादन निष्पादन क्या है। वास्तव में यह क्या हैअंतर निष्पादन क्या है?

+1

आप उन उत्तरों पर और स्पष्टीकरण टिप्पणी के लिए पूछ सकते हैं ... –

+0

फिर भी मैं इसे पूरा करने की कोशिश करना चाहता हूं? संभावित स्पष्टीकरण के रूप में आपके मन में क्या था? –

उत्तर

15

REVISED। यह मेरी व्याख्या करने का मेरा एनएच प्रयास है।

मान लीजिए कि आपके पास एक सरल निर्धारिक प्रक्रिया है जो बार-बार निष्पादित होती है, हमेशा कथन निष्पादन या प्रक्रिया कॉल के समान अनुक्रम का पालन करती है। प्रक्रिया कॉल खुद को कुछ भी वे एक फीफो को क्रमिक रूप से चाहते हैं लिखते हैं, और वे फीफो के दूसरे छोर से बाइट्स की एक ही नंबर पढ़ा है, इस तरह: **

enter image description here

प्रक्रियाओं का उपयोग कर रहे हैं बुलाया जा रहा है फीफो को स्मृति के रूप में, क्योंकि वे जो भी पढ़ते हैं वह वही है जो उन्होंने पूर्व निष्पादन पर लिखा था। इसलिए यदि अंतिम बार से उनके तर्क अलग-अलग होते हैं, तो वे उसे देख सकते हैं, और उस जानकारी के साथ जो कुछ भी चाहते हैं वह कर सकते हैं।

इसे शुरू करने के लिए, प्रारंभिक निष्पादन होना चाहिए जिसमें केवल लेखन होता है, कोई पढ़ना नहीं होता है। समरूप रूप से, एक अंतिम निष्पादन होना चाहिए जिसमें केवल पढ़ने के लिए, कोई लेखन नहीं होता है।

enter image description here

प्रारंभिक निष्पादन मोड में किया जाता है, इसलिए केवल लेखन: तो वहाँ एक "वैश्विक" मोड दो बिट्स, एक है कि पढ़ने में सक्षम बनाता है और एक कि लेखन के लिए सक्षम बनाता युक्त रजिस्टर, इस तरह है पूरा हो गया है। प्रक्रिया कॉल मोड देख सकते हैं, इसलिए उन्हें पता है कि कोई पूर्व इतिहास नहीं है। यदि वे ऑब्जेक्ट्स बनाना चाहते हैं, तो वे एफआईएफओ में पहचान जानकारी डाल सकते हैं (चर में स्टोर करने की आवश्यकता नहीं है)।

इंटरमीडिएट निष्पादन मोड में किया जाता है, इसलिए पढ़ने और लिखने दोनों होते हैं, और प्रक्रिया कॉल डेटा परिवर्तनों का पता लगा सकते हैं। यदि ऑब्जेक्ट्स को अद्यतित रखा जाना है, उनकी पहचान जानकारी FIFO, से पढ़ी जाती है और लिखी जाती है ताकि उन्हें एक्सेस किया जा सके और यदि आवश्यक हो, संशोधित किया जा सके।

अंतिम निष्पादन मोड मोड में किया जाता है, इसलिए केवल पढ़ने होता है। उस मोड में, प्रक्रिया कॉल कहती है कि वे बस सफाई कर रहे हैं। यदि कोई ऑब्जेक्ट बनाए रखा गया था, तो उनके पहचानकर्ता फीफो से पढ़े जाते हैं, और उन्हें हटाया जा सकता है।


लेकिन वास्तविक प्रक्रियाएं हमेशा एक ही अनुक्रम का पालन नहीं करती हैं। उनमें आईएफ कथन शामिल हैं (और वे जो भी करते हैं उसके भिन्न तरीके)। इसे कैसे संभाला जा सकता है?

उत्तर एक विशेष प्रकार का आईएफ स्टेटमेंट (और इसका समापन ENDIF स्टेटमेंट) है। यहां बताया गया है कि यह कैसे काम करता है। यह अपनी परीक्षण अभिव्यक्ति के बूलियन मान को लिखता है, और यह उस मान को पढ़ता है जो परीक्षण अभिव्यक्ति पिछली बार थी। इस तरह, यह बता सकता है कि परीक्षण अभिव्यक्ति बदल गई है, और कार्रवाई करें। यह कार्रवाई अस्थायी रूप से मोड रजिस्टर को बदलती है।

enter image description here

विशेष रूप से, एक्स परीक्षण अभिव्यक्ति की पूर्व मूल्य, फीफो से पढ़ा है, और (पढ़ने, और 0 सक्षम है) y परीक्षण अभिव्यक्ति के वर्तमान मूल्य है, फीफो को लिखा गया है (यदि लेखन सक्षम है)। (वास्तव में, अगर लेखन सक्षम नहीं है, परीक्षण अभिव्यक्ति भी मूल्यांकन नहीं किया जाता है, और y 0. है) फिर एक्स,, w y बस मास्क मोड रजिस्टर आर। इसलिए यदि परीक्षण अभिव्यक्ति में को ट्रू टू फाल्स से बदल दिया गया है, तो शरीर को केवल-पढ़ने के मोड में निष्पादित किया जाता है। इसके विपरीत यदि यह गलत से सच्चाई में बदल गया है, तो शरीर को केवल-लिखने के तरीके में निष्पादित किया जाता है। यदि परिणाम है, तो IF..ENDIF कथन के अंदर कोड छोड़ दिया गया है। (आप शायद इस बारे में कुछ सोचना चाहें कि इसमें सभी मामलों को शामिल किया गया है - यह करता है।)

यह स्पष्ट नहीं हो सकता है, लेकिन इन IF..ENDIF विवरणों को मनमाने ढंग से घोंसला दिया जा सकता है, और उन्हें अन्य सभी तक बढ़ाया जा सकता है ईएलएसई, स्विच, WHILE, के लिए सशर्त बयान के प्रकार, और यहां तक ​​कि पॉइंटर-आधारित कार्यों को कॉल करना। यह भी मामला है कि प्रक्रिया को किसी भी हद तक वांछित, उपर्युक्त प्रक्रियाओं में विभाजित किया जा सकता है, जब तक कि मोड का पालन किया जाता है।

(वहाँ एक नियम है कि पालन किया जाना चाहिए है, मिटा मोड नियम है, जो कि मोड इस तरह के एक सूचक निम्न या किसी सरणी का अनुक्रमण के रूप में कोई भी परिणाम की कोई गणना, में, किया जाना चाहिए है कहा जाता है संकल्पनात्मक रूप से, कारण यह है कि मोड केवल सामान से छुटकारा पाने के उद्देश्य से मौजूद है।)

तो यह एक दिलचस्प नियंत्रण संरचना है जिसका उपयोग परिवर्तनों का पता लगाने के लिए किया जा सकता है, आम तौर पर डेटा में परिवर्तन, और कार्रवाई वे परिवर्तन


ग्राफिकल यूजर इंटरफेस में इसका उपयोग प्रोग्राम राज्य की जानकारी के साथ नियंत्रण में कुछ नियंत्रण या अन्य वस्तुओं को रखने के लिए है। उस उपयोग के लिए, तीन मोड को SHOW (01), अद्यतन (11), और ERASE (10) कहा जाता है। प्रक्रिया प्रारंभ में SHOW मोड में निष्पादित की जाती है, जिसमें नियंत्रण बनाए जाते हैं, और उनके लिए प्रासंगिक जानकारी फीफो को पॉप्युलेट करती है। फिर अद्यतन मोड में किसी भी संख्या में निष्पादन किए जाते हैं, जहां नियंत्रण राज्य के साथ अद्यतित रहने के लिए आवश्यकतानुसार संशोधित किया जाता है। अंत में, ERASE मोड में निष्पादन होता है, जिसमें यूआई से नियंत्रण हटा दिए जाते हैं, और फीफो खाली हो जाता है।

enter image description here

ऐसा करने का लाभ कि, एक बार आप, सभी नियंत्रण बनाने के लिए कार्यक्रम के राज्य के एक समारोह के रूप में प्रक्रिया लिखा है, आप के लिए कुछ और लिखने के लिए नहीं है इसे अद्यतन या बाद में साफ रखें। जो भी आपको लिखना नहीं है, उसे गलतियों को कम करने का मौका है। (ईवेंट इनपुट हैंडलर लिखने और उनके लिए नाम बनाने के बिना उपयोगकर्ता इनपुट ईवेंट को संभालने का एक सीधा तरीका है। यह नीचे दिए गए वीडियो में से एक में समझाया गया है।)

स्मृति प्रबंधन के मामले में, आप नहीं करते हैं नियंत्रण रखने के लिए परिवर्तनीय नाम या डेटा संरचना बनाना है।यह वर्तमान में दृश्यमान नियंत्रणों के लिए केवल एक ही समय में पर्याप्त संग्रहण का उपयोग करता है, जबकि संभावित दृश्य नियंत्रण असीमित हो सकता है। इसके अलावा, पहले इस्तेमाल किए गए नियंत्रणों के कचरे के संग्रह के बारे में कभी भी कोई चिंता नहीं है - एफआईएफओ स्वचालित कचरा कलेक्टर के रूप में कार्य करता है।

प्रदर्शन के संदर्भ में, जब यह नियंत्रण बना रहा है, हटा रहा है या संशोधित कर रहा है, तो वह समय व्यतीत कर रहा है जिसे वैसे भी खर्च किया जाना चाहिए। जब यह केवल नियंत्रण अपडेट कर रहा है, और कोई बदलाव नहीं है, तो पढ़ने, लिखने और तुलना करने के लिए आवश्यक चक्रों को बदलने के नियंत्रण की तुलना में सूक्ष्मदर्शी हैं।

घटनाओं के जवाब में प्रदर्शित करने वाले सिस्टम के सापेक्ष एक और प्रदर्शन और शुद्धता विचार, यह है कि इस तरह के एक सिस्टम के लिए प्रत्येक घटना का जवाब दिया जाना चाहिए, और कोई भी दो बार नहीं, अन्यथा प्रदर्शन गलत होगा, भले ही कुछ घटना अनुक्रम स्व-रद्द हो सकता है। अंतर निष्पादन के तहत, अद्यतन पास अक्सर वांछित के रूप में या शायद ही कभी किया जा सकता है, और पास के अंत में प्रदर्शन हमेशा सही होता है।


यहाँ एक बहुत ही संक्षिप्त उदाहरण है, जहां 4 बटन, जिनमें से बटन 2 और 3 एक बूलियन चर पर सशर्त हैं देखते हैं है।

  1. पहले पास में, शो मोड में, बूलियन झूठा है, इसलिए केवल बटन 1 और 4 दिखाई देते हैं।
  2. फिर बूलियन सत्य पर सेट हो गया है और पास 2 अपडेट मोड में किया जाता है, जिसमें बटन 2 और 3 तत्काल होते हैं और बटन 4 स्थानांतरित हो जाते हैं, वही परिणाम देते हैं जैसे बूलियन पहले पास पर सत्य था।
  3. फिर बूलियन झूठा सेट किया गया है और पास 3 अपडेट मोड में किया जाता है, जिसके कारण बटन 2 और 3 को हटाया जाता है और बटन 4 को पहले स्थानांतरित करने के लिए वापस ले जाया जाता है।
  4. आखिरकार 4 पास मिटाएं मोड में किया जाता है, जिससे सब कुछ गायब हो जाता है।

(इस उदाहरण में, परिवर्तन उलटे क्रम में बिगड़ गए के रूप में वे किया गया था, लेकिन वह आवश्यक नहीं है। परिवर्तन किसी भी क्रम में बना है और परिवर्तित किया जा सकता है।)

ध्यान दें कि, सब पर कई बार, एफआईएफओ, जिसमें पुराने और नए समेकित होते हैं, में दृश्यमान बटन और बूलियन मान के बिल्कुल पैरामीटर होते हैं।

इसका बिंदु यह दिखाने के लिए है कि बिना किसी बदलाव के, "पेंट" प्रक्रिया का उपयोग बिना किसी बदलाव के, मनमाने ढंग से स्वचालित वृद्धिशील अद्यतन और मिटाने के लिए किया जा सकता है। मुझे आशा है कि यह स्पष्ट है कि यह उप-प्रक्रिया कॉल की मनमाने ढंग से गहराई के लिए काम करता है, और switch, while और for लूप, पॉइंटर-आधारित फ़ंक्शंस आदि को कॉल करने सहित सशर्तों के मनमाने ढंग से घोंसले के लिए काम करता है। यदि मुझे यह समझा देना है, तो मैं स्पष्टीकरण को बहुत जटिल बनाने के लिए potshots के लिए खुला हूँ।

enter image description here

अंत में, जोड़ी कच्चे लेकिन कम videos posted here हैं।

** तकनीकी रूप से, उन्हें पिछली बार लिखे गए बाइट्स की संख्या को पढ़ना होगा। इसलिए, उदाहरण के लिए, उन्होंने एक चरित्र गणना से पहले एक स्ट्रिंग लिखी हो सकती है, और यह ठीक है।


जोड़ा गया: यह सुनिश्चित करने में मुझे काफी समय लगा कि यह हमेशा काम करेगा। मैंने अंततः इसे साबित कर दिया। यह सिंक संपत्ति पर आधारित है, जिसका अर्थ है कि कार्यक्रम में किसी भी बिंदु पर पूर्व पास पर लिखे गए बाइट्स की संख्या बाद के पास पढ़ने वाले नंबर के बराबर होती है। सबूत के पीछे विचार कार्यक्रम की लंबाई पर प्रेरण से करना है। सबसे कठिन मामला साबित करने के लिए एस 1 एक के बाद से मिलकर कार्यक्रम के एक हिस्से का मामला है, तो (परीक्षण) s2 endif, जहां एस 1 और s2 कार्यक्रम के उप-अनुभागों हैं, प्रत्येक संतोषजनक सिंक संपत्ति। में यह ऐसा करने के लिए केवल-पाठ आंख ग्लेज़िंग है, लेकिन यहाँ मैं यह आरेख के लिए कोशिश की है: enter image description here

यह सिंक संपत्ति को परिभाषित करता है, और लिखा गया है और प्रत्येक बिंदु पर पढ़े गए बाइट की संख्या से पता चलता कोड, और दिखाता है कि वे बराबर हैं। मुख्य बिंदु यह हैं कि 1) वर्तमान पास पर पढ़ने वाले परीक्षण अभिव्यक्ति (0 या 1) का मान पूर्व पास पर लिखे गए मान के बराबर होना चाहिए, और 2) की स्थिति सिंक (एस 2) संतुष्ट है। यह संयुक्त प्रोग्राम के लिए सिंक संपत्ति को संतुष्ट करता है।

+0

मुझे लगता है कि आपके स्पष्टीकरण के साथ समस्या यह है कि आप कार्यान्वयन के विवरण में बहुत गहरी जानकारी देते हैं। 01, 10 और 11 वास्तव में महत्वपूर्ण नहीं हैं, यहां तक ​​कि एफआईएफओ मुख्य विचार के लिए प्रासंगिक नहीं है, यह तत्वों के लिए राज्य को स्टोर करने का एक आसान तरीका है। कार्यक्षमता वही होगी यदि प्रत्येक UI तत्व का राज्य अलग से संग्रहीत किया गया था और फिर बस इसके प्रतिपादन के लिए निर्देशों को छोड़ दें। @ जीन के "दुभाषिया" स्पष्टीकरण वास्तव में विचार को थोड़ा स्पष्ट बताते हैं, आईएमएचओ; फीफो में लिखे गए डेटा मूल रूप से निर्देशों को प्रस्तुत कर रहे हैं जिनका व्याख्या किया जाएगा। – Groo

+0

@ ग्रूओ: आपके इनपुट के लिए धन्यवाद। यह हमेशा एक पहेली है, इसे कैसे पेश किया जाए। असली बात यह है कि यह एक डोमेन-विशिष्ट भाषा है, लेकिन इसे काम करने के लिए एक नियंत्रण संरचना की आवश्यकता होती है, और कुछ कठोर (जो अच्छे हैं) पाठक हैं जो सोचेंगे कि यह हूई है जब तक कि मैं इसे समझाऊं। –

7

मैं उन सभी चीजों को पढ़ता हूं जिन्हें मैं ढूंढ सकता हूं और वीडियो देख सकता हूं और पहले सिद्धांतों के विवरण पर एक शॉट लेगा।

अवलोकन

यह एक साफ, कुशल तरीके से यूजर इंटरफेस और शायद अन्य राज्य उन्मुख उप लागू करने के लिए एक डीएसएल आधारित डिजाइन पैटर्न है। यह वर्तमान प्रोग्राम स्थिति से मेल खाने के लिए जीयूआई कॉन्फ़िगरेशन को बदलने की समस्या पर केंद्रित है, जहां उस राज्य में जीयूआई विजेट की स्थिति शामिल है, उदा। उपयोगकर्ता टैब, रेडियो बटन और मेनू आइटम का चयन करता है, और विजेट मनमाने ढंग से जटिल तरीकों से प्रकट/गायब हो जाते हैं।

विवरण

पैटर्न मान लिया गया है:

  1. वस्तुओं का वैश्विक संग्रह सी कि समय-समय पर अपडेट की जरूरत है।
  2. उन वस्तुओं के लिए प्रकार का एक परिवार, जहां उदाहरण पैरामीटर हैं।
  3. संचालन सी पर का एक सेट:
    • जोड़े एपी - मानकों पी
    • संशोधित एपी साथ सी में एक नई वस्तु एक रखो - पी सी में वस्तु एक के मानदंड बदलें ।
    • हटाएँ एक - सी
    • से वस्तु एक निकालें
  4. सी के एक अद्यतन ओ इस तरह के एक दृश्य के होते हैं सी को एक लक्षित लक्ष्य संग्रह में बदलने के लिए, सी कहते हैं।
  5. वर्तमान संग्रह सी और लक्ष्य सी को देखते हुए, लक्ष्य न्यूनतम लागत के साथ अद्यतन ढूंढना है। प्रत्येक ऑपरेशन में इकाई लागत होती है।- वैकल्पिक संकेत एच का उपयोग कर किसी वस्तु एक इन्स्तांत, और वैश्विक में जोड़ने
    • एएच बनाएँ:
    • संभव संग्रह का सेट एक डोमेन विशिष्ट भाषा (डीएसएल) निम्न कमांड है कि में वर्णन किया गया राज्य। (यहां कोई पैरामीटर नहीं है।)
    • यदि बी फिर टी एलसे एफ - कंडिशनिक रूप से कमांड अनुक्रम टी या एफ निष्पादित करें जो बूलियन फ़ंक्शन बी पर आधारित है, जो चल रहे प्रोग्राम में किसी भी चीज़ पर निर्भर हो सकता है।

सभी उदाहरणों में,

  • वैश्विक राज्य एक जीयूआई स्क्रीन या खिड़की है।
  • ऑब्जेक्ट्स यूआई विजेट हैं। प्रकार बटन, ड्रॉपडाउन बॉक्स, टेक्स्ट फ़ील्ड, ...
  • पैरामीटर नियंत्रण विजेट उपस्थिति और व्यवहार।
  • प्रत्येक अद्यतन में GUI में किसी भी विजेट को जोड़ने, हटाने और संशोधित करने (उदा। स्थानांतरित करने) शामिल होते हैं।
  • बनाएँ कमांड विजेट बना रहे हैं: बटन, ड्रॉपडाउन बॉक्स, ...
  • बूलियन फ़ंक्शन अंतर्निहित प्रोग्राम स्थिति पर निर्भर करते हैं जिसमें जीयूआई नियंत्रण की स्थिति शामिल है। तो नियंत्रण बदलना स्क्रीन को प्रभावित कर सकता है।

गुम लिंक

आविष्कारक स्पष्ट रूप से यह कहा गया कभी नहीं है, लेकिन एक महत्वपूर्ण विचार है कि हम इस कार्यक्रम पर डीएसएल दुभाषिया कि सभी संभव लक्ष्य संग्रह (स्क्रीन) हर बार जब हम किसी भी संयोजन उम्मीद का प्रतिनिधित्व करता है चलाने है बूलियन फ़ंक्शन मानों का बी बदल गया है। दुभाषिया, जोड़, हटाएं और संशोधित संचालन के अनुक्रम को उत्सर्जित करके नए बी मानों के साथ संग्रह (स्क्रीन) को संगत बनाने के गंदे काम को संभालता है।

एक अंतिम छिपी धारणा है: डीएसएल दुभाषिया में कुछ एल्गोरिदम शामिल हैं जो वर्तमान प्रवाह के दौरान अभी तक निष्पादित क्रिएटिव के इतिहास के आधार पर जोड़ें और संशोधित संचालन के लिए पैरामीटर प्रदान कर सकते हैं। जीयूआई संदर्भ में, यह लेआउट एल्गोरिदम है, और बनाएँ संकेत लेआउट संकेत हैं।

पंच लाइन

तकनीक की शक्ति जिस तरह से जटिलता में निहित है डीएसएल दुभाषिया में समझाया गया है। एक बेवकूफ दुभाषिया संग्रह (स्क्रीन) में सभी ऑब्जेक्ट्स (विजेट) को हटाकर शुरू करेगा, फिर प्रत्येक बनाएँ कमांड के लिए एक नया जोड़ें क्योंकि यह डीएसएल प्रोग्राम के माध्यम से कदम उठाते समय उन्हें देखता है। संशोधित कभी नहीं होगा।

विभेदक निष्पादन दुभाषिया के लिए एक बेहतर रणनीति है। यह दुभाषिया के अंतिम निष्पादन की क्रमबद्ध रिकॉर्डिंग को रखने के लिए है। यह समझ में आता है क्योंकि रिकॉर्डिंग कैप्चर करता है कि वर्तमान में स्क्रीन पर क्या है। वर्तमान दौड़ के दौरान, दुभाषिया रिकॉर्डिंग को कम से कम लागत वाले संचालन के साथ लक्ष्य संग्रह (विजेट कॉन्फ़िगरेशन) लाने के बारे में निर्णय लेने के लिए रिकॉर्ड करता है। यह किसी ऑब्जेक्ट (विजेट) को कभी भी 2 की लागत के लिए बाद में जोड़ने के लिए उबलता नहीं है। डी हमेशा इसके बजाय संशोधित करेगा, जिसकी लागत 1 है। यदि हम कुछ मामलों में दुभाषिया चलाने के लिए होते हैं जहां बी मान नहीं बदल गया है, डी एल्गोरिदम कोई संचालन नहीं करेगा: रिकॉर्ड की गई स्ट्रीम पहले से ही लक्ष्य का प्रतिनिधित्व करती है।

दुभाषिया आदेशों को निष्पादित करता है, यह इसके अगले भाग के लिए रिकॉर्डिंग भी स्थापित कर रहा है।

एक अनुरूप एल्गोरिथ्म

एल्गोरिथ्म के रूप में minimum edit distance (MED) एक ही स्वाद है। हालांकि डीईईडी की तुलना में डीई एक साधारण समस्या है क्योंकि डीई धारावाहिक निष्पादन तारों में एमईडी में कोई "दोहराया गया वर्ण" नहीं है। इसका मतलब है कि हम गतिशील प्रोग्रामिंग की बजाय एक सीधा ऑनलाइन लालची एल्गोरिदम के साथ एक इष्टतम समाधान पा सकते हैं। आविष्कारक का एल्गोरिदम यही करता है।

शक्तियों

मेरे ले कि यह कई जटिल रूपों जहां अपने स्वयं के लेआउट कलन विधि और/या "किसी और यदि" तर्क के साथ विजेट के स्थान पर पूर्ण नियंत्रण चाहते हैं के साथ प्रणाली को लागू करने के लिए एक अच्छा पैटर्न है जो दिख रहा है वह गहरा घोंसला है। यदि फॉर्म तर्क में एन "अगर एल्स" एन के घोंसले हैं, तो सही होने के लिए के * 2^एन अलग-अलग लेआउट हैं। पारंपरिक रूप डिज़ाइन सिस्टम (कम से कम जिन लोगों का मैंने उपयोग किया है) बड़े के, एन मानों का बहुत समर्थन नहीं करते हैं। आप बड़ी संख्या में समान लेआउट और विज्ञापन लॉजिक के साथ समाप्त होते हैं जो उन्हें चुनने के लिए बदसूरत और कड़ी मेहनत करते हैं। यह डीएसएल पैटर्न उन सभी से बचने का एक तरीका प्रतीत होता है। डीएसएल दुभाषिया की लागत को ऑफ़सेट करने के लिए पर्याप्त रूपों वाले सिस्टम में, यह प्रारंभिक कार्यान्वयन के दौरान भी सस्ता होगा। चिंताओं का पृथक्करण भी एक ताकत है। डीएसएल कार्यक्रम फॉर्म की सामग्री को सार करते हैं जबकि दुभाषिया लेआउट रणनीति है, जो डीएसएल से संकेतों पर कार्य करता है। डीएसएल और लेआउट संकेत डिजाइन प्राप्त करना सही रूप से एक महत्वपूर्ण और शांत समस्या की तरह लगता है।

संदिग्ध ...

मुझे यकीन है कि परहेज हटाएँ/संशोधित करने के पक्ष में जोड़े जोड़े लायक आधुनिक प्रणालियों में सभी मुसीबत नहीं कर रहा हूँ है। आविष्कारक इस अनुकूलन पर सबसे गर्व महसूस करता है, लेकिन अधिक महत्वपूर्ण विचार डीएसएल दुभाषिया में लेआउट जटिलता के साथ, रूपों का प्रतिनिधित्व करने के लिए सशर्त के साथ एक संक्षिप्त डीएसएल है।

संक्षिप्त

आविष्कारक का है अब तक कैसे दुभाषिया अपने निर्णय करता है के गहरे विवरण पर ध्यान केंद्रित किया है। यह भ्रमित है क्योंकि यह पेड़ पर निर्देशित है जबकि जंगल अधिक रुचि का है। यह जंगल का वर्णन है।

+0

आपके ध्यान और अच्छे विवरण के लिए धन्यवाद। दरअसल, मुझे लगता है कि इसकी उपयोगीता डीएसएल होने से आती है, और यह सॉफ्टवेयर इंजीनियरिंग का एक हिस्सा है जिसके लिए बहुत अधिक जोर की आवश्यकता है।मैं केवल 1 जोड़ूंगा) कि "दुभाषिया" शब्द एक अच्छा शब्द है लेकिन भ्रामक हो सकता है, क्योंकि कोड संकलित किया जाता है - दुभाषियों के पास आमतौर पर परिमाण प्रदर्शन दंड का क्रम होता है, और 2) यह न्यूनतम संपादन दूरी खोजने का दावा नहीं करता है , केवल उचित है। –

+0

... भी, मुझे यकीन नहीं है कि आप लेआउट संकेतों के बारे में क्या कह रहे हैं। प्रत्येक नियंत्रण में स्थिति और आकार होता है, और मैं केवल उन फ्लाई पर गणना करता हूं, या तो आदिम प्रक्रियाओं के तर्क के रूप में, या साइड इफेक्ट्स के साथ "वैश्विक" चर के रूप में। (फ्लाई पर उन लोगों की गणना करने में, मिट मोड नियम का पालन किया जाना चाहिए।) बीटीडब्ल्यू, एक और मुद्दा डेटा बाइंडिंग है, जो फ्लाई पर भी किया जा सकता है, और किसी भी अतिरिक्त डेटा संरचना की आवश्यकता नहीं है। –

+2

@ माइकडुनलेवी धन्यवाद माइक। संकेत जटिल रूपों के लिए समझ में लग रहा था। डीएसएल में बस "बटन ए" कहने के बजाय, "बटन बी के नीचे कॉलम में बटन" या कुछ समान कहें। अन्यथा आप चिंताओं का अच्छा अलगाव खो देते हैं। संकेत जावा स्विंग्स जैसे पारंपरिक पारंपरिक लेआउट प्रबंधकों के समान हैं। दुभाषिया पर, आप डीएसएल में रूपों का वर्णन कर रहे हैं, और कोड का कुछ हिस्सा डीएसएल को जोड़ता है, जोड़ता है, हटाता है, संशोधित करता है। कोड का यह हिस्सा परिभाषा एक दुभाषिया है। यह नया नहीं है: विंडोज़ फॉर्म sinve v1.0 में डायलॉग संसाधनों के लिए समान है, लेकिन उनके डीएसएल में कोई सशर्त नहीं है! – Gene

संबंधित मुद्दे