2010-07-08 9 views
44

मैं सोच रहा हूं कि कैसे परिपक्व और स्थिर डी है, और यदि यह सी/सी ++ के लिए एक अच्छा प्रतिस्थापन हो सकता है।क्या डी भाषा में कई मानक पुस्तकालय हैं और जीसी के साथ समस्याएं हैं?

मुझे पता है कि वर्तमान में दो मानक पुस्तकालय (फोबोस और टैंगो) हैं। क्या यह अभी भी मामला है कि कोई एकीकृत मानक पुस्तकालय नहीं है?

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

+1

मुझे लगता है कि यह समुदाय-विकी होना चाहिए। आप [वाल्टर ब्राइट्स] (http://stackoverflow.com/users/33949/walter-bright) उत्तरों को देख सकते हैं। वह कभी-कभी यहां स्टैक ओवरफ्लो पर डी की स्थिति के बारे में प्रश्नों का उत्तर देता है। – Lucas

+1

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

+3

"सी के लिए सही प्रतिस्थापन क्या है" इस बात पर निर्भर करता है कि आप भाषा के साथ क्या करना चाहते हैं। जवाब आपके अलग-अलग गुणों के आधार पर अलग-अलग होंगे। इसलिए मैं सी के कुछ पहलुओं को सूचीबद्ध करने की अनुशंसा करता हूं जो आप सबसे महत्वपूर्ण मानते हैं। – Baxissimo

उत्तर

34

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

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

टैंगो को अभी तक डी 2 पर पोर्ट नहीं किया गया है, इसलिए यह वास्तव में एक विकल्प नहीं है जब डी 2 में प्रोग्रामिंग हो। हालांकि, फोबोस काफी अच्छी तरह से आ रहा है। इसमें बहुत बढ़िया जोड़ मिल रहे हैं (इसमें वास्तव में कंटेनर हैं! - फोबोस के कंटेनरों की कमी फोबोस की बजाय डी 1 में टैंगो का उपयोग करने का एक बड़ा कारण है), और इसमें कुछ वास्तव में शक्तिशाली चीजें हैं - std.algorithm है विशेष रूप से अच्छा है। जिस तरह से डी लैम्ब्डा फ़ंक्शंस को नियंत्रित करता है, नेस्टेड फ़ंक्शंस और फ़ंक्शन पॉइंटर्स एल्गोरिदम को प्रकाश-वर्ष आसान बनाता है, यह सी ++ के वर्तमान मानक में है। इसके अलावा, इसे डी 2 में तय किया गया है ताकि कचरा कलेक्टर और कुछ अन्य मुख्य सामान जो टैंगो डुप्लिकेट कर रहा था अब फोबोस से अलग है। इसलिए, एक बार टैंगो को डी 2 में भेज दिया गया है, तो आप फोबोस और टैंगो कोड को मिश्रण करने में सक्षम होंगे - हालांकि पिछले जवाब में बताया गया है, फोबोस और टैंगो बल्कि अलग-अलग डिज़ाइन दर्शन का उपयोग करते हैं (टैंगो बहुत जावा-जैसी और फोबोस इंटरफेस के बजाए बतख-टाइपिंग के साथ टेम्पलेट्स और मेटा-प्रोग्रामिंग का भारी उपयोग करना), इसलिए मुझे नहीं पता कि वे उस दृष्टिकोण से कितनी अच्छी तरह मिश्रण करेंगे।

वर्तमान में, मुझे विश्वास है कि डीएमडी केवल संकलक जो साथ-टू-डेट डी 2 के लिए कल्पना के संबंध है, लेकिन मुझे विश्वास है कि वहाँ काम हालांकि कैसे सक्रिय है कि (जीडीसी और एलडीसी डी compilers पर किया जा रहा है काम है, मुझे नहीं पता)। इसके अलावा, वाल्टर ब्राइट वर्तमान में डीएमडी के 64-बिट पोर्ट पर काम कर रहा है, इसलिए हमें इन दिनों में से एक अपेक्षाकृत जल्द ही देशी 64-बिट संकलन मिल जाएगा।

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

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

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

+0

टैंगो मानक पुस्तकालय है। हालांकि, यह एक स्वतंत्र रन टाइम है। अक्सर "खड़े हो जाओ" और "किसी भी काम से पहले आपको जिस कोड की आवश्यकता है" के विचार मिश्रित हो जाते हैं। टैंगो दूसरे के रूप में इस्तेमाल किया जा सकता है। – BCS

+0

"टैंगो मानक पुस्तकालय है।" है ना? –

+0

ओके एस/टैंगो/फोबोस/या एस/है/नहीं/मैंने फॉर्म मिड कीस्ट्रोक बदल दिया होगा। : – BCS

12

मुझे पता है कि वर्तमान में दो मानक पुस्तकालय (फोबोस और टैंगो) हैं, इसलिए मुझे लगता है कि लोग उन्हें एकजुट करने की कोशिश कर रहे हैं।

लाइसेंस में अंतर के कारण "एकीकरण" बेहद असंभव है। जब टैंगो को डी 2.0 पर पोर्ट किया जाएगा, तो आप इसे फोबोस के साथ उपयोग करने में सक्षम होंगे, जो डी 1.0 में (आसानी से) संभव नहीं है।

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

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

अगर मुझे आज डी प्रतिस्थापन के रूप में डी चुनना पड़ा, तो डी (वी 1.0 या वी 2.0) और आप किस मानक पुस्तकालय का सुझाव देंगे?

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

0

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

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

+8

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

+2

@ साइबरशैडो: यहां तक ​​कि सी को रनटाइम समर्थन की आवश्यकता है। ज्यादातर मामलों में यूनिक्स बक्से पर इसे ग्लिबक कहा जाता है। –

+2

glibc गतिशील रूप से पसंद से जुड़ा हुआ है, आवश्यकता नहीं है। यह भी स्थिर रूप से जुड़ा हुआ हो सकता है; अधिकांश मामलों में सी रनटाइम विंडोज़ ऐप्स में स्थिर रूप से जुड़ा हुआ है। मेरा मानना ​​है कि वर्तमान में डी सभी प्लेटफार्मों पर स्थिर रूप से फोबोस को जोड़ता है। –

5

मुझे आश्चर्य है कि परिपक्व और स्थिर डी कितना है, और यदि यह सी/सी ++ के लिए एक अच्छा प्रतिस्थापन हो सकता है।

मैं ऐसी किसी भी भाषा का उपयोग करने से सावधान रहूंगा जिसे अभी तक एएनएसआई, आईएसओ या ईसीएमए जैसे मानक निकाय द्वारा समर्थित नहीं किया गया था। यह शायद परिपक्वता का संकेतक है।उस ने कहा कि उदाहरण के लिए जावा और डेल्फी उस श्रेणी में आ जाएंगे, और जब मैं उन भाषाओं का उपयोग नहीं करता, तो उन्हें शायद "परिपक्व" के रूप में वर्णित किया जा सकता है।

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

+8

जितना मुझे लगता है कि आईएसओ की तरह एक आधिकारिक मानक होने एक अच्छी बात है, कई मायनों में, मुझे लगता है कि जावा जैसी भाषाओं के लिए एक मानक के लिए के आधार पर किए जाने की कार्यान्वयन के बजाय एक मानक कार्यान्वयन होने से लाभ हुआ है। आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि आपका विशेष कार्यान्वयन मानक से मेल खाता है और यह किसी अन्य कंपाइलर से अलग कैसे हो रहा है, जिसका उपयोग करने की आवश्यकता हो सकती है। यह सिर्फ काम करता है कि यह कैसे काम करता है। इसलिए, एक आधिकारिक मानक एक भाषा के लिए परिपक्वता का एक अच्छा संकेत है, लेकिन मुझे नहीं लगता कि इसकी कमी का मतलब बहुत अधिक है। –

4

मेरे पास फोबोस और एसडीएल के साथ डी 1 में एक छोटा सा गेम लिखने का अच्छा अनुभव रहा है, लेकिन यह एक बहुत छोटी परियोजना थी।

मेरी राय में, डी का अभाव:

  • एक अधिकारी वेब मंच जवाब (नहीं समाचार समूह)
  • कई SDK का एक अधिकारी भंडार डी में बदला के लिए खोज (उदाहरण के लिए, जहां लोगों को मदद मिलती है और कर सकते हैं एसडीएल , जीटीके, इत्यादि। जब वे मौजूद होते हैं तो इन्हें अक्सर ढूंढना और उपयोग करना मुश्किल होता है।)
+0

ख मुख्य जगह डी परियोजनाओं के लिए देखने के लिए http://www.dsource.org/ पर है, लेकिन यह निश्चित रूप से संगठन और तरह के संबंध में कुछ काम इस्तेमाल कर सकते हैं। –

+0

https://github.com/D- प्रोग्रामिंग- डीमोमोस को हाल ही में बाइंडिंग के लिए इस उद्देश्य को पूरा करने के लिए बनाया गया था। यह वर्तमान में छोटा है, लेकिन यह पहली बार है कि इस उद्देश्य के लिए एक आधिकारिक भंडार रहा है। Dsource पर भी पुरानी Derelict परियोजना भी है। – Dwayne

+0

ऐसा लगता है कि आजकल एक आधिकारिक मंच का बीटा संस्करण http://forum.dlang.org पर है –

28

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

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