2010-05-24 12 views
6

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

डेल्फी में, मैं एक बदलाव कर सकता हूं, फिर मेरी परियोजना को फिर से संकलित कर सकता हूं, लेकिन कंपाइलर बंद हो जाता है जब इसे पहले यूनिट को संकलित नहीं किया जाता है। मुझे उस यूनिट को ठीक करना है, फिर मुझे संकलित करना होगा, जो मुझे अगली त्रुटि इत्यादि दिखाएगा।

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

क्या डेल्फी में ऐसा करने का कोई तरीका है? क्या मैं संकलक को संकलित नहीं करने वाला यूनिट ढूंढने के बाद भी जारी रखने के लिए कह सकता हूं?

मैं डेल्फी 2010 का उपयोग कर रहा हूँ

उत्तर

5

मॉड्यूलरिटी फीचर के रूप में डेल्फी इकाइयां, जावा जार या .NET असेंबली के समान स्तर पर अवधारणात्मक रूप से हैं; वे अलग-अलग फाइलों के लिए संकलित करते हैं। जब आप किसी संदर्भित मॉड्यूल में संकलन त्रुटियां नहीं करते हैं तो न तो जावा और न ही .NET आप निर्भर मॉड्यूल संकलित कर सकते हैं।

कारण यह है कि वे .NET असेंबली आदि से अधिक दानेदार हैं। उनके इतिहास के लिए जिम्मेदार है। वे विभाजित x86 आर्किटेक्चर के आसपास भाग में डिजाइन किए गए थे; किसी एक इकाई से जुड़े डेटा 64 केबी से बड़ा नहीं हो सकता है। इसी प्रकार, इकाइयों ने निकट कोड और दूर कोड के बीच एक प्राकृतिक विभाजन के रूप में कार्य किया। यदि आप 16-बिट x86 से परिचित हैं, तो आपको पता चलेगा कि पॉइंटर्स को दूर तक डेटा को सेगमेंट के साथ-साथ ऑफ़सेट के लिए एक मूल्य की आवश्यकता होती है, जबकि डेटा के पास केवल ऑफसेट की आवश्यकता होती है। कोड के पास कॉलिंग दूर कोड को कॉल करने से भी तेज था। कार्यक्रम तब भी छोटे और कम जटिल थे; यूनिट एक संपूर्ण उपप्रणाली के व्यवहार के लायक के लिए मॉड्यूल की उचित ग्रॅन्युलरिटी थी। यह आज मामला बहुत कम है।

+0

दिलचस्प। तो दूसरे शब्दों में, यदि मेरे पास एक कक्षा में सभी वर्गों को एक अलग इकाई में रखने की बजाय, प्रत्येक वर्ग को एक अलग इकाई में रखने की बजाय, मैं एक बार में यूनिट में सभी त्रुटियों को देख सकता था। जैसा कि आपने संकेत दिया है, यह आज के प्रोजेक्ट के आकार के लिए वास्तव में व्यावहारिक नहीं है (क्या यह कभी था?)। मैंने निश्चित रूप से जावा जार कभी नहीं देखा है जिसका पूरा स्रोत एक .java फ़ाइल में था! – awmross

+0

@awmross: दिलचस्प, लेकिन सादा गलत। ग्रहण सभी जावा फ़ाइलों में सभी त्रुटियों को दिखा सकता है। डेल्फी स्पष्ट रूप से इसे भी कर सकता है, कम से कम 'कार्यान्वयन' भाग में त्रुटियों के रूप में। यहां तक ​​कि 'इंटरफ़ेस' भाग में त्रुटियां इकाइयों के संकलन में बाधा नहीं डालती हैं जो गलत इकाई पर निर्भर नहीं होती हैं। असली कारण यह है कि डेल्फी डेवलपर्स को इस सुविधा को पर्याप्त उपयोगी नहीं देखा गया था। – maaartinus

+0

