डी (प्रोग्रामिंग भाषा)

डी, जिसे डीलैंग के नाम से भी जाना जाता है, डिजिटल मार्स पर वाल्टर ब्राइट द्वारा बनाई गई और 2001 में जारी की गई बहु-प्रतिमान प्रणाली प्रोग्रामिंग भाषा है। आंद्रेई अलेक्जेंड्रेस्कु 2007 में डिजाइन और विकास के प्रयास में सम्मिलित हुए। चूंकि इसकी प्रारंभ -C++, D की री-इंजीनियरिंग के रूप में हुई थी। यह पूरी तरह से  एक अलग भाषा है- डी की विशेषताओं को C++ के विचारों पर सुव्यवस्थित और विस्तारित माना जा सकता है, चूँकि डी अन्य उच्च-स्तरीय प्रोग्रामिंग भाषाओं, विशेष रूप से जावा (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), सी शार्प (प्रोग्रामिंग भाषा) और एफिल (प्रोग्रामिंग भाषा) से भी प्रेरणा लेता है।

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

सामान्य प्रकारों के लिए टाइप अनुमान, स्वचालित मेमोरी प्रबंधन (कंप्यूटर विज्ञान) और सिंटैक्टिक सुगर तेजी से सॉफ़्टवेयर विकास की अनुमति देती है, जबकि अनुबंध द्वारा जांच और डिज़ाइन को रनटाइम पर पहले बग ढूंढते हैं, और समवर्ती (कंप्यूटर विज्ञान) -जागरूक प्रकार प्रणाली संकलन समय पर बग पकड़ती है।

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

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

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

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

डी में, टेक्स्ट कैरेक्टर स्ट्रिंग केवल वर्णों की सरणियाँ हैं, और डी में सरणियाँ C ++ के विपरीत सीमा-जांच की जाती हैं। स्ट्रिंग हैंडलिंग के लिए विशिष्ट ऑपरेटर उपस्थित हैं, जो गणितीय सहसंबंधों से दृष्टिगत रूप से भिन्न हैं। डी के पास जटिल और काल्पनिक संख्याओं के लिए प्रथम श्रेणी के प्रकार हैं, और ऐसे प्रकारों से जुड़े भावों का कुशलता से मूल्यांकन करता है।

प्रोग्रामिंग प्रतिमान
डी पांच मुख्य प्रोग्रामिंग प्रतिमानों का समर्थन करता है:
 * समवर्ती प्रोग्रामिंग भाषा (अभिनेता मॉडल)
 * वस्तु के उन्मुख
 * अनिवार्य प्रोग्रामिंग
 * कार्यात्मक प्रोग्रामिंग
 * मेटाप्रोग्रामिंग

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

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

डी में इंटरफेस और इनहेरिटेंस रिटर्न प्रकार के ओवरराइड विधियों के लिए सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान) का समर्थन करते हैं।

डी प्रकार अग्रेषण, साथ ही वैकल्पिक कस्टम गतिशील प्रेषण का समर्थन करता है।

डी में कक्षाएं (और इंटरफेस) में वर्ग अपरिवर्तनीय हो सकते हैं जो अनुबंध पद्धति द्वारा डिजाइन के अनुसार सार्वजनिक विधियों में प्रवेश से पहले और बाद में स्वचालित रूप से चेक किए जाते हैं।

जेनेरिक कोड या स्वचालित कोड जनरेशन (सामान्यतः संकलन-समय तकनीकों का उपयोग करके) की सुविधा के लिए कक्षाओं (और structs) के कई दृष्टिकोण को संकलन समय का उपयोग करके (प्रतिबिंब (कंप्यूटर प्रोग्रामिंग) का एक रूप) और रन टाइम (RTTI /  ) पर स्वचालित रूप से आत्मनिरीक्षण किया जा सकता है।

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

