2010-06-11 5 views
20

D के बीच लिंक संगतता C के साथ आसानी से इंटरफेस करता है।सी ++ और डी

D बस C++ के साथ आसानी से इंटरफेस करता है, लेकिन (और यह एक बड़ा है) C++ बेहद तुच्छ होना आवश्यक है। कोड का उपयोग नहीं कर सकते हैं:

  • नामस्थान
  • टेम्पलेट्स गैर आभासी तरीकों
  • अधिक के साथ
  • एकाधिक वंशानुक्रम
  • मिश्रण आभासी?

मैं विरासत प्रतिबंध पूरी तरह से समझता हूं। हालांकि बाकी कृत्रिम सीमाओं की तरह महसूस करते हैं। अब मैं सीधे std::vector<T> का उपयोग करने में सक्षम नहीं होना चाहता, लेकिन मैं वास्तव में एक बाहरी टेम्पलेट के रूप में std::vector<int> से लिंक करने में सक्षम होना चाहूंगा।

C++ interfacing page में यह विशेष रूप से निराशाजनक टिप्पणी है।

डी टेम्पलेट्स सी ++ टेम्पलेट्स के साथ आम में थोड़ा है, और यह बहुत संभावना नहीं उचित विधि किसी भी प्रकार डी

के साथ एक लिंक-संगत तरीका में सी ++ टेम्पलेट्स स्पष्ट रूप से पाया जा सकता है कि है

इसका मतलब यह है कि सी ++ एसटीएल, और सी ++ बूस्ट, संभावना डी

से

वैसे मैं probabl जाएगा सुलभ कभी नहीं होगा D में कोडिंग करते समय वाई को std::vector की आवश्यकता नहीं है, लेकिन मुझे QT या boost का उपयोग करना अच्छा लगेगा।

तो सौदा क्या है। डी में गैर-तुच्छ C++ कक्षाओं को व्यक्त करना इतना मुश्किल क्यों है? कम से कम नामस्थान व्यक्त करने के लिए कुछ विशेष टिप्पणियां या कुछ जोड़ने के लिए यह लायक नहीं होगा?


अद्यतन: Walter Bright से 'डी कार्यों में नाम स्थान समर्थन हासिल है। "

+11

यह किसी भी मुख्यधारा सी ++ कंपाइलर द्वारा समर्थित नहीं है। आप दूसरी भाषा की सहायता क्यों करेंगे? –

+5

@ हंस, क्या * इसका मतलब है? –

+3

मुझे लगता है कि उसका मतलब है कि "कंपाइलर एक्स द्वारा उत्पादित सी ++ से लिंक करना" भी {मुख्यधारा सी ++ कंपाइलर्स} \ X द्वारा समर्थित नहीं है। – FeepingCreature

उत्तर

27

FWIW क्यूटी है एक सक्रिय रूप से विकास के लिए बाध्यकारी विकसित: http://www.dsource.org/projects/qtd

मैं बढ़ावा में कई घटक भी अत्यधिक सी से बंधा है ++ अन्य भाषाओं के लिए अर्थपूर्ण पोर्टेबल होने के लिए लगता है।

उदा। std :: वेक्टर संभव है यदि आप नियमित रूप से लिखने पर समय व्यतीत करते हैं (उदा। नेमस्पेस-स्तर) फ़ंक्शंस जो उपयुक्त सदस्य फ़ंक्शंस को अग्रेषित करते हैं। थकाऊ, लेकिन किफायती (उच्च स्तरीय घटकों के लिए; शायद std :: वेक्टर के लिए नहीं)।

इसके अलावा, मैंने हाल ही में मानक लाइब्रेरी में एक सीलबंद सरणी और सीलबंद बाइनरी ढेर कार्यान्वयन की जांच की है जो संदर्भ गणना, मॉलोक/फ्री, और कचरा संग्रह के बजाय निर्धारक विनाश का उपयोग करती है (http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/container.d देखें)। अन्य कंटेनर का पालन करेंगे। इन कंटेनर प्रोग्राम सुरक्षा समझौता किए बिना निर्धारक विनाश को प्राप्त करने के लिए तीन विशिष्ट तकनीकों का उपयोग करते हैं (मेरे आगामी लेख "मुहरबंद कंटेनर" में वर्णित)।

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

+0

के बाहर मदद नहीं करता है, एसटीएल के बारे में कुछ ही ज्ञात है और बिना बूस्ट के बारे में बहुत कुछ पता है, मैं यह कहूंगा कि डी में भी बेहतर या बेहतर नहीं किया जा सकता है। ने कहा, उनका उपयोग करने में सक्षम होने से उच्च स्तर के सी ++ कोड के साथ बेहतर बातचीत की अनुमति होगी। – BCS

+2

बूस्ट लाइब्रेरी जो मैं विशेष रूप से चाहता था Boost.Asio था। मुझे तुलनीय क्रॉस प्लेटफार्म नेटवर्किंग लाइब्रेरी की जानकारी नहीं है। मुझे यकीन है कि मैं दूसरों को ढूंढ सकता हूं। यह भी नहीं है कि एक समान पुस्तकालय डी में लिखा नहीं जा सका, यह है कि यह पहले से ही लिखा गया है, परीक्षण किया गया है, और विभिन्न परियोजनाओं का उपयोग किया जा रहा है। विफलता मोड प्रलेखन के लिए –

17

जैसा कि हंस पासेंट ने एक टिप्पणी में उल्लेख किया है, आप डी और सी ++ के बीच इंटरऑपरेबिलिटी का स्तर भी अलग-अलग सी ++ कंपाइलर्स के बीच समर्थित नहीं हैं। एक सी ++ एबीआई (एप्लिकेशन बाइनरी इंटरफेस) मानक है जो कुछ समर्थन लगता है, लेकिन मुझे यकीन नहीं है कि वास्तव में कितना व्यापक (इंटेल, जीसीसी और एआरएम कंपाइलर्स एबीआई का पालन करना प्रतीत होता है)। मुझे इसका उपयोग करने की आवश्यकता नहीं है, और मुझे यकीन नहीं है कि माइक्रोसॉफ्ट अपने x86 या x64 संकलक के लिए इसका पालन करता है या नहीं (मुझे लगता है कि यह ia64 के लिए हो सकता है, क्योंकि वह एबीआई मानक शुरू हुआ था)।

सी ++ एबीआई पर कुछ विवरणों के लिए "Interoperability & C++ Compilers" by Joe Goodman देखें।

शायद वाल्टर ब्राइट को एबीआई मानक का पालन करने वाले सी ++ पुस्तकालयों/वस्तुओं के साथ डी इंटरऑपरेबिलिटी का समर्थन करने के लिए आश्वस्त किया जा सकता है (हालांकि मुझे यकीन नहीं है कि वह इसे प्राथमिकता दे सकता है)।

2

बस मस्ती के लिए मैं कुछ सी ++ कोड में इंटरफेसिंग कर रहा हूं।

शायद यह आपके प्रश्न का उत्तर नहीं देगा, लेकिन मुझे लगता है कि आप (और डी समुदाय के बीच कुछ लोगों) को कुछ नोट्स में दिलचस्पी हो सकती है। यहां यह जाता है: TechNotes

+0

प्लस 1 – Quonux

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