2012-06-09 12 views
6

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

  1. रन-समय प्रतिबिंब: संकलन समय प्रतिबिंब सुविधाएँ एक रन-टाइम प्रतिबिंब प्रणाली एक ला जावा/नेट का निर्माण करने के लिए पर्याप्त हैं?

  2. कोड रूपांतरण: मेटाप्रोग्राम का उपयोग करके, सी #/सी ++/आदि बनाएं। हर बार जब आप इसे संकलित करते हैं तो आपके डी प्रोग्राम के संस्करण (बोनस पॉइंट यदि दस्तावेज़ टिप्पणियां प्रचारित की जा सकती हैं)।

  3. लक्षण। मेरा मतलब यह नहीं है कि metaprogramming traits डी में बनाया गया है, मेरा मतलब है object-oriented traits for class composition। एक डी प्रोग्राम लिखने के लिए लक्षणों का एक सेट इंगित करेगा, और एक मेटाप्रोग्राम उन्हें लिख देगा।

  4. यूनिट अनुमान इंजन: वैकल्पिक रूप से इकाइयों को इंगित करने के लिए कुछ नोटेशन दिए गए, उदा। unit(value), क्या डी मेटाप्रोग्राम निम्न कोड की जांच कर सकता है, सही इकाइयों का अनुमान लगा सकता है, और अंतिम पंक्ति पर एक त्रुटि संदेश जारी कर सकता है? (मैं boo के लिए ऐसी बात लिखा था तो मैं यह सामान्य, कार्यक्रम चौड़ा में संभव है आपको विश्वास दिलाता कर सकते हैं):

    auto mass = kg(2.0); 
    auto accel = 1.0;      // units are strictly optional 
    auto force = mass*accel; 
    accel += metresPerSecondSquared(9.81); // units of 'force' and 'accel' are now known 
    force += pounds(3.0);     // unit mismatch detected 
    

उत्तर

7

रन-समय प्रतिबिंब: कर रहे हैं संकलन समय प्रतिबिंब करने के लिए पर्याप्त सुविधाएँ एक ला जावा/.NET एक रन-टाइम प्रतिबिंब प्रणाली का निर्माण?

हां। आप __traits का उपयोग करके संकलित समय पर आवश्यक सभी जानकारी प्राप्त कर सकते हैं और रनटाइम प्रतिबिंब के लिए आवश्यक रनटाइम डेटा संरचनाओं का उत्पादन कर सकते हैं।

कोड रूपांतरण: मेटाप्रोग्राम का उपयोग करके, सी #/सी ++/आदि बनाएं। हर बार जब आप इसे संकलित करते हैं तो आपके डी प्रोग्राम के संस्करण (बोनस पॉइंट यदि दस्तावेज़ टिप्पणियां प्रचारित की जा सकती हैं)।

नहीं, यह संभव नहीं है कि डी कितना शक्तिशाली हो। कुछ विशेषताएं बस स्थानांतरित नहीं होती हैं। उदाहरण के लिए, डी में एक इनलाइन असेंबलर है, जो सी # में परिवर्तित करने के लिए 100% असंभव है। कोई भी भाषा हानिकारक रूप से अन्य सभी भाषाओं में परिवर्तित नहीं हो सकती है।

लक्षण। मेरा मतलब यह नहीं है कि डी में निर्मित मेटाप्रोग्रामिंग गुण, मेरा मतलब क्लास संरचना के लिए ऑब्जेक्ट-ओरिएंटेड लक्षण है। एक डी प्रोग्राम लिखने के लिए लक्षणों का एक सेट इंगित करेगा, और एक मेटाप्रोग्राम उन्हें लिख देगा।

आप इसके लिए template mixins का उपयोग कर सकते हैं, हालांकि वे विधि बहिष्करण प्रदान नहीं करते हैं।

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

हां, यह डी में सीधा है।पहले से ही at least one implementation है।

+0

मैं कनवर्टर सुझाव देने के लिए विधानसभा भाषा :) सहित सभी सुविधाओं का समर्थन करना चाहिए मतलब नहीं था, लेकिन अभी यह विचार है कि डी कोड गहरा * प्रयास * एक रूपांतरण करने के लिए पर्याप्त का निरीक्षण कर सकते हैं। – Qwertie

+0

इस तरह कोई व्यक्ति डी, सी ++ और सी # में एक प्रोग्राम को डी के एक निश्चित उप-समूह में सीमित करके एक प्रोग्राम लिख सकता है। स्वाभाविक रूप से आपको उदा। लक्ष्य भाषा की सीमाओं के अनुसार, लैम्ब्डा टेम्पलेट तर्कों को रनटाइम तर्कों में परिवर्तित करें, या विभिन्न तर्कों के साथ ऑटो-प्रतिकृति टेम्पलेट्स को परिवर्तित करें। ऐसा रूपांतरण उपकरण कुछ पुस्तकालयों, विशेष रूप से एल्गोरिदम और विदेशी डेटा संरचनाओं को लिखने के लिए डी को अधिक आकर्षक बना सकता है, हालांकि मुझे लगता है कि इसे मेटाप्रोग्रामिंग के साथ आवश्यक रूप से पूरा करने की आवश्यकता नहीं है। – Qwertie

+0

यह संभव है कि मेरा विश्वास है, लेकिन इसके लिए संकलन समय पर भाषा अनुवादक की आवश्यकता होगी ... यह एक विशाल परियोजना होगी ... – DejanLekic

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