अन्य कार्यात्मक विशेषताएं जैसे कि करीइंग और सामान्य उच्च-क्रम फ़ंक्शन जैसे मानचित्र (उच्च-क्रम फ़ंक्शन), फ़िल्टर (उच्च-क्रम फ़ंक्शन), और फोल्ड (उच्च-क्रम फ़ंक्शन) मानक लाइब्रेरी मॉड्यूल  और  के माध्यम से उपलब्ध हैं। वैकल्पिक रूप से, उपरोक्त फ़ंक्शन रचनाओं को अधिक प्राकृतिक बाएँ से दाएँ पढ़ने के लिए यूनिफ़ॉर्म फ़ंक्शन कॉल सिंटैक्स (UFCS) का उपयोग करके व्यक्त किया जा सकता है:

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

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

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

मेटाप्रोग्रामिंग
मेटाप्रोग्रामिंग को टेम्प्लेट, कंपाइल-टाइम फंक्शन एक्ज़ीक्यूशन, टपलस और स्ट्रिंग मिक्सिन्स के माध्यम से समर्थित किया जाता है। निम्नलिखित उदाहरण डी के संकलन-समय की कुछ विशेषताओं को प्रदर्शित करते हैं।

टेम्पलेट्स के लिए C++ कार्यात्मक शैली की तुलना में डी में टेम्पलेट अधिक अनिवार्य शैली में लिखे जा सकते हैं। यह एक नियमित कार्य है जो किसी संख्या के भाज्य की गणना करता है: यहाँ,   का उपयोग, डी का संकलन-समय सशर्त निर्माण, एक टेम्पलेट बनाने के लिए प्रदर्शित किया जाता है जो उपरोक्त फ़ंक्शन के समान कोड का उपयोग करके समान गणना करता है: निम्नलिखित दो उदाहरणों में, ऊपर परिभाषित टेम्पलेट और फ़ंक्शन का उपयोग फैक्टोरियल की गणना करने के लिए किया जाता है। स्थिरांक के प्रकारों को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि असाइनमेंट के दाईं ओर से कंपाइलर प्रकार का अनुमान है: यह संकलन-समय फ़ंक्शन निष्पादन (सीटीएफई) का उदाहरण है। साधारण कार्यों का उपयोग निरंतर, संकलन-समय के भावों में किया जा सकता है, लेकिन वह कुछ मानदंडों को पूरा करते हों:   E> फ़ंक्शन प्रिंटफ करता है -जैसे डेटा स्वरूपण (सीटीएफई के माध्यम से संकलन-समय पर भी), और संदेश निर्देश (प्रोग्रामिंग) संकलन समय पर परिणाम प्रदर्शित करता है: स्ट्रिंग मिश्रण, संकलन-समय फ़ंक्शन निष्पादन के साथ संयुक्त, संकलन समय पर स्ट्रिंग ऑपरेशंस का उपयोग करके डी कोड की पीढ़ी के लिए अनुमति देता है। इसका उपयोग डोमेन-विशिष्ट भाषाओं को पार्स करने के लिए किया जा सकता है, जिसे प्रोग्राम के भाग के रूप में संकलित किया जाएगा:

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

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

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

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

कीवर्ड का उपयोग कोड के कुछ भागों को एनोटेट करने के लिए किया जा सकता है, लेकिन यह दर्शाने के लिए वेरिएबल और वर्ग/संरचनाएं भी हो सकती हैं कि उन्हें स्कोप से बाहर निकलने पर तुरंत नष्ट कर दिया जाना चाहिए (विनाशक कहा जाता है)। जो कुछ भी मेमोरी को हटा दिया गया है वह भी कार्यान्वयन और वर्ग-बनाम-संरचना के अंतर पर निर्भर करता है।

विशेष उपयोग की स्थितियों के लिए कस्टम उच्च प्रदर्शन आवंटक बनाने के लिए एक मॉड्यूलर और कंपोज़ेबल एलोकेटर टेम्प्लेट सम्मिलित हैं।

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