@ मायार्टिनस - मुझे नहीं लगता कि यह एक सवाल है जिसे इसे उपयोगी नहीं देखा जा रहा है, और इसे * कम * के रूप में देखा जा रहा है। जैसे कोई भी सी # डेवपर आपको बताएगा कि जब आपके पास एक असेंबली में एक असेंबली में संकलन विफलता होती है जो उस असेंबली के परिणामस्वरूप त्रुटियों के झुकाव की ओर जाता है। तो आप 200+ त्रुटियों को ठीक करने के लिए शुरू करते हैं, लेकिन यदि आप पहली संकलन त्रुटि को ठीक करते हैं, तो ** सभी ** 200+ त्रुटियां हल हो जाती हैं। तो उन 200+ -1 त्रुटियों से वास्तव में क्या सार्थक संकेत प्रदान किया गया था? अवसर जब> 1 त्रुटि उपयोगी हो सकती है, लेकिन बहुत कम और बहुत दूर हैं। – Deltics

5

ऐसा करने के लिए डेल्फी संकलक के साथ कोई तरीका नहीं है, लेकिन अगर आप एक यूनिट के सार्वजनिक इंटरफ़ेस के कुछ हिस्से के लिए एक को तोड़ने परिवर्तन करने पर विचार कर रहे हैं, तो आप रिफैक्टरिंग उपकरणों का उपयोग कर सकते हैं कि आईडीई के साथ आने के पहले जो भी आप बदल रहे हैं, उसके सभी संदर्भों को ढूंढने के लिए आओ, जो आपको वह जानकारी देगा जो आप खोज रहे हैं।

+1

मुझे इसके लिए रिफैक्टरिंग टूल का उपयोग करना अच्छा लगेगा। दुर्भाग्य से वे एक ही परियोजना समूह में विभिन्न परियोजनाओं में काम नहीं करते हैं। वे एक ही परियोजना के भीतर रिफैक्टर करते हैं, लेकिन उस यूनिट का उपयोग करने वाली अन्य परियोजनाओं में किसी भी इकाई को बदला नहीं जाएगा। – awmross

+0

@awmross: आह। आपने अपने प्रश्न में प्रोजेक्ट * समूह * का उल्लेख नहीं किया है। –

+1

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

0

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

इसके अलावा, अक्सर, पहली त्रुटि का सामना करने के बाद एक कंपाइलर त्रुटियों को विश्वसनीय नहीं कर सकता है और पहली त्रुटि ठीक होने के बाद भी गायब हो सकती है। (जब आप टाइप करते हैं तो दिखाई देने वाली सभी लाल squiggly लाइनों द्वारा देखा गया)

हालांकि संकलक सभी संकेतों और चेतावनियों को प्रदान करता है (जिन्हें कुछ अन्य कंपाइलरों के लिए त्रुटियां कहा जाता है)।

+1

मुझे यकीन नहीं है कि यह असंभव है, अन्य भाषाओं को करने के लिए इसे प्रबंधित करने पर विचार करना असंभव है। शायद डेल्फी (भाषा) के बारे में कुछ है जो ऐसा करता है जो एक कंपाइलर बनाना असंभव बनाता है। – awmross

+0

डेल्फी के पास एक एकल पास कंपाइलर है। यही कारण है कि यह इतना तेज़ है, लेकिन कुछ त्रुटियां केवल टर्मिनल क्यों हैं। जैसा कि मैंने पहले ही कहा है, यह कुछ मामलों में 1 से अधिक त्रुटि पा सकता है। –

0

आप परिवर्तनीय, संपत्ति, विधि या Wahtever की सभी घटनाओं को वर्तमान में कर्सर के अंतर्गत देखने के लिए Ctrl-Shift-Enter का उपयोग कर सकते हैं। उस जानकारी के साथ आप अपने परिवर्तन करने का फैसला कर सकते हैं या नहीं।

अलास, मौजूदा संस्करण के साथ यह सुविधा विश्वसनीय के रूप में विश्वसनीय नहीं है।