2010-02-05 11 views
5

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

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

उत्तर

6

5 साल पहले पोस्टशर्प को डिजाइन करते समय मैंने पोस्ट-संकलन का चयन क्यों किया हैं:

  1. भाषा अज्ञेयवाद।
  2. एमएसआईएल में उच्च स्तरीय भाषाओं की तुलना में स्थिर विनिर्देश हैं (जिनमें हर दूसरे वर्ष गैर-मामूली अपडेट होते हैं)।
  3. अधिकांश समय, MSIL अमूर्त के स्तर की जरूरत है जब पहलुओं के साथ काम कर रहा है। आपको सभी समकक्ष संरचनाओं को जानने की आवश्यकता नहीं है (लगता है कि 'उपयोग' और 'कोशिश-अंत') सोचें।
  4. 2008 से पहले कोई भी एक सभ्य सी # संकलक के उत्पादन में सफल रहा है। मोनो से मिले कठिनाइयों को काफी प्रभावशाली था, भले ही वे अब पकड़े गए हों।
  5. बाइनरी के साथ काम स्रोत कोड के साथ काम की तुलना में बहुत तेजी से लग रहा था।
  6. एक द्विआधारी विधानसभा के साथ काम यह संभव यह निष्पादित करने के लिए बनाता है - विधानसभा में ही transforme कर सकते हैं संसाधित किया जा रहा। पोस्टशर्प लाओस को पहली बार रिलीज़ होने से पहले यह अनसुना था।

जिसके अनुसार, ++ वास्तव में एक पूर्व संकलक (WeaveC) और जावा में कार्यान्वयन हैं C/C के लिए AOP के कार्यान्वयन (जावा के कई ओएसएस कार्यान्वयन देखते हैं कि अच्छे कारण के लिए) एक संकलक विस्तार कर रहे हैं।

-gael

+0

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

2

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

+0

ही पंक्तियों के साथ, मुझे लगता है कि कोड सी # में संकलित जोड़ सकते हैं (जब तक अन्यथा निर्दिष्ट) जो अभी भी वास्तविक मशीन कोड नहीं है MSIL में संकलित किया गया है। यह जेआईटी कोड है। इसलिए, तकनीकी रूप से, जिसे आप "पोस्ट प्रोसेसर" के रूप में संदर्भित करते हैं, वास्तव में प्री-प्रोसेसर है क्योंकि कोड रन-टाइम पर संकलित किया जाता है। – regex

+0

@regex: हाँ तकनीकी रूप से सही, मेरे सवाल के संदर्भ में हालांकि MSIL एक संकलन इकाई उसी तरह एक पीई सी के साथ है ++ (अच्छी तरह से तकनीकी रूप से एक नेट dll अभी भी एक पीई है, लेकिन आप मेरी बात लेने के लिए)। – dkackman

+0

तो मुख्य कारण के रूप में क्रॉस भाषा समर्थन (नीचे @nobugz देखें)? – dkackman

2

यह बस आसान है। आईएल एक हेक्कोफ्लोट सी # स्रोत कोड से पार्स करना आसान है। और यह भाषा अज्ञेयवादी है।

+0

एक टेक्स्ट प्रतिस्थापन प्री-प्रोसेसर को .NET से बाहर नहीं छोड़ा गया था क्योंकि इसे करना मुश्किल था; कम से कम गुनर्सन पोस्ट के अनुसार।हालांकि भाषा अज्ञेयवाद मैं खरीद सकता हूं। – dkackman

+0

यह मेरा मुद्दा नहीं था, एक प्रीप्रोसेसर कभी उपलब्ध नहीं होगा। जो वैकल्पिक रूप से पार्सिंग और स्रोत कोड को फिर से लिखने को छोड़ देता है। यह तकनीकी रूप से संभव है, लेकिन अप्रिय है। –

4

तकनीकी रूप से, विजुअल स्टूडियो में निर्मित सी # के लिए प्री-संकलन विकल्प है: Text Template Transformation Toolkit (T4)। यह आपको प्री-संकलन चरण में बहुत ही अद्भुत चीजें करने की अनुमति देता है, और कुछ ओआरएम जैसे कुछ उत्पादों का आधार है,

+0

आप जानते हैं, मैंने कभी उन लोगों में नहीं देखा है। मुझे अंततः उस के आसपास जाना चाहिए। – dkackman

+0

यह मूल रूप से टेक्स्ट प्रतिस्थापन प्री-संकलन को संभालता है। यह बहुत अच्छा काम करता है। उदाहरण के लिए, सबसनिक पूरी तरह से टी 4 टेम्पलेट्स के आसपास बनाया गया है: http://subsonicproject.com/docs/T4_Templates –

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