स्कोप आजीवन सुरक्षा
प्रारंभ में DIP1000 के बैनरों के नीचे और DIP25 (अब भाषा विनिर्देश का भाग है ), डी डेटा के जीवनकाल को सम्मिलित करने वाले कुछ गलत निर्माणों के विरुद्ध सुरक्षा प्रदान करता है।

वर्तमान तंत्र मुख्य रूप से फ़ंक्शन मापदंडों और स्टैक मेमोरी क वर्णन करते हैं, चूंकि यह प्रोग्रामिंग भाषा के नेतृत्व की एक घोषित महत्वाकांक्षा है जो डी प्रोग्रामिंग भाषा के अन्दर जीवनकाल का अधिक संपूर्ण उपचार प्रदान करता है। (रस्ट (प्रोग्रामिंग भाषा) के विचारों से प्रभावित)।

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

@Safe कोड के आन्तरिक फ़ंक्शन पैरामीटर लाइफ़टाइम एनोटेशन
जब फ़ंक्शन पैरामीटर पर लागू किया जाता है जो या तो सूचक प्रकार या संदर्भ के होते हैं, तो कीवर्ड रिटर्न और स्कोप आजीवन और उस पैरामीटर के उपयोग को बाधित करते हैं।

भाषा मानक निम्नलिखित व्यवहार को निर्धारित करता है: एक व्याख्यात्मक उदाहरण नीचे दिया गया है।

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

माइक्रोसॉफ्ट विंडोज पर, D घटक वस्तु मॉडल (COM) कोड तक पहुँच सकता है।

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

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

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

बेटर सी
डी प्रोग्रामिंग लैंग्वेज का एक आधिकारिक उपसमुच्चय है जिसे Better C जाना जाता है. यह उपसमुच्चय C के अतिरिक्त अन्य रनटाइम लाइब्रेरी के उपयोग की आवश्यकता वाले डी सुविधाओं तक पहुंच को प्रतिबंधित करता है।

DMD और LDC पर कंपाइलर फ़्लैग -betterC और GDC पर -fno-druntime के माध्यम से सक्षम, Better C केवल एक ही ध्वज (और डी के अतिरिक्त लिंक किए गए कोड) के अनुसार संकलित डी कोड में कॉल कर सकते हैं लेकिन कोड बिना संकलित किए गए हैं Better C विकल्प इसके साथ संकलित कोड में कॉल कर सकता है: चूंकि, C और डी कैसे जोर देते हैं, इस अंतर के कारण कुछ अलग व्यवहार होगा।

बेटर सी में सम्मिलित विशेषताएं
==== सुविधाओं को बेटर सी से बाहर रखा गया है
 * संकलन-समय सुविधाओं का अप्रतिबंधित उपयोग (उदाहरण के लिए, डी की गतिशील आवंटन सुविधाओं का उपयोग डी डेटा को पूर्व-आवंटित करने के लिए संकलन समय पर किया जा सकता है)
 * पूर्ण मेटाप्रोग्रामिंग सुविधाएं
 * नेस्टेड फ़ंक्शंस, नेस्टेड स्ट्रक्चर्स, डेलीगेट्स और लैम्ब्डा
 * सदस्य कार्य, निर्माता, डिस्ट्रॉयर, ऑपरेटिंग ओवरलोडिंग, आदि।
 * पूर्ण मॉड्यूल प्रणाली
 * ऐरे स्लाइसिंग, और एरे बाउंड चेकिंग
 * राय
 * scope(exit)* मेमोरी सुरक्षा सुरक्षा
 * C ++ के साथ इंटरफेसिंग
 * COM क्लासेस और C++ क्लासेस
 * मुखर विफलताओं को सी रनटाइम लाइब्रेरी के लिए निर्देशित किया जाता है
 * तार के साथ स्विच करें
 * अंतिम स्विच
 * यूनिटटेस्ट ब्लॉक
 * प्रिंटफ प्रारूप सत्यापन
 * गार्बेज संग्रहण
 * टाइपइन्फो और मॉड्यूलइन्फो
 * बिल्ट-इन थ्रेडिंग (उदा. )
 * गतिशील सरणियाँ (चूंकि स्थिर सरणियों के स्लाइस काम करते हैं) और साहचर्य सरणियाँ
 * अपवाद
 * सिंक्रनाइज़ और
 * स्टेटिक मॉड्यूल कंस्ट्रक्टर या डिस्ट्रक्टर

इतिहास
वाल्टर ब्राइट ने 1999 में एक नई भाषा पर काम करना प्रारंभ किया। डी को पहली बार दिसंबर 2001 में रिलीज़ किया गया था और जनवरी 2007 में संस्करण 1.0 पर पहुंच गया। भाषा का पहला संस्करण (D1) C ++ के समान अनिवार्य, वस्तु उन्मुख और मेटाप्रोग्रामिंग प्रतिमानों पर केंद्रित था,

डी समुदाय के कुछ सदस्यों ने फोबोस, डी के आधिकारिक रनटाइम लाइब्रेरी और मानक लाइब्रेरी से असंतुष्ट होकर टैंगो नामक वैकल्पिक रनटाइम और मानक लाइब्रेरी बनाया। पहली सार्वजनिक टैंगो घोषणा डी 1.0 के जारी होने के कुछ दिनों के अन्दर हुई। टैंगो ने ओओपी और उच्च प्रतिरूपकता को अपनाते हुए एक अलग प्रोग्रामिंग शैली अपनाई। समुदाय के नेतृत्व वाली परियोजना होने के संबंध में, टैंगो योगदान के लिए अधिक खुला था, जिसने इसे आधिकारिक मानक लाइब्रेरी की तुलना में तेजी से प्रगति करने की अनुमति दी। उस समय, अलग-अलग रनटाइम सपोर्ट एपीआई (गार्बेज कलेक्टर, थ्रेडिंग सपोर्ट, आदि) के कारण टैंगो और फोबोस असंगत थे। इससे एक ही परियोजना में दोनों लाइब्रेरी का उपयोग करना असंभव हो गया। दो लाइब्रेरी के अस्तित्व, दोनों व्यापक रूप से उपयोग में हैं, ने कुछ पैकेजों के कारण फोबोस और अन्य द्वारा टैंगो का उपयोग करने के कारण महत्वपूर्ण विवाद को जन्म दिया है। जून 2007 में, D2 का पहला संस्करण जारी किया गया था। D2 के विकास की प्रारंभ ने D1 के स्थिरीकरण का संकेत दिया। भाषा के पहले संस्करण को रखरखाव में रखा गया है, केवल सुधार और कार्यान्वयन बगफिक्स प्राप्त कर रहा है। D2 ने अपनी पहली प्रायोगिक स्थिरांक-शुद्धता के साथ प्रारंभ करते हुए, भाषा में ब्रेकिंग बदलाव प्रस्तुत किए। D2 ने बाद में क्लोजर (कंप्यूटर प्रोग्रामिंग), शुद्ध कार्य, और कार्यात्मक और समवर्ती प्रोग्रामिंग प्रतिमानों के लिए समर्थन जैसी कई अन्य भाषा सुविधाओं को जोड़ा। D2 ने मानक लाइब्रेरी से रनटाइम को अलग करके मानक लाइब्रेरी की समस्याओं का भी समाधान किया। फरवरी 2012 में डी2 टैंगो पोर्ट के पूरा होने की घोषणा की गई थी। 12 जून 2010 को आंद्रेई अलेक्सांद्रेस्कू की पुस्तक द डी प्रोग्रामिंग लैंग्वेज के विमोचन ने डी2 के स्थिरीकरण को चिह्नित किया, जिसे आज सामान्यतः केवल डी के रूप में संदर्भित किया जाता है।

जनवरी 2011 में, डी विकास एक बगट्रैकर / पैच-सबमिशन आधार से गिटहब तक चला गया। इससे संकलक, रनटाइम और मानक लाइब्रेरी में योगदान में उल्लेखनीय वृद्धि हुई है। दिसंबर 2011 में, आंद्रेई अलेक्जेंड्रेस्कू ने घोषणा की कि डी1, भाषा का पहला संस्करण, 31 दिसंबर 2012 को बंद कर दिया जाएगा। अंतिम D1 रिलीज़, D v1.076, 31 दिसंबर 2012 को थी। आधिकारिक डी कंपाइलर के लिए कोड, वाल्टर ब्राइट द्वारा डिजिटल मार्स डी कंपाइलर, मूल रूप से कस्टम सॉफ़्टवेयर लाइसेंस के अनुसार जारी किया गया था, जो उपलब्ध स्रोत के रूप में योग्य है लेकिन ओपन सोर्स परिभाषा के अनुरूप नहीं है। 2014 में, कंपाइलर कंपाइलर फ्रंट-एंड सॉफ्टवेयर लाइसेंसिंग था | बूस्ट सॉफ्टवेयर लाइसेंस के अनुसार ओपन सोर्स सॉफ्टवेयर के रूप में फिर से लाइसेंस दिया गया। इस पुन: लाइसेंस कोड ने बैक-एंड को बाहर कर दिया, जिसे आंशिक रूप से नॉर्टनलाइफ लॉक पर विकसित किया गया था। 7 अप्रैल 2017 को, सिमेंटेक द्वारा बैक-एंड को भी फिर से लाइसेंस देने की अनुमति देने के बाद, पूरे कंपाइलर को बूस्ट लाइसेंस के अनुसार उपलब्ध कराया गया था।   21 जून 2017 को, डी भाषा को GCC में सम्मिलित करने के लिए स्वीकार किया गया।

कार्यान्वयन
कुशल निष्पादन के लिए अधिकांश वर्तमान डी कार्यान्वयन संकलक सीधे मशीन कोड में।

उत्पादन के लिए तैयार संकलक: टॉय और प्रूफ-ऑफ-कॉन्सेप्ट कंपाइलर: उपरोक्त कंपाइलर्स और टूलचेन्स का उपयोग करके, x86, amd64, AArch64, PowerPC, MIPS64, DEC Alpha, m68k, Sparc, s390, वेबअसेंबली सहित कई अलग-अलग आर्किटेक्चर को लक्षित करने के लिए डी प्रोग्राम को संकलित करना संभव है। प्राथमिक समर्थित ऑपरेटिंग सिस्टम खिड़कियाँ और लिनक्स हैं, लेकिन विभिन्न कंपाइलर Mac OS X, फ्रीबीएसडी, नेटबीएसडी, एआईऐक्स, सोलारिस (ऑपरेटिंग सिस्टम) और एंड्रॉइड (ऑपरेटिंग सिस्टम) का भी समर्थन करते हैं, या तो होस्ट या लक्ष्य के रूप में, या दोनों. वेब असेंबली लक्ष्य (LDC और LLVM के माध्यम से समर्थित) किसी भी वेब असेंबली वातावरण में काम कर सकता है, जैसे आधुनिक वेब ब्राउज़र (गूगल क्रोम, मोजिल्ला फायरफॉक्स, माइक्रोसॉफ्ट एड्ज, एप्पल सफारी), या समर्पित Wasm वर्चुअल मशीन।
 * डीएमडी - वाल्टर ब्राइट द्वारा डिजिटल मार्स डी कंपाइलर आधिकारिक डी कंपाइलर है; बूस्ट सॉफ्टवेयर लाइसेंस के अनुसार ओपन सोर्स कंपाइलर्स के बीच अनुकूलता में सुधार करने के लिए डीएमडी फ्रंटेंड को जीडीसी (अब जीसीसी में) और एलडीसी द्वारा साझा किया जाता है। प्रारंभ में दृश्यपटल C++ में लिखा गया था, लेकिन अब इसका अधिकांश भाग डी में ही (सेल्फ-होस्टिंग) लिखा गया है। बैकएंड और मशीन कोड ऑप्टिमाइज़र सिमेंटेक कंपाइलर पर आधारित हैं। सबसे पहले यह केवल 32-बिट x86 का समर्थन करता था, वाल्टर ब्राइट द्वारा 64-बिट amd64 और पावरपीसी के लिए समर्थन जोड़ा गया था। बाद में बैकएंड और लगभग पूरे कंपाइलर को पूर्ण सेल्फ-होस्टिंग के लिए C++ से D में पोर्ट किया गया।
 * जीसीसी - जीएनयू कंपाइलर संग्रह, विलय जीडीसी 29 अक्टूबर 2018 को जीसीसी 9 में। Linux और macOS पर 32-बिट x86 पर GCC 3.3 और GCC 3.4 पर आधारित GCC के साथ GDC का पहला कार्यशील संस्करण 22 मार्च 2004 को जारी किया गया था। तब से जीडीसी ने फ्रंटएंड और भाषा विनिर्देश के लिए अपस्ट्रीम डीएमडी कोड को ट्रैक करते समय अतिरिक्त प्लेटफॉर्म, उत्तम प्रदर्शन और फिक्स्ड बग के लिए समर्थन प्राप्त किया है।
 * LDC - DMD फ्रंट-एंड पर आधारित कंपाइलर जो LLVM को इसके कंपाइलर बैक-एंड के रूप में उपयोग करता है। पहला रिलीज़-क्वालिटी संस्करण 9 जनवरी 2009 को प्रकाशित हुआ था। यह संस्करण 2.0 का समर्थन करता है।
 * .NET के लिये डी कंपाइलर - डी प्रोग्रामिंग लैंग्वेज 2.0 कंपाइलर के लिए बैक-एंड। यह कोड को मशीन कोड के अतिरिक्त सामान्य मध्यवर्ती भाषा (CIL) बायटेकोड में संकलित करता है। CIL को तब सामान्य भाषा अवसंरचना (CLI) आभासी मशीन के माध्यम से चलाया जा सकता है। परियोजना को वर्षों में अद्यतन नहीं किया गया है और लेखक ने संकेत दिया है कि परियोजना अब सक्रिय नहीं है।
 * एसडीसी - स्टूपिड डी कंपाइलर कस्टम फ्रंट-एंड और एलएलवीएम को इसके कंपाइलर बैक-एंड के रूप में उपयोग करता है। यह डी में लिखा गया है और डी की संकलन-समय सुविधाओं को सुरुचिपूर्ण ढंग से संभालने के लिए प्रतीक संकल्प को संभालने के लिए शेड्यूलर का उपयोग करता है। यह कंपाइलर वर्तमान में भाषा के सीमित उपसमूह का समर्थन करता है।

विकास उपकरण
भाषा के लिए वाक्य - विन्यास पर प्रकाश डालना और आंशिक बुद्धिमान कोड पूर्णता का समर्थन करने विम (पाठ संपादक) एकीकृत विकास वातावरण (IDEs) में स्लिकएडिट, एमएसीएस, Vim (टेक्स्ट एडिटर), SciTE, स्मल्ट्रोन, ज़ीउस, और गेनी सम्मिलित हैं। विंडोज के लिए ओपन-सोर्स सॉफ्टवेयर डी आईडीई उपस्थित हैं, कुछ डी में लिखे गए हैं, जैसे पोसीडॉन, डी-आईडीई, तथा अल्लुर डिजाइनर। डी अनुप्रयोगों को किसी भी C/C++ डिबगर का उपयोग करके डीबग किया जा सकता है, जैसे GNU डीबगर या WinDbg, चूंकि विभिन्न D-विशिष्ट भाषा सुविधाओं के लिए समर्थन अत्यंत सीमित है। विंडोज़ पर, डी प्रोग्राम Ddbg, या माइक्रोसॉफ्ट डीबगिंग टूल्स (विनडीबीजी और विजुअल स्टूडियो) का उपयोग करके डीबग किया जा सकता है। cv2pdb का उपयोग करके डिबग जानकारी को रूपांतरित किया। Linux के लिए ZeroBUGS डीबगर में डी भाषा के लिए प्रयोगात्मक समर्थन है। डीडीबीजी का उपयोग विभिन्न आईडीई या कमांड लाइन से किया जा सकता है; ZeroBUGS का अपना ग्राफिकल यूज़र इंटरफ़ेस (GUI) है।
 * Dexed (पूर्व में सह-संपादित), वस्तु पास्कल में लिखा गया डी केंद्रित ग्राफिकल आईडीई
 * मोनो-डी मुख्य रूप से C Sharp में लिखे गए मोनोडेवलप / ज़ामरीन स्टूडियो पर आधारित सुविधा संपन्न क्रॉस-प्लेटफ़ॉर्म डी केंद्रित ग्राफ़िकल IDE है।
 * डी के लिए एक्लिप्स (सॉफ्टवेयर) प्लग-इन में डीडीटी और डिसेंट (मृत परियोजना) सम्मिलित हैं।
 * विजुअल स्टूडियो इंटीग्रेशन विजुअलडी द्वारा प्रदान किया जाता है।
 * Dlang-Vscode जैसे एक्सटेंशन के साथ विजुअल स्टूडियो कोड इंटीग्रेशन या कोड-डी।
 * टेक्स्टमैट के लिए एक बंडल उपलब्ध है, और कोड:: ब्लॉक आईडीई में भाषा के लिए आंशिक समर्थन सम्मिलित है। चूँकि, मानक IDE सुविधाएँ जैसे कि कोड पूर्णता या रिफैक्टरिंग अभी तक उपलब्ध नहीं हैं, चूँकि वह कोड:: ब्लॉक में आंशिक रूप से काम करते हैं (D की C से समानता के कारण)।
 * Xcode के लिए Xcode 3 प्लगइन D, D-आधारित परियोजनाओं और विकास को सक्षम बनाता है।
 * केडेवलप (साथ ही इसका पाठ संपादक बैकएंड, केट) स्वत: पूर्णता प्लगइन उपलब्ध है।

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

उदाहरण 1
यह उदाहरण प्रोग्राम अपने कमांड लाइन तर्कों को प्रिंट करता है।  E> फ़ंक्शन डी प्रोग्राम का प्रवेश बिंदु है, और   कमांड लाइन तर्कों का प्रतिनिधित्व करने वाले तारों की एक सरणी है। ए   डी में वर्णों की सरणी है, जिसका प्रतिनिधित्व     e> कथन किसी भी संग्रह पर पुनरावृति कर सकता है। इस स्थितियों में, यह अनुक्रमणिका का अनुक्रम उत्पन्न कर रहा है  और मान  सरणी से. अनुक्रमणिका  और मूल्य   उनके  प्रकार सरणी के प्रकार से अनुमानित हैं

उदाहरण 2
निम्नलिखित एक छोटे कार्यक्रम में कई डी क्षमताओं और डी डिजाइन ट्रेड-ऑफ दिखाता है। यह नामित टेक्स्ट फ़ाइल की पंक्तियों पर पुनरावृत्त करता है, जिसमें प्रत्येक पंक्ति पर एक अलग शब्द होता है, और उन सभी शब्दों को प्रिंट करता है जो दूसरे शब्दों के विपर्यय हैं।
 * 1)   अंतर्निहित साहचर्य सरणी है जो डीस्ट्रिंग (32-बिट / चार) कीज़ को डीस्ट्रिंग्स की सरणियों से मैप करता है। यह पायथन (प्रोग्रामिंग भाषा) में   के समान है।
 * 2)   न्यू लाइन के साथ आलसी रूप से लाइनें उत्पन्न करता है। इसके बाद साहचर्य सरणी मानों के लिए उपयोग की जाने वाली स्ट्रिंग प्राप्त करने के लिए   के साथ कॉपी किया जाना चाहिए (  सरणियों की संपत्ति सरणी का अपरिवर्तनीय डुप्लिकेट लौटाती है, जो कि आवश्यक है क्योंकि   प्रकार वास्तविक में   ) अपरिवर्तनीय है. अंतर्निहित साहचर्य सरणियों को अपरिवर्तनीय कुंजियों की आवश्यकता होती है।
 * 3)   E> ऑपरेटर सहयोगी गतिशील सरणी के मानों में नया स्ट्रिंग जोड़ता है।
 * ,  तथा   स्ट्रिंग फ़ंक्शंस हैं जो डी विधि सिंटैक्स के साथ उपयोग करने की अनुमति देता है। ऐसे कार्यों के नाम अधिकांश पायथन स्ट्रिंग विधियों के समान होते हैं।   e> स्ट्रिंग को लोअर केस में कनवर्ट करता है,   स्ट्रिंग्स की एक सरणी को एक स्ट्रिंग में विभाजक के रूप में सिंगल स्पेस का उपयोग करके जोड़ता है, और   स्ट्रिंग के अंत से एक नई लाइन को हटा देता है यदि कोई उपस्थित है तो स्ट्रिंग के अंत से नई पंक्ति निकालता है।   अधिक पठनीय है, लेकिन उदाहरण के लिए   के बराबर है। इस सुविधा को यूएफसीएस (यूनिफ़ॉर्म फ़ंक्शन कॉल सिंटैक्स) कहा जाता है, और किसी भी अंतर्निहित या तृतीय पक्ष पैकेज प्रकारों को विधि-जैसी कार्यक्षमता के साथ विस्तारित करने की अनुमति देता है। इस तरह कोड लिखने की शैली को अधिकांश पाइपलाइन (यूनिक्स) या धाराप्रवाह इंटरफ़ेस के रूप में संदर्भित किया जाता है (विशेष रूप से जब उपयोग की जाने वाली वस्तुओं को आलसी रूप से गणना की जाती है, उदाहरण के लिए इटरेटर/श्रेणियां)
 * 1)   एक std.algorithm फ़ंक्शन है जो जगह में सरणी को सॉर्ट करता है, शब्दों के लिए अद्वितीय हस्ताक्षर बनाता है जो एक दूसरे के विपर्यय हैं।   के वापसी मूल्य पर विधि   कोड को एकल अभिव्यक्ति के रूप में रखना आसान है।
 * 2) दूसरा   साहचर्य सरणी के मूल्यों पर पुनरावृत्ति करता है, यह  के प्रकार का अनुमान लगाने में सक्षम है
 * 3)   अपरिवर्तनीय वेरिएबल को समर्पण किया गया है, इसका प्रकार यह अनुमानित है।
 * 4) UTF-32   का उपयोग सामान्यतः UTF-8   के अतिरिक्त किया जाता है अन्यथा   इसे सॉर्ट करने से मना कर देता है। केवल UTF-8 का उपयोग करके इस प्रोग्राम को लिखने के अधिक प्रभावी विधियाँ हैं।

उपयोग करता है
परियोजनाओं के लिए डी प्रोग्रामिंग भाषा का उपयोग करने वाले उल्लेखनीय संगठनों में फेसबुक, ईबे, और नेटफ्लिक्स सम्मिलत हैं।

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

यह भी देखें

 * डीडॉक
 * डी भाषा फाउंडेशन

अग्रिम पठन

 * (distributed under CC-BY-NC-SA license). This book teaches programming to novices, but covers many advanced D topics as well.
 * (distributed under CC-BY-NC-SA license). This book teaches programming to novices, but covers many advanced D topics as well.
 * (distributed under CC-BY-NC-SA license). This book teaches programming to novices, but covers many advanced D topics as well.
 * (distributed under CC-BY-NC-SA license). This book teaches programming to novices, but covers many advanced D topics as well.

बाहरी संबंध

 * Digital Mars
 * Turkish Forum