انتقل إلى المحتوى

دي (لغة برمجة): الفرق بين النسختين

من ويكيبيديا، الموسوعة الحرة
[نسخة منشورة][نسخة منشورة]
تم حذف المحتوى تمت إضافة المحتوى
ZkBot (نقاش | مساهمات)
ط روبوت: استبدال قوالب: URL; تغييرات تجميلية
MenoBot (نقاش | مساهمات)
ط بوت: إصلاح أخطاء فحص ويكيبيديا من 1 إلى 104
 
(43 مراجعة متوسطة بواسطة 12 مستخدماً غير معروضة)
سطر 1: سطر 1:
{{عن|3=دي (توضيح)}}
{{معلومات لغة برمجة
{{بطاقة لغة برمجة
| اسم = لغة البرمجة دي
| اسم = لغة البرمجة دي
| شعار = [[ملف:D Programming Language logo.svg|120px]]
| شعار = [[ملف:D Programming Language logo.svg|120px]]
| امتداد_الملف = <code>.d</code>
| امتداد_الملف = <code>.d</code>
| نموذج = مترجمة، [[نمط برمجة#اللغات متعددة أنماط البرمجة|متعددة الأنماط]]: [[برمجة إجرائية|إجرائية]]، [[برمجة كائنية التوجه|كائنية التوجه]]، [[برمجة وظيفية|وظيفية]]، هيكلية
| نموذج = مترجمة، [[نمط برمجة#اللغات متعددة أنماط البرمجة|متعددة الأنماط]]: [[برمجة إجرائية|إجرائية]]، [[برمجة كائنية التوجه|كائنية التوجه]]، [[برمجة وظيفية|وظيفية]]، هيكلية
| = {{start date and age|2001}}<ref name="D1 changelog1" />
| = {{تاريخ إطلاق وعمر|2001}}
| صممها = [[والتر برايت]]، آندر ألكسانرسكو (منذ 2007)
| صممها = [[والتر برايت]]، آندر ألكسانرسكو (منذ 2007)
| المطور = [[ديجيتال مارس]]، آندر ألكسانرسكو (منذ 2007)
| المطور = [[ديجيتال مارس]]، آندر ألكسانرسكو (منذ 2007)
| آخر_إصدار = 2.071.0<ref name="D2 changelog">{{cite web|title=Changelog|
| آخر_إصدار = 2.071.0<ref name="D2 changelog">{{استشهاد بويب|عنوان=Changelog|
url = http://dlang.org/changelog.html#2.071.0|
مسار = http://dlang.org/changelog.html#2.071.0|
work = D Programming Language 2.0|
عمل = D Programming Language 2.0|
publisher = Digital Mars|
ناشر = Digital Mars|
تاريخ الوصول = 16 April 2016| مسار أرشيف = https://web.archive.org/web/20150814013131/http://dlang.org/changelog.html | تاريخ أرشيف = 14 أغسطس 2015 }}</ref>
accessdate = 16 April 2016}}</ref>
| تاريخ_آخر_إصدار = {{release date and age|2016|04|05}}<ref name="dmd-announcement">{{cite web||
| تاريخ_آخر_إصدار = {{تاريخ إطلاق وعمر|2016|04|05}}<ref name="dmd-announcement">{{استشهاد بويب|
title = Release D 2.071.0|
عنوان = Release D 2.071.0|
url = http://dlang.org/changelog/2.071.0.html|
مسار = http://dlang.org/changelog/2.071.0.html|
تاريخ الوصول = 16 April 2016| مسار أرشيف = https://web.archive.org/web/20180102230109/https://dlang.org/changelog/2.071.0.html | تاريخ أرشيف = 2 يناير 2018 }}</ref>
accessdate = 16 April 2016}}</ref>
| متأثرة_بـ = [[سي (لغة برمجة)|سي]]، [[سي++]]، [[سي شارب]]، إيفل<ref>{{cite book|last1=Alexandrescu|first1=Andrei|title=The D programming language|date=2010|publisher=Addison-Wesley|location=Upper Saddle River، NJ|isbn=0321635361|page=314|edition=First}}</ref>، [[جافا (لغة برمجة)|جافا]]{{citation needed|date = June 2015}}، [[بايثون]]{{citation needed|date = June 2015}}، [[روبي (لغة برمجة)|روبي]]
| متأثرة_بـ = [[سي (لغة برمجة)|سي]]، [[سي++]]، [[سي شارب]]، إيفل<ref>{{استشهاد بكتاب|الأخير1=Alexandrescu|الأول1=Andrei|عنوان=The D programming language|سنة=2010|مسار=https://archive.org/details/dprogramminglang00alex_050|تاريخ=2010|ناشر=Addison-Wesley|مكان=Upper Saddle River، NJ|ردمك=0321635361|صفحة=[https://archive.org/details/dprogramminglang00alex_050/page/n342 314]|إصدار=First}}</ref>، [[جافا (لغة برمجة)|جافا]]{{بحاجة لمصدر|date = June 2015}}، [[بايثون (توضيح)|بايثون]]{{بحاجة لمصدر|date = June 2015}}، [[روبي (لغة برمجة)|روبي]]
| أثرت = ميني دي، دي سكريبت، فالفا، كور، [[سويفت (لغة برمجة)|سويفت]]،<ref name="Swift - Getting the location of a caller">{{cite web | url=https://developer.apple.com/swift/blog/?id=15 | title=Building assert() in Swift، Part 2: __FILE__ and __LINE__ | accessdate=September 25، 2014}}</ref> جيني
| أثرت = ميني دي، دي سكريبت، فالفا، كور، [[سويفت (لغة برمجة)|سويفت]]،<ref name="Swift - Getting the location of a caller">{{استشهاد بويب | مسار=https://developer.apple.com/swift/blog/?id=15 | عنوان=Building assert() in Swift، Part 2: __FILE__ and __LINE__ | تاريخ الوصول=September 25، 2014| مسار أرشيف = https://web.archive.org/web/20190408175336/https://developer.apple.com/swift/blog/?id=15 | تاريخ أرشيف = 8 أبريل 2019 }}</ref> جيني
| نظام_التشغيل = [[شبيه يونكس]] ([[فري بي ‌إس ‌دي]]، [[لينكس]] إلخ.)، [[مايكروسوفت ويندوز|ويندوز]]، [[أو إس 10]]
| نظام_التشغيل = [[شبيه يونكس]] ([[فري بي إس دي|فري بي ‌إس ‌دي]]، [[لينكس]] إلخ.)، [[مايكروسوفت ويندوز|ويندوز]]، [[ماك أو إس|أو إس 10]]
| رخصة = رخصة بوست
| رخصة = رخصة بوست
| موقع = {{مسار|dlang.org}}
| موقع = {{مسار|dlang.org}}
}}
}}


'''دي''' {{إنج|D}} هي [[لغة برمجة]] [[برمجة كائنية التوجه|كائنية التوجه]]، و[[برمجة أمرية|أمرية]]، وتدعم نماذج برمجية متعددة صممها [[والتر برايت]] في [[ديجيتال مارس]]. وقد أنشئت هذه اللغة باعتبارها إعادة هندسية للغة [[سي++]]، لكنها مع كونها متأثرة على نطاق كبير بهذه اللغة فإنها ليست فرع لـ[[سي++]]. وقد أعادت دي تصميم بعض ميزات [[سي++]] وكانت متأثرة بالمفاهيم المستخدمة في لغات البرمجة الأخرى، مثل [[جافا]]، و[[بايثون]]، و[[روبي]]، و [[سي شارب]]، وإيفيل.
'''دي''' {{إنج|D}} هي [[لغة برمجة]] [[برمجة كائنية التوجه|كائنية التوجه]]، و[[برمجة أمرية|أمرية]]، وتدعم نماذج برمجية متعددة صممها [[والتر برايت]] في [[ديجيتال مارس]]. وقد أنشئت هذه اللغة باعتبارها إعادة هندسية للغة [[سي++]]، لكنها مع كونها متأثرة على نطاق كبير بهذه اللغة فإنها ليست فرع لـ[[سي++]]. وقد أعادت دي تصميم بعض ميزات [[سي++]] وكانت متأثرة بالمفاهيم المستخدمة في لغات البرمجة الأخرى، مثل [[جافا (لغة برمجة)|جافا]]، و[[بايثون (توضيح)|بايثون]]، و[[روبي (توضيح)|روبي]]، و[[سي شارب]]، وإيفيل.


== المميزات ==
== المميزات ==
لقد صممت لغة دي بدروس مستفادة من الاستخدام العملي للغة {{يسار إلى يمين| C++}} أكثر من الاعتماد في ذلك على التصور النظري. وبالرغم من واقع أنها تستخدم العديد من مفاهيم لغتي{{يسار إلى يمين| [[C]] / [[سي++]]}}، فإنها أيضا لا تستخدم البعض الآخر وكذلك فإنها غير متوافقة مع الشيفرة الأصلية لـ{{يسار إلى يمين| C/C++}}. كما أنها تضيف إلى وظيفية {{يسار إلى يمين| C++}} من خلال تطبيق التصميم التعاقدي، واختبار الوحدة، والوحدات الحقيقية، و[[جمع القمامة]]، والمصفوفات من الدرجة الأولى، والمصفوفات الترابطية، والمصفوفات الديناميكية، والمصفوفة الشرائحية، والدوال المتداخلة، والفئات الداخلية، والإغلاقات، والدوال المجهولة، وتنفيذ الوظيفة في [[وقت التصريف]]، والتقييم الكسول، كما أنها أعادت هندسة بنية القالب. وتحتفظ لغة دي بقدرة {{يسار إلى يمين| C++}} على القيام باتشفير متدني لامستوى وتضيف له بدعم من أجل inline assembler. ويحل محل الوراثة المتعددة لـ{{يسار إلى يمين| C++}} أسلوب جافا ذو الوراثة الواحدة المزود بواجهات ومتخلطات. إن إعلان وبيان وتعبير دي عن البنية مرتبط بقوة بنظيرتها في {{يسار إلى يمين| C++}}.
لقد صممت لغة دي بدروس مستفادة من الاستخدام العملي للغة {{يسار إلى يمين| C++}} أكثر من الاعتماد في ذلك على التصور النظري. وبالرغم من واقع أنها تستخدم العديد من مفاهيم لغتي{{يسار إلى يمين| [[C]] / [[سي++]]}}، فإنها أيضا لا تستخدم البعض الآخر وكذلك فإنها غير متوافقة مع الشيفرة الأصلية لـ{{يسار إلى يمين| C/C++}}. كما أنها تضيف إلى وظيفية {{يسار إلى يمين| C++}} من خلال تطبيق التصميم التعاقدي، واختبار الوحدة، والوحدات الحقيقية، و[[جمع القمامة (حاسوب)|جمع القمامة]]، والمصفوفات من الدرجة الأولى، والمصفوفات الترابطية، والمصفوفات الديناميكية، والمصفوفة الشرائحية، والدوال المتداخلة، والفئات الداخلية، والإغلاقات، والدوال المجهولة، وتنفيذ الوظيفة في [[وقت التصريف]]، والتقييم الكسول، كما أنها أعادت هندسة بنية القالب. وتحتفظ لغة دي بقدرة {{يسار إلى يمين| C++}} على القيام باتشفير متدني لامستوى وتضيف له بدعم من أجل inline assembler. ويحل محل الوراثة المتعددة لـ{{يسار إلى يمين| C++}} أسلوب جافا ذو الوراثة الواحدة المزود بواجهات ومتخلطات. إن إعلان وبيان وتعبير دي عن البنية مرتبط بقوة بنظيرتها في {{يسار إلى يمين| C++}}.
ويحدد inline assembler نوع الاختلافات بين دي ولغات التطبيق مثل [[جافا]] و [[سي شارب]]. ويمكن inline assembler المبرمجين من إدخال شفرة تجميع الآلة المحددة وفق معيار شفرة لغة دي- وهو التكنيك الذي يستخدم عادة من قبل مبرمجي النظام للوصول إلى الميزات منخفضة المستوى للمعالج والمطلوبة لتشغيل [[البرامج]] التي تتداخل مباشرة مع العتاد hardware المحدد مثل نظم التشغيل ومشغلات الجهاز.
ويحدد inline assembler نوع الاختلافات بين دي ولغات التطبيق مثل [[جافا (لغة برمجة)|جافا]] و[[سي شارب]]. ويمكن inline assembler المبرمجين من إدخال شفرة تجميع الآلة المحددة وفق معيار شفرة لغة دي- وهو التكنيك الذي يستخدم عادة من قبل مبرمجي النظام للوصول إلى الميزات منخفضة المستوى للمعالج والمطلوبة لتشغيل [[برنامج (توضيح)|البرامج]] التي تتداخل مباشرة مع العتاد hardware المحدد مثل نظم التشغيل ومشغلات الجهاز.
يوجد في لغة دي دعم للتوثيق، بما يسمح بتوليد الآلي للتوثيق.
يوجد في لغة دي دعم للتوثيق، بما يسمح بتوليد الآلي للتوثيق.


سطر 44: سطر 45:
ويمكن أن تكون القوالب في لغة دي مكتوبة في أسلوب أكثر شبها بالوظيفة مقارنة بما هو عليه الحال في [[سي++]]. وهذه وظيفة منتظمة تحسب مضروب رقم ما:
ويمكن أن تكون القوالب في لغة دي مكتوبة في أسلوب أكثر شبها بالوظيفة مقارنة بما هو عليه الحال في [[سي++]]. وهذه وظيفة منتظمة تحسب مضروب رقم ما:


<source lang="D">
<syntaxhighlight lang="D">
ulong factorial(ulong n)
ulong factorial(ulong n)
{
{
سطر 52: سطر 53:
return n * factorial(n - 1);
return n * factorial(n - 1);
}
}
</syntaxhighlight>
</source>


وهنا فإن استخدام إذا الثابتة، وهي البنية الشرطية لتصريف الوقت في لغة دي، يظهر لبناء قالب يقوم بنفس الحساب باستخدام الشفرة التي تشبه الوظيفة المذكورة عاليه:
وهنا فإن استخدام إذا الثابتة، وهي البنية الشرطية لتصريف الوقت في لغة دي، يظهر لبناء قالب يقوم بنفس الحساب باستخدام الشفرة التي تشبه الوظيفة المذكورة عاليه:


<source lang="D">
<syntaxhighlight lang="D">
template Factorial(ulong n)
template Factorial(ulong n)
{
{
سطر 64: سطر 65:
const Factorial = n * Factorial!(n - 1);
const Factorial = n * Factorial!(n - 1);
}
}
</syntaxhighlight>
</source>


وفي المثالين التاليين، فإن كلا من القالب والوظيفة المحددان عاليه يستخدمان لحساب المضاعفات. إن أنواع الثوابت ليست بحاجة إلى وضوح محدد كما هو حال المصرف في استنباط أنواعها من الجوانب اليمنى للواجبات:
وفي المثالين التاليين، فإن كلا من القالب والوظيفة المحددان عاليه يستخدمان لحساب المضاعفات. إن أنواع الثوابت ليست بحاجة إلى وضوح محدد كما هو حال المصرف في استنباط أنواعها من الجوانب اليمنى للواجبات:


<source lang="D">
<syntaxhighlight lang="D">
const fact_7 = Factorial!(7);
const fact_7 = Factorial!(7);
</syntaxhighlight>
</source>


وفيما يلي مثال على تنفيذ وظيف تصريف الوقت. يمكن استخدام الوظائف المعتادة في التعبيرات الثابتة والمصرفة زمنيا بشرط أن تلبي معايير معينة:
وفيما يلي مثال على تنفيذ وظيف تصريف الوقت. يمكن استخدام الوظائف المعتادة في التعبيرات الثابتة والمصرفة زمنيا بشرط أن تلبي معايير معينة:


<source lang="D">
<syntaxhighlight lang="D">
const fact_9 = factorial(9);
const fact_9 = factorial(9);
</syntaxhighlight>
</source>


ويؤدي قالب std.metastrings.Formatمهمة تنسيق [[البيانات]] الذي يشبه طباعة إف printf، ويستعرض "msg" pragma النتيجة عند وقت التصرف:
ويؤدي قالب std.metastrings.Formatمهمة تنسيق [[بيانات|البيانات]] الذي يشبه طباعة إف printf، ويستعرض "msg" pragma النتيجة عند وقت التصرف:


<source lang="D">
<syntaxhighlight lang="D">
import std.metastrings;
import std.metastrings;
pragma(msg, Format!("7! = %s", fact_7));
pragma(msg, Format!("7! = %s", fact_7));
pragma(msg, Format!("9! = %s", fact_9));
pragma(msg, Format!("9! = %s", fact_9));
</syntaxhighlight>
</source>


إن سلسلة الفئات Mixins، بالترافق مع تنفيذ وظيفة تصريف الوقت، تسمح بتوليد شفرة دي باستخدام عمليات مسلسلة عند وقت التصرف. ويمكن أن يستخدم ذلك لتحليل اللغات محددة النطاق لشفرة دي، والتي سيتم التصرف فيها كجزء من البرنامج
إن سلسلة الفئات Mixins، بالترافق مع تنفيذ وظيفة تصريف الوقت، تسمح بتوليد شفرة دي باستخدام عمليات مسلسلة عند وقت التصرف. ويمكن أن يستخدم ذلك لتحليل اللغات محددة النطاق لشفرة دي، والتي سيتم التصرف فيها كجزء من البرنامج


<source lang="D">
<syntaxhighlight lang="D">
import std.algorithm, std.range, std.stdio;
import std.algorithm, std.range, std.stdio;


سطر 96: سطر 97:
int[] a2 = [6,7,8,9];
int[] a2 = [6,7,8,9];
immutable pivot = 5; // must be immutable to allow access from inside mysum
immutable pivot = 5; // must be immutable to allow access from inside mysum

int mysum(int a, int b) pure // pure function
int mysum(int a, int b) pure // pure function
{
{
سطر 107: سطر 108:
auto result = reduce!(mysum)( chain(a1, a2) ); // passing a delegate (closure)
auto result = reduce!(mysum)( chain(a1, a2) ); // passing a delegate (closure)
writeln("Result: ", result); // output is "15"
writeln("Result: ", result); // output is "15"

return 0;
return 0;
}
}
</syntaxhighlight>
</source>


==== الوظيفية ====
==== الوظيفية ====
D 2.0 only.
D 2.0 only.


<source lang="D">
<syntaxhighlight lang="D">
import std.algorithm, std.range, std.stdio;
import std.algorithm, std.range, std.stdio;


سطر 123: سطر 124:
int[] a2 = [6,7,8,9];
int[] a2 = [6,7,8,9];
immutable pivot = 5; // must be immutable to allow access from inside mysum
immutable pivot = 5; // must be immutable to allow access from inside mysum

int mysum(int a, int b) pure // pure function
int mysum(int a, int b) pure // pure function
{
{
سطر 134: سطر 135:
auto result = reduce!(mysum)( chain(a1, a2) ); // passing a delegate (closure)
auto result = reduce!(mysum)( chain(a1, a2) ); // passing a delegate (closure)
writeln("Result: ", result); // output is "15"
writeln("Result: ", result); // output is "15"

return 0;
return 0;
}
}
</syntaxhighlight>
</source>


==== التزامن ====
==== التزامن ====
D 2.0 only.
D 2.0 only.
<source lang="D">
<syntaxhighlight lang="D">
import std.concurrency, std.stdio, std.typecons;
import std.concurrency, std.stdio, std.typecons;


سطر 153: سطر 154:
tid.send("hello"); // send a string
tid.send("hello"); // send a string
tid.send(thisTid); // send an object (Tid)
tid.send(thisTid); // send an object (Tid)

receive( (int x) { writeln("Main thread receives message: ", x); });
receive( (int x) { writeln("Main thread receives message: ", x); });


سطر 172: سطر 173:
}
}
}
}
</syntaxhighlight>
</source>


=== إدارة الذاكرة ===
=== إدارة الذاكرة ===


تدار [[الذاكرة]] في الغالب باستخدام المجموعة المهملة، لكن الكائنات المحددة يمكن اتمامها على الفور عندما تخرج عن النطاق. ويمكن تقديم إدارة مميزة للذاكرة باستخدام مشغلات الحمولة الزائدة الجديدة والملغاة، ومن خلال استدعاء تخصيص تناول البث المتعددة Multicast Address Allocation والحر ل C مباشرة.
تدار [[ذاكرة (توضيح)|الذاكرة]] في الغالب باستخدام المجموعة المهملة، لكن الكائنات المحددة يمكن اتمامها على الفور عندما تخرج عن النطاق. ويمكن تقديم إدارة مميزة للذاكرة باستخدام مشغلات الحمولة الزائدة الجديدة والملغاة، ومن خلال استدعاء تخصيص تناول البث المتعددة Multicast Address Allocation والحر ل C مباشرة.
ويمكن التحكم في المجموعة المهملة: ويمكن للمبرمجين أن تضيف وتستبعد نطاقات ذاكرة من كونها ملاحظة من قبل الجامع، ويمكن أن تعطل وتمكن الجامع وتجبر حدوث دورة مجموعة توليدية أو كاملة.<ref>{{cite web|title=std.gc|url=http://www.digitalmars.com/d/1.0/phobos/std_gc.html|work=D Programming Language 1.0|publisher=Digital Mars|accessdate=6 July 2010}}</ref> ويقدم الدليل أمثلة كثيرة على كيفية تطبيق نظم ذاكرة مختلفة للغاية عندما تكون المجموعة المهملة غير كافية في البرنامج.
ويمكن التحكم في المجموعة المهملة: ويمكن للمبرمجين أن تضيف وتستبعد نطاقات ذاكرة من كونها ملاحظة من قبل الجامع، ويمكن أن تعطل وتمكن الجامع وتجبر حدوث دورة مجموعة توليدية أو كاملة.<ref>{{استشهاد بويب|عنوان=std.gc|مسار=http://www.digitalmars.com/d/1.0/phobos/std_gc.html|عمل=D Programming Language 1.0|ناشر=Digital Mars|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20190311032658/https://digitalmars.com/d/1.0/phobos/std_gc.html | تاريخ أرشيف = 11 مارس 2019 }}</ref> ويقدم الدليل أمثلة كثيرة على كيفية تطبيق نظم ذاكرة مختلفة للغاية عندما تكون المجموعة المهملة غير كافية في البرنامج.


=== التفاعل مع النظم الأخرى ===
=== التفاعل مع النظم الأخرى ===
إن واجهة التطبيق الثنائية لسي (ABI) مدعومة أيضا كجميع الأنواع الأساسية والمشتقة، وتمكن من الوصول المباشر إلى شيفرة ومكتبات سي الموجودة. إن مكتبة سي القياسية هي جزء من المعيار دي.
إن واجهة التطبيق الثنائية لسي (ABI) مدعومة أيضا كجميع الأنواع الأساسية والمشتقة، وتمكن من الوصول المباشر إلى شيفرة ومكتبات سي الموجودة. إن مكتبة سي القياسية هي جزء من المعيار دي.
إن واجهة التطبيق الثنائية لـ{{يسار إلى يمين| C++}} ليست مدعومة بالكامل، بالرغم من أنه يمكن لدي أن تستخدم [[شيفرة]] {{يسار إلى يمين|C++}} المكتوبة لواجهة التطبيق الثنائية لسي. ويفهم محلل دي {{يسار إلى يمين|(C++)}} خارجي يستدعي اتفاقا من أجل صلة محدودة بكائنات {{يسار إلى يمين|C++}}، لكنه لا يطبق إلا في D 2.0.
إن واجهة التطبيق الثنائية لـ{{يسار إلى يمين| C++}} ليست مدعومة بالكامل، بالرغم من أنه يمكن لدي أن تستخدم [[نص برمجي مصدري|شيفرة]] {{يسار إلى يمين|C++}} المكتوبة لواجهة التطبيق الثنائية لسي. ويفهم محلل دي {{يسار إلى يمين|(C++)}} خارجي يستدعي اتفاقا من أجل صلة محدودة بكائنات {{يسار إلى يمين|C++}}، لكنه لا يطبق إلا في D 2.0.


== الإصدارات ==
== الإصدارات ==
سطر 187: سطر 188:


=== دي 1.0 ===
=== دي 1.0 ===
صدر الإصدار 1.00من دي ديجيتال مارس في 2 يناير 2007.<ref>{{cite web|title=D Change Log (older versions)|url=http://www.digitalmars.com/d/1.0/changelog2.html|work=D Programming Language 1.0|publisher=Digital Mars|accessdate=6 July 2010}}</ref> ومنذ صدور دي 2.0 لم يحظ دي 1.0 وتطبيقه الخاص بديجيتال مارس إلا بإضافات هامشية ومميزات غير كبيرة لم تؤثر على التوافقية تأثيرا رجعيا.
صدر الإصدار 1.00من دي ديجيتال مارس في 2 يناير 2007.<ref>{{استشهاد بويب|عنوان=D Change Log (older versions)|مسار=http://www.digitalmars.com/d/1.0/changelog2.html|عمل=D Programming Language 1.0|ناشر=Digital Mars|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20190311032951/https://digitalmars.com/d/1.0/changelog2.html | تاريخ أرشيف = 11 مارس 2019 }}</ref> ومنذ صدور دي 2.0 لم يحظ دي 1.0 وتطبيقه الخاص بديجيتال مارس إلا بإضافات هامشية ومميزات غير كبيرة لم تؤثر على التوافقية تأثيرا رجعيا.


=== دي 2.0 ===
=== دي 2.0 ===
أدخل دي 2.0 مجموعة كبيرة من الخصائص الجديدة، بعضها افترق عن التوافق مع شفرة دي 1.0.<ref>{{cite web|title=Migrating D1 Code to D2|url=http://www.digitalmars.com/d/2.0/D1toD2.html|work=D Programming Language 2.0|publisher=Digital Mars|accessdate=6 July 2010}}</ref> وبعض هذه الخصائص ما يلي:<ref>{{Cite web |url=http://www.digitalmars.com/d/2.0/features2.html|title=D 2.0 Enhancements from D 1.0|work=D Programming Language 2.0|publisher=Digital Mars|accessdate=6 July 2010}}</ref>
أدخل دي 2.0 مجموعة كبيرة من الخصائص الجديدة، بعضها افترق عن التوافق مع شفرة دي 1.0.<ref>{{استشهاد بويب|عنوان=Migrating D1 Code to D2|مسار=http://www.digitalmars.com/d/2.0/D1toD2.html|عمل=D Programming Language 2.0|ناشر=Digital Mars|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20180402221740/https://digitalmars.com/d/2.0/D1toD2.html | تاريخ أرشيف = 2 أبريل 2018 }}</ref> وبعض هذه الخصائص ما يلي:<ref>{{استشهاد بويب |مسار=http://www.digitalmars.com/d/2.0/features2.html|عنوان=D 2.0 Enhancements from D 1.0|عمل=D Programming Language 2.0|ناشر=Digital Mars|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20180402210750/https://digitalmars.com/d/2.0/features2.html | تاريخ أرشيف = 2 أبريل 2018 }}</ref>
* دعم فرض تصويب ثابت:
* دعم فرض تصويب ثابت:
** تفرق دي بين الإحالات القابلة للتغيير والبيانات غير القابلة للتغيير، والإحالات الثابتة للبيانات القابلة للتغيير والمرافقات لما هو مذكور سلفا.
** تفرق دي بين الإحالات القابلة للتغيير والبيانات غير القابلة للتغيير، والإحالات الثابتة للبيانات القابلة للتغيير والمرافقات لما هو مذكور سلفا.
** أن الكلمات الدالة الثابتة وغير القابلة للتغيير تكون متعدية.
** أن الكلمات الدالة الثابتة وغير القابلة للتغيير تكون متعدية.
* دعم محدود للوصل بالشفرة المكتوبة في {{يسار إلى يمين|C++}}.
* دعم محدود للوصل بالشفرة المكتوبة في {{يسار إلى يمين|C++}}.
* تكرار فوريتش (لكل من ) foreach على المدى المحدد فحسب.
* تكرار فوريتش (لكل من) foreach على المدى المحدد فحسب.
* دعم الإغلاقات "الحقيقية". ولا يمكن للإغلاقات السابقة أن تعاد بامان من الوظائف، لأن المتغيرات المخصصة المرصوصة ستصبح غير قابلة للوصول إليها.
* دعم الإغلاقات «الحقيقية». ولا يمكن للإغلاقات السابقة أن تعاد بامان من الوظائف، لأن المتغيرات المخصصة المرصوصة ستصبح غير قابلة للوصول إليها.
* دعم الوظائف الصرفة التي لا يمكنها سوى استخدام البيانات غير القابلة للتغيير واستدعاء الوظائف الصرفة الأخرى. ويضمن ذلك أن الوظيفة الصرفة ليس لها آثار سلبية (تكون نفس المدخلات المرصوصة دائمة مسفرة عن نفس المخرجات، ولا توجد المخرجات إلى من خلال قيم العائد). ومع دعم الإغلاق الحقيقي فإن ذلك يسمح بوجود البرمجة الوظيفية في دي ويفتح أيضا الطرق النظرية أمام التشعب الآلي الآمن.
* دعم الوظائف الصرفة التي لا يمكنها سوى استخدام البيانات غير القابلة للتغيير واستدعاء الوظائف الصرفة الأخرى. ويضمن ذلك أن الوظيفة الصرفة ليس لها آثار سلبية (تكون نفس المدخلات المرصوصة دائمة مسفرة عن نفس المخرجات، ولا توجد المخرجات إلى من خلال قيم العائد). ومع دعم الإغلاق الحقيقي فإن ذلك يسمح بوجود البرمجة الوظيفية في دي ويفتح أيضا الطرق النظرية أمام التشعب الآلي الآمن.
* وظائف عدم التخلص.
* وظائف عدم التخلص.
* مجموعة فرعية "آمنة" ( D آمنة SafeD)، والتي لا يمكنها الولوج مباشرة إلى ذاكرة لا تخص العملية (ولا يمكن توفر سوى مجموعة محددة من القوالب والمؤشر الحسابي في مثل هذه الشفرة).
* مجموعة فرعية «آمنة» (D آمنة SafeD)، والتي لا يمكنها الولوج مباشرة إلى ذاكرة لا تخص العملية (ولا يمكن توفر سوى مجموعة محددة من القوالب والمؤشر الحسابي في مثل هذه الشفرة).
* عمليات متجهة، مثل a[] = b[] + c[] ( الخلاصة العنصرية الذكية element-wise summation لمجموعتين متحركتين/ثابتتين، أو a[] = 3 (مضروب في 3 من كل مجموعة عناصر).
* عمليات متجهة، مثل a[] = b[] + c[] (الخلاصة العنصرية الذكية element-wise summation لمجموعتين متحركتين/ثابتتين، أو a[] = 3 (مضروب في 3 من كل مجموعة عناصر).
* بادئات تخزين شاملة كىسيكية لتشعب المخزون المحلي.
* بادئات تخزين شاملة كى سيكية لتشعب المخزون المحلي.
* التغيرات في مكتبة [[فوبوس]] Phobos بما فيها إضافات البرمجة الأعلى والبرمجة الوظيفية.
* التغيرات في مكتبة [[فوبوس]] Phobos بما فيها إضافات البرمجة الأعلى والبرمجة الوظيفية.
* حرفيات وظيفة قالب.
* حرفيات وظيفة قالب.


== التطبيق ==
== التطبيق ==
إن معظم التطبيقات الحالية لدي تصرف مباشرة في الشفرة الآلية من أجل التنفيذ الكفء.
إن معظم التطبيقات الحالية لD تصرف مباشرة في الشفرة الآلية من أجل التنفيذ الكفء.
* مصرف دي ديجيتال مارس DMD مصرف دي ديجيتال مارس هو المصرف الرسمي من قبل ولتر برايت. إن المصرف ذو النهاية الأمامية مرخص له من قبل كل من ذي أرتيستيك ليسنس the Artistic License و GNU GPL؛ ومن هنا يتم توزيع الشفرة الأصلية للنهاية الأمامية بامتداد ثنائيات المصرف. وتكون الشفرة الأصلية للنهاية الخلفية للمصرف متاحة لكن ليس وفق رخصة أصلية مفتوحة. وتطبق إصداري 1.0 و2.0.
* مصرف دي ديجيتال مارس DMD مصرف دي ديجيتال مارس هو المصرف الرسمي من قبل ولتر برايت. إن المصرف ذو النهاية الأمامية مرخص له من قبل كل من ذي أرتيستيك ليسنس the Artistic License و GNU GPL؛ ومن هنا يتم توزيع الشفرة الأصلية للنهاية الأمامية بامتداد ثنائيات المصرف. وتكون الشفرة الأصلية للنهاية الخلفية للمصرف متاحة لكن ليس وفق رخصة أصلية مفتوحة. وتطبق إصداري 1.0 و2.0.
* جي دي سي GDC وهو النهاية الأمامية للنهاية الخلفية ل[[جي سي سي]] GCC، وهو مبني بحيث يستخدم الشفرة الأصلية المفتوحة لمصرف دي ديجيتال مارس. كما تدعم اللقطات المطورة إصدار دي رقم 2.0.<ref>{{cite web |url=http://bitbucket.org/goshawk/gdc/ |title=gdc project on bitbucket |accessdate=3 July 2010}}</ref>
* جي دي سي GDC وهو النهاية الأمامية للنهاية الخلفية ل[[جي سي سي]] GCC، وهو مبني بحيث يستخدم الشفرة الأصلية المفتوحة لمصرف دي ديجيتال مارس. كما تدعم اللقطات المطورة إصدار دي رقم 2.0.<ref>{{استشهاد بويب |مسار=https://bitbucket.org/goshawk/gdc/wiki/Home |عنوان=gdc project on bitbucket |تاريخ الوصول=3 July 2010| مسار أرشيف = https://web.archive.org/web/20200314042454/https://bitbucket.org/goshawk/gdc/wiki/Home | تاريخ أرشيف = 14 مارس 2020 }}</ref>
* التشفير الرقمي المحلي Local Digital Coding (LDC) وهو مصرف يقوم على النهاية الأمامية لمصرف دي ديجيتال مارس الذي يستخدم LLVM باعتبارها المصرف ذو النهاية الخلفية لها. وقد نشرت أول نسخة ذات جودة في 9 يناير 2009.<ref>{{cite web |url=http://dsource.org/projects/ldc |title=LLVM D compiler project on DSource |accessdate=3 July 2010}}</ref> وهي تصرف الإصدار 1.0 فحسب.<ref>{{cite web|title=LDC can't import std.io|url=http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=115233}}</ref>
* التشفير الرقمي المحلي Local Digital Coding (LDC) وهو مصرف يقوم على النهاية الأمامية لمصرف دي ديجيتال مارس الذي يستخدم LLVM باعتبارها المصرف ذو النهاية الخلفية لها. وقد نشرت أول نسخة ذات جودة في 9 يناير 2009.<ref>{{استشهاد بويب |مسار=http://dsource.org/projects/ldc |عنوان=LLVM D compiler project on DSource |تاريخ الوصول=3 July 2010| مسار أرشيف = https://web.archive.org/web/20180930210718/http://www.dsource.org:80/projects/ldc | تاريخ أرشيف = 30 سبتمبر 2018 }}</ref> وهي تصرف الإصدار 1.0 فحسب.<ref>{{استشهاد بويب|عنوان=LDC can't import std.io|مسار=http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=115233|url-status=dead}}{{وصلة مكسورة| مسار الأرشيف = https://web.archive.org/web/20151013104910/http://forum.dlang.org/?server=news.digitalmars.com&group=digitalmars.D&artnum=115233 | تاريخ الأرشيف = 13 أكتوبر 2015 }}</ref>
* مصرف لغة دي ل[[دوت نت]] وهو النهاية الخلفية لمصرف [[لغة برمجة]] دي 2.0.<ref>{{cite web|title=D .NET project on CodePlex|url=http://dnet.codeplex.com/|accessdate=3 July 2010}}</ref><ref>{{cite web|title=Source for the D.NET Compiler is Now Available|url=http://www.infoq.com/news/2009/05/D-Source|publisher=InfoQ|accessdate=6 July 2010|author=Jonathan Allen|date=15 May 2009}}</ref> وهو يصرف الشفرة للشفرة الثمانية ل CIL بدلا من الشفرة الآلية. ومن ثم فيمكن لـ CIL أن يجري تشغيله من خلال الآلة الظاهرية لـ CLR.
* مصرف لغة دي ل[[دوت نت (توضيح)|دوت نت]] وهو النهاية الخلفية لمصرف [[لغة برمجة]] دي 2.0.<ref>{{استشهاد بويب|عنوان=D .NET project on CodePlex|مسار=https://archive.codeplex.com/?p=dnet|تاريخ الوصول=3 July 2010| مسار أرشيف = https://web.archive.org/web/20180126042332/http://dnet.codeplex.com:80/ | تاريخ أرشيف = 26 يناير 2018 }}</ref><ref>{{استشهاد بويب|عنوان=Source for the D.NET Compiler is Now Available|مسار=https://www.infoq.com/news/2009/05/D-Source/|ناشر=InfoQ|تاريخ الوصول=6 July 2010|مؤلف=Jonathan Allen|تاريخ=15 May 2009| مسار أرشيف = https://web.archive.org/web/20190311032652/https://www.infoq.com/news/2009/05/D-Source | تاريخ أرشيف = 11 مارس 2019 }}</ref> وهو يصرف الشفرة للشفرة الثمانية ل CIL بدلا من الشفرة الآلية. ومن ثم فيمكن لـ CIL أن يجري تشغيله من خلال الآلة الظاهرية لـ CLR.


== أدوات التطوير ==
== أدوات التطوير ==
إن قائمة المحررين والقائمين على إلكترونيات القرص المتكاملة Integrated eDriv sElectronic (IDEs) الداعمون لدي تشمل من بين ما تشمل [[إكليبس]] Eclipse، و [[مايكروسوفت فيجوال ستوديو]] Microsoft Visual Studio، و [[سليك إديت]] SlickEdit، و [[إيماكس]] emacs، و [[فيم]] vim، و [[سايتي]] SciTE، و [[سملترون]] Smultron، و [[تكست ميت]] TextMate، و [[زيوس]] Zeus ,<ref>[http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport/ZeusForWindows Zeus]</ref>، وجيني Geany.<ref>{{cite web|title=Wiki4D - Editor Support|url=http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport|accessdate=3 July 2010}}</ref>
إن قائمة المحررين والقائمين على إلكترونيات القرص المتكاملة Integrated eDriv sElectronic (IDEs) الداعمون لدي تشمل من بين ما تشمل [[إكلبس|إكليبس]] Eclipse، و[[مايكروسوفت فيجوال ستوديو]] Microsoft Visual Studio، و[[سليك إديت]] SlickEdit، و[[إيماكس]] emacs، و[[فيم (توضيح)|فيم]] vim، و[[سايتي]] SciTE، و[[سملترون]] Smultron، و[[تكست ميت]] TextMate، و[[زيوس]] Zeus ,<ref>[http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport/ZeusForWindows Zeus] {{Webarchive|url=https://web.archive.org/web/20160412054701/http://prowiki.org/wiki4d/wiki.cgi?EditorSupport/ZeusForWindows |date=12 أبريل 2016}}</ref>، وجيني Geany.<ref>{{استشهاد بويب|عنوان=Wiki4D - Editor Support|مسار=http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport|تاريخ الوصول=3 July 2010| مسار أرشيف = https://web.archive.org/web/20190311032629/http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport | تاريخ أرشيف = 11 مارس 2019 }}</ref>
* وهناك قابسين من إصدار [[إكليبس]] مخصصين للغة دي، وهما [[ديسنت]] Descent (مشروع ميت) و DDT,<ref>[http://code.google.com/a/eclipselabs.org/p/ddt/ DDT]</ref>.<ref>[http://dsource.org/projects/descent Descent]</ref>
* وهناك قابسين من إصدار [[إكلبس|إكليبس]] مخصصين للغة دي، وهما [[ديسنت]] Descent (مشروع ميت) و DDT,.<ref>[https://code.google.com/archive/a/eclipselabs.org/p/ddt DDT] {{Webarchive|url=https://web.archive.org/web/20131109174952/http://code.google.com/a/eclipselabs.org/p/ddt/ |date=09 نوفمبر 2013}}</ref><ref>[http://dsource.org/projects/descent Descent] {{Webarchive|url=https://web.archive.org/web/20170827121642/http://dsource.org/projects/descent |date=27 أغسطس 2017}}</ref>
* تكامل فيجوال ستوديو مقدم من قبل فيجوال دي VisualD.<ref>[http://www.dsource.org/projects/visuald VisualD]</ref>
* تكامل فيجوال ستوديو مقدم من قبل فيجوال دي VisualD.<ref>[http://www.dsource.org/projects/visuald VisualD] {{Webarchive|url=https://web.archive.org/web/20170619044518/http://dsource.org/projects/visuald |date=19 يونيو 2017}}</ref>
* تدعم فيم vim كل من التركيز على الصياغة وإكمال الشفرة (من خلال بطاقات سي Ctags المدفوعة).
* تدعم فيم vim كل من التركيز على الصياغة وإكمال الشفرة (من خلال بطاقات سي Ctags المدفوعة).
* هناك حزمة متاحة لإلكترونيات القرص المتكاملة لكل من تكست ميت وكود بلوكس Code::Blocks وتشمل الدعم الجزئي للغة. بأي حال فإن الميزات القياسية لإلكترونيات القرص المتكاملة مثل إكمال الشفرة أو إعادة التخصيم ليست متاحة بعد، بالرغم من أنها تعمل جزئيا في Code::Blocks (نظرا لتشابه لغة دي مع لغة سي).
* هناك حزمة متاحة لإلكترونيات القرص المتكاملة لكل من تكست ميت وكود بلوكس Code::Blocks وتشمل الدعم الجزئي للغة. بأي حال فإن الميزات القياسية لإلكترونيات القرص المتكاملة مثل إكمال الشفرة أو إعادة التخصيم ليست متاحة بعد، بالرغم من أنها تعمل جزئيا في Code::Blocks (نظرا لتشابه لغة دي مع لغة سي).
* وهناك قابس متاح لاكس كود XCode، وهو D for Xcode يمكن المشروعات القائمة على دي وتطويرها.<ref>[http://michelf.com/projects/d-for-xcode/ D for Xcode]</ref>
* وهناك قابس متاح لاكس كود XCode، وهو D for Xcode يمكن المشروعات القائمة على دي وتطويرها.<ref>[https://michelf.ca/projects/d-for-xcode/ D for Xcode] {{Webarchive|url=https://web.archive.org/web/20120401125916/http://michelf.com/projects/d-for-xcode/ |date=01 أبريل 2012}}</ref>


إضافة إلى ذلك هناك [[إلكترونيات]] القرص المتكاملة لدي مفتوحة المصدر (بعضها مكتوب في لغة دي نفسها) ، مثل [[بوسيدون]] ,<ref>[http://dsource.org/projects/poseidon Poseidon]</ref> Poseidon، وD-IDE,<ref>[http://d-ide.sourceforge.net/ D-IDE]</ref> وإنتيس ديزينر<ref>[http://www.dprogramming.com/entice.php Entice Designer]</ref> Entice Designer. وهناك أيضا ألكترونيات القرص المتكاملة التجارية المتوفرة مثل بيئة تنمية بيتبروكس BITPROX Development Environment.<ref>[http://bitprox.com/en/products_bde_index.html BITPROX Development Environment]</ref>
إضافة إلى ذلك هناك [[إلكترونيات]] القرص المتكاملة لدي مفتوحة المصدر (بعضها مكتوب في لغة دي نفسها)، مثل [[بوسيدون]]،<ref>[http://dsource.org/projects/poseidon Poseidon] {{Webarchive|url=https://web.archive.org/web/20171201031356/http://dsource.org/projects/poseidon |date=01 ديسمبر 2017}}</ref> Poseidon، وD-IDE,<ref>[http://d-ide.sourceforge.net/ D-IDE] {{Webarchive|url=https://web.archive.org/web/20140206102125/http://d-ide.sourceforge.net/? |date=06 فبراير 2014}}</ref> وإنتيس ديزينر<ref>[http://www.dprogramming.com/entice.php Entice Designer] {{Webarchive|url=https://web.archive.org/web/20171001081709/http://www.dprogramming.com/entice.php |date=01 أكتوبر 2017}}</ref> Entice Designer. وهناك أيضا ألكترونيات القرص المتكاملة التجارية المتوفرة مثل بيئة تنمية بيتبروكس BITPROX Development Environment.<ref>[https://proamericangroup.org/en/products_bde_index.html BITPROX Development Environment] {{Webarchive|url=https://web.archive.org/web/20100705101534/http://bitprox.com/en/products_bde_index.html |date=05 يوليو 2010}}</ref>


ويمكن تنقيح تطبيقات دي باستخدام أي منقح لـ [[C]] / [[سي++]] ، مثل GDB، أو WinDbg، بالرغم من أن دعم الميزات اللغوية المتعددة المحددة للغة دي محدودة للغاية. وفي ويندوز فإن برامج دي يمكن تنقيحها باستخدام Ddbg أو أدوات التنقيح لمايكروسوفت (WinDBG و Visual Studio)، وبعد تحويلها تستخدم المعلومات المنقحة cv2pdb. إن المنقح التجاري زيروبجس ZeroBUGS للينوكس كان له دعم تجريبي للغة دي. ويمكن أن يستخدم Ddbg مع إلكترونيات قرص متكاملة متنوعة أو من سطر الأوامر؛ ولدى زيروبجس [[واجهة المستخدم الرسومية]] الخاصة Graphical User Interface بها.
ويمكن تنقيح تطبيقات دي باستخدام أي منقح لـ [[C]] / [[سي++]] ، مثل GDB، أو WinDbg، بالرغم من أن دعم الميزات اللغوية المتعددة المحددة للغة دي محدودة للغاية. وفي ويندوز فإن برامج دي يمكن تنقيحها باستخدام Ddbg أو أدوات التنقيح لمايكروسوفت (WinDBG و Visual Studio)، وبعد تحويلها تستخدم المعلومات المنقحة cv2pdb. إن المنقح التجاري زيروبجس ZeroBUGS للينوكس كان له دعم تجريبي للغة دي. ويمكن أن يستخدم Ddbg مع إلكترونيات قرص متكاملة متنوعة أو من سطر الأوامر؛ ولدى زيروبجس [[واجهة مستخدم رسومية|واجهة المستخدم الرسومية]] الخاصة Graphical User Interface بها.


== مشكلات وقضايا جدلية ==
== مشكلات وقضايا جدلية ==
=== تقسيم المكتبة القياسية ===
=== تقسيم المكتبة القياسية ===
يطلق على المكتبة القياسية في دي لفظ [[فوبوس]]. وكان بعض أفراد جماعة لغة دي يعتقدون أن فوبوس مبسطة أكثر من اللازم وأن بها الكثير من المراوغات والقضايا الأخرى، وأنها إحلال لمكتبة مكتوبة سابقا اسمها [[تانجو]].<ref>{{cite web|title=Wiki4D - Standard Lib|url=http://www.prowiki.org/wiki4d/wiki.cgi?StandardLib|accessdate=6 July 2010}}</ref> بأي حال، في الفرع دي 1.0، فإن كل من تانجو وفوبوس غير متوافقين بسبب اختلاف دعم وقت التشغيل لواجهات التطبيق الثنائية (جامع المهملات، ودعم التشعب، الخ). إن وجود مكتبتين، وكلاهما يستخدمان على نطاق واسع، أدى إلى مشكلات كبيرة حيث أن بعض الحزم تستخدم فوبوس والبعض الآخر يستخدم تانجو.
يطلق على المكتبة القياسية في دي لفظ [[فوبوس]]. وكان بعض أفراد جماعة لغة دي يعتقدون أن فوبوس مبسطة أكثر من اللازم وأن بها الكثير من المراوغات والقضايا الأخرى، وأنها إحلال لمكتبة مكتوبة سابقا اسمها [[تانجو]].<ref>{{استشهاد بويب|عنوان=Wiki4D - Standard Lib|مسار=http://www.prowiki.org/wiki4d/wiki.cgi?StandardLib|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20190311033032/http://www.prowiki.org/wiki4d/wiki.cgi?StandardLib | تاريخ أرشيف = 11 مارس 2019 }}</ref> بأي حال، في الفرع دي 1.0، فإن كل من تانجو وفوبوس غير متوافقين بسبب اختلاف دعم وقت التشغيل لواجهات التطبيق الثنائية (جامع المهملات، ودعم التشعب، الخ). إن وجود مكتبتين، وكلاهما يستخدمان على نطاق واسع، أدى إلى مشكلات كبيرة حيث أن بعض الحزم تستخدم فوبوس والبعض الآخر يستخدم تانجو.
وسيتم تناول هذه المشكلة في فرع دي 2.0من خلال عمل وقت تشغيل مفرد يسمى وقت تشغيل دي druntime، وربط كل من فوبوس وتانجو بوقت تشغيل دي. وفي أكتوبر 2008، فوبوس كان موصلا بوقت تشغيل دي في أحدث إصدار من مصرف ديجيتال مارس. اما تانجو فإنه في طور التوصيل بدي 2.0، ومن المتوقع أن يشغل عاجلا في قمة وقت تشغيل دي. وفي المستقبل المنظور فإن دي سوف تكون لديها مكتبتي تشغيل متنافستين، لكن في فرع دي 2.0 فإنهما ستكونان متوافقتين وقابلتين للاستخدام جنبا إلى جنب في نفس قاعدة الشفرة.
وسيتم تناول هذه المشكلة في فرع دي 2.0من خلال عمل وقت تشغيل مفرد يسمى وقت تشغيل دي druntime، وربط كل من فوبوس وتانجو بوقت تشغيل دي. وفي أكتوبر 2008، فوبوس كان موصلا بوقت تشغيل دي في أحدث إصدار من مصرف ديجيتال مارس. اما تانجو فإنه في طور التوصيل بدي 2.0، ومن المتوقع أن يشغل عاجلا في قمة وقت تشغيل دي. وفي المستقبل المنظور فإن دي سوف تكون لديها مكتبتي تشغيل متنافستين، لكن في فرع دي 2.0 فإنهما ستكونان متوافقتين وقابلتين للاستخدام جنبا إلى جنب في نفس قاعدة الشفرة.


=== الدعم غير المحدود للمكتبات المشاركة/ الحركية ===
=== الدعم غير المحدود للمكتبات المشاركة/ الحركية ===
إن مكتبات Unix’s ELF المتشاركة مدعوة لاستخدام مصرف جي دي سي.
إن مكتبات Unix’s ELF المتشاركة مدعوة لاستخدام مصرف جي دي سي.
وبالنسبة لنظم ويندوز فإن مكتبات الوصل الديناميكية Dynamic Link Libraries تكون مدعومة وتسمح للكائنات المخصصة من قبل جامعة المهملات في لغة دي بأن يمر بأمان إلى وظائف سي، لأن [[جامع المهملات]] يمسح الركام للمؤشرات. بأي حال فإنه لا تزال هناك قيود متعلقة بمكتبات الوصل الميكانيكية في لغة دي بما فيها حقيقة أن معلومات نوع وقت التشغيل للفئات المعرفة في مكتبات الوصل الديناميكية غير متوافقة مع تلك المحددة في القابلة للتنفيذ، وهكذا فإن أي كائن يكون من داخل مكتبات الوصل الديناميكية يجب أن يكتمل قبل تفريغ مكتبات الوصل الديناميكية.<ref>{{cite web|title=Wiki4D - BestPractices/DLL|url=http://www.prowiki.org/wiki4d/wiki.cgi?BestPractices/DLL|accessdate=6 July 2010}}</ref>
وبالنسبة لنظم ويندوز فإن مكتبات الوصل الديناميكية Dynamic Link Libraries تكون مدعومة وتسمح للكائنات المخصصة من قبل جامعة المهملات في لغة دي بأن يمر بأمان إلى وظائف سي، لأن [[جامع المهملات]] يمسح الركام للمؤشرات. بأي حال فإنه لا تزال هناك قيود متعلقة بمكتبات الوصل الميكانيكية في لغة دي بما فيها حقيقة أن معلومات نوع وقت التشغيل للفئات المعرفة في مكتبات الوصل الديناميكية غير متوافقة مع تلك المحددة في القابلة للتنفيذ، وهكذا فإن أي كائن يكون من داخل مكتبات الوصل الديناميكية يجب أن يكتمل قبل تفريغ مكتبات الوصل الديناميكية.<ref>{{استشهاد بويب|عنوان=Wiki4D - BestPractices/DLL|مسار=http://www.prowiki.org/wiki4d/wiki.cgi?BestPractices/DLL|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20160411125242/http://www.prowiki.org/wiki4d/wiki.cgi?BestPractices/DLL | تاريخ أرشيف = 11 أبريل 2016 }}</ref>


=== تناول السلسلة ===
=== تناول السلسلة ===
تمتعت اللغة ثلاثة أنواع حروف مميزة وهي ( حرف char، حرف و wchar، وحرف د dchar) وثلاثة كنيات مسلسلة (وهي السلسلة، سلسلة و، وسلسلة د، التي هي ببساطة مجموعات ديناميكية من السابقة) والتي تقدم وحدات شفرات وسلاسل UTF-8, UTF-16 ,UTF-32 على التوالي. ولأسباب متعلقة بالأداء، فإن تشريح السلسلة والخاصية الطويلة يعملان على وحدات ال[[تشفير]] أكثر من نقاط التشفير (الأحرف)، والتي تجعل المطورين مضطربين باستمرار.<ref>{{cite web|url=http://www.prowiki.org/wiki4d/wiki.cgi?DanielKeep/TextInD|title=Wiki4D - Text in D|last=Keep|first=Daniel|accessdate=6 July 2010}}</ref> ولأن كل من UTF-8 و UTF-16 عبارة عن فك شفرات حرفية متباينة الطول، فإن الوصول باستخدام مؤشر نقطة التشفير في وقت ثابت ليس ممكنا بدون الحفاظ على جداول بحث إضافية. إن الشفرة التي تحتاج إلى وصول عشوائي سريع لنقاط التشفير سوف تحول السلاسل إلى UTF-32 أولا، أو استخدام جداول البحث. بأي حال فإن ذلك أيضا أمرا صحيحا بالنسبة للغات البرمجة الأخرى الداعمة لفك الشفرات Unicode مثل جافا و [[سي شارب]] اللتان تستخدمان UTF-16، وهكذا فغنهما قد تحتاجا إلى أزواج بديلة لتمثيل بعض نقاط التشفير.
تمتعت اللغة ثلاثة أنواع حروف مميزة وهي (حرف char، حرف و wchar، وحرف د dchar) وثلاثة كنيات مسلسلة (وهي السلسلة، سلسلة و، وسلسلة د، التي هي ببساطة مجموعات ديناميكية من السابقة) والتي تقدم وحدات شفرات وسلاسل UTF-8, UTF-16 ,UTF-32 على التوالي. ولأسباب متعلقة بالأداء، فإن تشريح السلسلة والخاصية الطويلة يعملان على وحدات ال[[تعمية (تخصص)|تشفير]] أكثر من نقاط التشفير (الأحرف)، والتي تجعل المطورين مضطربين باستمرار.<ref>{{استشهاد بويب|مسار=http://www.prowiki.org/wiki4d/wiki.cgi?DanielKeep/TextInD|عنوان=Wiki4D - Text in D|الأخير=Keep|الأول=Daniel|تاريخ الوصول=6 July 2010| مسار أرشيف = https://web.archive.org/web/20190426101025/http://www.prowiki.org/wiki4d/wiki.cgi?DanielKeep/TextInD | تاريخ أرشيف = 26 أبريل 2019 }}</ref> ولأن كل من UTF-8 و UTF-16 عبارة عن فك شفرات حرفية متباينة الطول، فإن الوصول باستخدام مؤشر نقطة التشفير في وقت ثابت ليس ممكنا بدون الحفاظ على جداول بحث إضافية. إن الشفرة التي تحتاج إلى وصول عشوائي سريع لنقاط التشفير سوف تحول السلاسل إلى UTF-32 أولا، أو استخدام جداول البحث. بأي حال فإن ذلك أيضا أمرا صحيحا بالنسبة للغات البرمجة الأخرى الداعمة لفك الشفرات Unicode مثل جافا و[[سي شارب]] اللتان تستخدمان UTF-16، وهكذا فغنهما قد تحتاجا إلى أزواج بديلة لتمثيل بعض نقاط التشفير.


== أمثلة ==
== أمثلة ==
=== المثال 1 ===
=== المثال 1 ===
إن هذا البرنامج المثالي يطبع سطر أمر معطياته. وتكون وظيفته الأساسية هي نقطة إدخال برنامج دي، وأرجات args هي مجموعة من السلاسل التي تمثل معطيات سطر الأمر. والسلسلة في دي هي مجموعة من الأحرف، والممثلة من خلال الحرف [] في دي 1.0 أو ( حرف) [] غير قابل للتغيير في أبجدية دي 2.0. بأي حال فإن الإصدارات الأحدث للغة تعرف السلسلة باعتبارها كنية عن الحرف[] أو ( حرف) [] غير قابل للتغيير ، ومن الضروري هنا وجود تعريف كنية واضحة للتوافق مع الإصدارات الأقدم
إن هذا البرنامج المثالي يطبع سطر أمر معطياته. وتكون وظيفته الأساسية هي نقطة إدخال برنامج دي، وأرجات args هي مجموعة من السلاسل التي تمثل معطيات سطر الأمر. والسلسلة في دي هي مجموعة من الأحرف، والممثلة من خلال الحرف [] في دي 1.0 أو (حرف) [] غير قابل للتغيير في أبجدية دي 2.0. بأي حال فإن الإصدارات الأحدث للغة تعرف السلسلة باعتبارها كنية عن الحرف[] أو (حرف) [] غير قابل للتغيير، ومن الضروري هنا وجود تعريف كنية واضحة للتوافق مع الإصدارات الأقدم


<source lang="D">
<syntaxhighlight lang="D">
import std.stdio: writefln;
import std.stdio: writefln;


سطر 248: سطر 249:
writefln("args[%d] = '%s'", i, arg);
writefln("args[%d] = '%s'", i, arg);
}
}
</syntaxhighlight>
</source>


يمكن لبيان الفوريتش أن يحدد أي مجموعة، وفي هذه الحالة فإنه ينتج مؤشرات مرتبة (i) وقيم (arg) من مجموعة أرجات args. إن المؤشر i والقيمة arg لهما أنواعهما المستنبطة من نوع المجموعة أرجات.
يمكن لبيان الفوريتش أن يحدد أي مجموعة، وفي هذه الحالة فإنه ينتج مؤشرات مرتبة (i) وقيم (arg) من مجموعة أرجات args. إن المؤشر i والقيمة arg لهما أنواعهما المستنبطة من نوع المجموعة أرجات.
وباستخدام مكتبة تانجو فإن الشفرة السابقة ستكون كما يلي:
وباستخدام مكتبة تانجو فإن الشفرة السابقة ستكون كما يلي:
<source lang="D">
<syntaxhighlight lang="D">
import tango.io.Stdout;
import tango.io.Stdout;


سطر 260: سطر 261:
Stdout("args[")(i)("] = '")(arg)("'").newline();
Stdout("args[")(i)("] = '")(arg)("'").newline();
}
}
</syntaxhighlight>
</source>


=== المثال 2 ===
=== المثال 2 ===
يظهر ما يلي القدرات العديدة لدي في برنامج قصير للغاية. ويحدد سطور ملف النصوص المسماة words.txt والتي تحتوي على كلمة مختلفة في كل سطر، ويطبع جميع الكلمات التي تشكل الجناس التصحيحي لجميع الكلمات الأخرى.
يظهر ما يلي القدرات العديدة لدي في برنامج قصير للغاية. ويحدد سطور ملف النصوص المسماة words.txt والتي تحتوي على كلمة مختلفة في كل سطر، ويطبع جميع الكلمات التي تشكل الجناس التصحيحي لجميع الكلمات الأخرى.


<source lang="D">
<syntaxhighlight lang="D">
import std.stdio: writefln;
import std.stdio: writefln;
import std.stream: BufferedFile;
import std.stream: BufferedFile;
سطر 281: سطر 282:
writefln(words.join(" "));
writefln(words.join(" "));
}
}
</syntaxhighlight>
</source>
# نوع التوقيع على الكلمات عبارة عن مجموعة مترابطة داخليا تخطط سلسلة المفاتيح لمجموعات السلاسل. وهو شبيه (بالقائمة) المبدئية في بايثون Python.
# نوع التوقيع على الكلمات عبارة عن مجموعة مترابطة داخليا تخطط سلسلة المفاتيح لمجموعات السلاسل. وهو شبيه (بالقائمة) المبدئية في بايثون Python.
# يقوم ملف المخزنة بوضع السطور ببطء، دون سطورها الجديدة، لأن أداء السطر الذي تضعه يكون مجرد منظر على سلسلة، لذلك يجب نسخه مكررا ليكون له نسخة مسلسلة فعلية والتي يمكن استخدامها لاحقا (إن ازدواج خاصية المجموعات يحقق ازدواجا في المجموعات نفسها).
# يقوم ملف المخزنة بوضع السطور ببطء، دون سطورها الجديدة، لأن أداء السطر الذي تضعه يكون مجرد منظر على سلسلة، لذلك يجب نسخه مكررا ليكون له نسخة مسلسلة فعلية والتي يمكن استخدامها لاحقا (إن ازدواج خاصية المجموعات يحقق ازدواجا في المجموعات نفسها).
سطر 289: سطر 290:
# وتحدد الفوريتش foreach الثانية (لغة لكل من) قيم المجموعة المترابطة، وهي قادرة على استنتاج نوع الكلمات.
# وتحدد الفوريتش foreach الثانية (لغة لكل من) قيم المجموعة المترابطة، وهي قادرة على استنتاج نوع الكلمات.


== أنظر أيضا ==
== انظر أيضا ==
* [[دي دوك]]
* [[دي دوك]]


سطر 296: سطر 297:


== قراءات أخرى ==
== قراءات أخرى ==
* {{مرجع كتاب|الأخير=Alexandrescu|الأول=Andrei|العنوان=The D Programming Language|الناشر=Addison-Wesley Professional|date=January 4, 2010|الإصدار=1|الرقم المعياري=978-0321635365}}
* {{استشهاد بكتاب|الأخير=Alexandrescu|الأول=Andrei|عنوان=The D Programming Language|ناشر=Addison-Wesley Professional|تاريخ=January 4, 2010|إصدار=1|ردمك=978-0321635365}}
* {{cite web|url=http://www.ddj.com/hpc-high-performance-computing/217801225|title=The Case for D|last=Alexandrescu|first=Andrei|date=June 15, 2009|publisher=Dr. Dobb's Journal}}
* {{استشهاد بويب|مسار= http://www.ddj.com/hpc-high-performance-computing/217801225|عنوان=The Case for D|الأخير=Alexandrescu|الأول=Andrei|تاريخ=June 15, 2009|ناشر=Dr. Dobb's Journal|مسار أرشيف= https://web.archive.org/web/20090619153710/http://www.ddj.com:80/hpc-high-performance-computing/217801225?|تاريخ أرشيف=2009-06-19}}


== وصلات خارجية ==
== وصلات خارجية ==

{{ويكي الكتب|A Beginner's Guide to D}}
* {{موقع رسمي}} Digital Mars
{{ويكي الكتب|D Programming}}
* {{مشروع الدليل المفتوح|Computers/Programming/Languages/D/|D}}
* {{موقع رسمي|www.digitalmars.com/d}} Digital Mars
* {{dmoz|Computers/Programming/Languages/D/|D}}
* [http://www.dsource.org DSource, an open source community for the D Programming Language]
* [http://www.dsource.org DSource, an open source community for the D Programming Language]
* [http://www.prowiki.org/wiki4d/wiki.cgi Wiki4D]
* [http://www.prowiki.org/wiki4d/wiki.cgi Wiki4D]
* [http://www.computerworld.com.au/index.php/id;1744247671;fp;4194304;fpid;1 Computerworld Interview with Walter Bright on D Programming Language]
* [http://www.computerworld.com.au/index.php/id;1744247671;fp;4194304;fpid;1 Computerworld Interview with Walter Bright on D Programming Language]
* [http://www.linux.com/archive/feature/124320 "New D language pumps up programmer productivity"] by Nikolai Sivertsen (in a Linux programming environment)
* [http://www.linux.com/archive/feature/124320 "New D language pumps up programmer productivity"] by Nikolai Sivertsen (in a Linux programming environment)
{{شريط بوابات|برمجة الكمبيوتر|معلوماتية}}

{{لغات برمجة}}
{{لغات برمجة}}
{{سي}}
{{ضبط استنادي}}
{{شريط بوابات|تقنية المعلومات|علم الحاسوب|برمجة الحاسوب}}
{{روابط شقيقة}}


[[تصنيف:برمجيات 2001]]
{{DEFAULTSORT:D (programming language)}}
[[تصنيف:برمجيات متعددة المنصات]]
[[تصنيف:برمجيات متعددة المنصات]]
[[تصنيف:عائلة لغة البرمجة سي]]
[[تصنيف:عائلة لغة البرمجة سي]]
[[تصنيف:لغات برمجة]]
[[تصنيف:لغات برمجة أنشئت في 2001]]
[[تصنيف:لغات برمجة إجرائية]]
[[تصنيف:لغات برمجة إجرائية]]
[[تصنيف:لغات برمجة إستاتيكية]]
[[تصنيف:لغات برمجة إستاتيكية]]

النسخة الحالية 18:28، 22 ديسمبر 2024

لغة البرمجة دي
الشعار
معلومات عامة
التصنيف
التنميط
ظهرت في
8 ديسمبر 2001 عدل القيمة على Wikidata
صممها
والتر برايت، آندر ألكسانرسكو (منذ 2007)
نظام التشغيل
الرخصة
رخصة بوست
التطوير
المطور
ديجيتال مارس، آندر ألكسانرسكو (منذ 2007)
الإصدار الأول
8 ديسمبر 2001 عدل القيمة على Wikidata
الإصدار الأخير
2.071.0[1]
التأثير
متأثرة بـ
أثرت في
ميني دي، دي سكريبت، فالفا، كور، سويفت،[4] جيني
متفرقات
امتدادات الملفات
.d
موقع الويب

دي (بالإنجليزية: D)‏ هي لغة برمجة كائنية التوجه، وأمرية، وتدعم نماذج برمجية متعددة صممها والتر برايت في ديجيتال مارس. وقد أنشئت هذه اللغة باعتبارها إعادة هندسية للغة سي++، لكنها مع كونها متأثرة على نطاق كبير بهذه اللغة فإنها ليست فرع لـسي++. وقد أعادت دي تصميم بعض ميزات سي++ وكانت متأثرة بالمفاهيم المستخدمة في لغات البرمجة الأخرى، مثل جافا، وبايثون، وروبي، وسي شارب، وإيفيل.

المميزات

[عدل]

لقد صممت لغة دي بدروس مستفادة من الاستخدام العملي للغة C++ أكثر من الاعتماد في ذلك على التصور النظري. وبالرغم من واقع أنها تستخدم العديد من مفاهيم لغتي C / سي++، فإنها أيضا لا تستخدم البعض الآخر وكذلك فإنها غير متوافقة مع الشيفرة الأصلية لـ C/C++. كما أنها تضيف إلى وظيفية C++ من خلال تطبيق التصميم التعاقدي، واختبار الوحدة، والوحدات الحقيقية، وجمع القمامة، والمصفوفات من الدرجة الأولى، والمصفوفات الترابطية، والمصفوفات الديناميكية، والمصفوفة الشرائحية، والدوال المتداخلة، والفئات الداخلية، والإغلاقات، والدوال المجهولة، وتنفيذ الوظيفة في وقت التصريف، والتقييم الكسول، كما أنها أعادت هندسة بنية القالب. وتحتفظ لغة دي بقدرة C++ على القيام باتشفير متدني لامستوى وتضيف له بدعم من أجل inline assembler. ويحل محل الوراثة المتعددة لـ C++ أسلوب جافا ذو الوراثة الواحدة المزود بواجهات ومتخلطات. إن إعلان وبيان وتعبير دي عن البنية مرتبط بقوة بنظيرتها في C++. ويحدد inline assembler نوع الاختلافات بين دي ولغات التطبيق مثل جافا وسي شارب. ويمكن inline assembler المبرمجين من إدخال شفرة تجميع الآلة المحددة وفق معيار شفرة لغة دي- وهو التكنيك الذي يستخدم عادة من قبل مبرمجي النظام للوصول إلى الميزات منخفضة المستوى للمعالج والمطلوبة لتشغيل البرامج التي تتداخل مباشرة مع العتاد hardware المحدد مثل نظم التشغيل ومشغلات الجهاز. يوجد في لغة دي دعم للتوثيق، بما يسمح بتوليد الآلي للتوثيق.

نماذج البرمجة

[عدل]

البرمجة تدعم لغة دي خمسة نماذج برمجة رئيسية وهي الأمرية والكائنية والبرمجة العلياوالوظيفية والتزامن.

الأمرية

[عدل]

إن البرمجة الأمرية في لغة دي هي الأكثر ارتباطا بلغة سي C. وتعمل الدوال والبيانات والإعلانات والتعبيرات بطريقة مشابهة تماما للغة سي، ويمكن الوصول لمكتبة وقت تشغيل سي مباشرة. وهناك بعض الاختلافات الملحوظة بين دي وسي في مجال البرمجة الأمرية بما فيها حلقة foreach، والذي يسمح بالالتفاف حول المجموعات، والدوال المتداخلة، وهي الدوال التي تعلن داخل دوال أخرى ويمكنها الوصول إلى الدالة المتضمنة للمتغيرات المحلية.

القائمة على الكائن

[عدل]

إن البرمجة القائمة على الكائن في دي تقوم على تراتبية موروثة واحدة، مع جميع الفئات المشتقة من فئة الكائن Object. ولا تدعم لغة دي الموروث المتعدد؛ وبدلا من ذلك فإنها تستخدم واجهات بأسلوب الجافا، والتي يمكن مقارنتها بالفئات المجردة الصرفة للغة C++، والفئات mixins، والتي تسمح بفصل الوظيفية المشتركة عن التراتبية الموروثة. إضافة إلى ذلك فإن دي 2.0 تسمح بإعلان الطرق الثابتة والنهائية (غير الظاهرية) في الواجهات.

البرمجة الأعلى

[عدل]

تدعم البرمجة الأعلى مجموعة من القوالب، وتنفيذ وظيفة تصريف الوقت، التتابعات tuples، وسلسلة الفئات. وتظهر النماذج التالية بعضا من مميزات تصريف الوقت في لغة دي. ويمكن أن تكون القوالب في لغة دي مكتوبة في أسلوب أكثر شبها بالوظيفة مقارنة بما هو عليه الحال في سي++. وهذه وظيفة منتظمة تحسب مضروب رقم ما:

ulong factorial(ulong n)
{
    if(n <2)
        return 1;
    else
        return n * factorial(n - 1);
}

وهنا فإن استخدام إذا الثابتة، وهي البنية الشرطية لتصريف الوقت في لغة دي، يظهر لبناء قالب يقوم بنفس الحساب باستخدام الشفرة التي تشبه الوظيفة المذكورة عاليه:

template Factorial(ulong n)
{
    static if(n <2)
        const Factorial = 1;
    else
        const Factorial = n * Factorial!(n - 1);
}

وفي المثالين التاليين، فإن كلا من القالب والوظيفة المحددان عاليه يستخدمان لحساب المضاعفات. إن أنواع الثوابت ليست بحاجة إلى وضوح محدد كما هو حال المصرف في استنباط أنواعها من الجوانب اليمنى للواجبات:

const fact_7 = Factorial!(7);

وفيما يلي مثال على تنفيذ وظيف تصريف الوقت. يمكن استخدام الوظائف المعتادة في التعبيرات الثابتة والمصرفة زمنيا بشرط أن تلبي معايير معينة:

const fact_9 = factorial(9);

ويؤدي قالب std.metastrings.Formatمهمة تنسيق البيانات الذي يشبه طباعة إف printf، ويستعرض "msg" pragma النتيجة عند وقت التصرف:

import std.metastrings;
pragma(msg, Format!("7! = %s", fact_7));
pragma(msg, Format!("9! = %s", fact_9));

إن سلسلة الفئات Mixins، بالترافق مع تنفيذ وظيفة تصريف الوقت، تسمح بتوليد شفرة دي باستخدام عمليات مسلسلة عند وقت التصرف. ويمكن أن يستخدم ذلك لتحليل اللغات محددة النطاق لشفرة دي، والتي سيتم التصرف فيها كجزء من البرنامج

import std.algorithm, std.range, std.stdio;

int main()
{
    int[] a1 = [0,1,2,3,4,5,6,7,8,9];
    int[] a2 = [6,7,8,9];
    immutable pivot = 5; // must be immutable to allow access from inside mysum

    int mysum(int a, int b) pure // pure function
    {
        if (b <= pivot) // ref to enclosing-scope
            return a + b;
        else
            return a;
    }

    auto result = reduce!(mysum)( chain(a1, a2) ); // passing a delegate (closure)
    writeln("Result: ", result); // output is "15"

    return 0;
}

الوظيفية

[عدل]

D 2.0 only.

import std.algorithm, std.range, std.stdio;

int main()
{
    int[] a1 = [0,1,2,3,4,5,6,7,8,9];
    int[] a2 = [6,7,8,9];
    immutable pivot = 5; // must be immutable to allow access from inside mysum

    int mysum(int a, int b) pure // pure function
    {
        if (b <= pivot) // ref to enclosing-scope
            return a + b;
        else
            return a;
    }

    auto result = reduce!(mysum)( chain(a1, a2) ); // passing a delegate (closure)
    writeln("Result: ", result); // output is "15"

    return 0;
}

التزامن

[عدل]

D 2.0 only.

import std.concurrency, std.stdio, std.typecons;

int main()
{
    auto tid = spawn(&foo); // create an actor object

    foreach(i; 0 .. 10)
        tid.send(i);    // send some integers
    tid.send(1.0f);     // send a float
    tid.send("hello");  // send a string
    tid.send(thisTid);  // send an object (Tid)

    receive( (int x) {  writeln("Main thread receives message: ", x);  });

    return 0;
}

void foo()
{
    bool cont = true;

    while (cont)
    {
        receive(  // pattern matching
            (int msg) 	{ writeln("int receive: ", msg); },  // int type
            (Tid sender){ cont = false; sender.send(-1); },  // object type
            (Variant v)	{ writeln("huh?"); }  // any type
        );
    }
}

إدارة الذاكرة

[عدل]

تدار الذاكرة في الغالب باستخدام المجموعة المهملة، لكن الكائنات المحددة يمكن اتمامها على الفور عندما تخرج عن النطاق. ويمكن تقديم إدارة مميزة للذاكرة باستخدام مشغلات الحمولة الزائدة الجديدة والملغاة، ومن خلال استدعاء تخصيص تناول البث المتعددة Multicast Address Allocation والحر ل C مباشرة. ويمكن التحكم في المجموعة المهملة: ويمكن للمبرمجين أن تضيف وتستبعد نطاقات ذاكرة من كونها ملاحظة من قبل الجامع، ويمكن أن تعطل وتمكن الجامع وتجبر حدوث دورة مجموعة توليدية أو كاملة.[6] ويقدم الدليل أمثلة كثيرة على كيفية تطبيق نظم ذاكرة مختلفة للغاية عندما تكون المجموعة المهملة غير كافية في البرنامج.

التفاعل مع النظم الأخرى

[عدل]

إن واجهة التطبيق الثنائية لسي (ABI) مدعومة أيضا كجميع الأنواع الأساسية والمشتقة، وتمكن من الوصول المباشر إلى شيفرة ومكتبات سي الموجودة. إن مكتبة سي القياسية هي جزء من المعيار دي. إن واجهة التطبيق الثنائية لـ C++ ليست مدعومة بالكامل، بالرغم من أنه يمكن لدي أن تستخدم شيفرة C++ المكتوبة لواجهة التطبيق الثنائية لسي. ويفهم محلل دي (C++) خارجي يستدعي اتفاقا من أجل صلة محدودة بكائنات C++، لكنه لا يطبق إلا في D 2.0.

الإصدارات

[عدل]

توجد لغة برمجة دي في إصدارين: 1.0 و 2.0. وقد أصبحت دي 1.0مستقرة بإصدار D2.0 في 17 يونيو 2007، ومنذ ذلك الوقت قدمت إضافات مزيدة للغة منذ تلك لاتي أضيفت للنسخة 2.0. إن إصدار كتاب أندريه ألكسندريسكو الذي يحمل عنوان لغة برمجة دي في 12 يونيو 2010 شكل بداية لاستقرار D2.0.

دي 1.0

[عدل]

صدر الإصدار 1.00من دي ديجيتال مارس في 2 يناير 2007.[7] ومنذ صدور دي 2.0 لم يحظ دي 1.0 وتطبيقه الخاص بديجيتال مارس إلا بإضافات هامشية ومميزات غير كبيرة لم تؤثر على التوافقية تأثيرا رجعيا.

دي 2.0

[عدل]

أدخل دي 2.0 مجموعة كبيرة من الخصائص الجديدة، بعضها افترق عن التوافق مع شفرة دي 1.0.[8] وبعض هذه الخصائص ما يلي:[9]

  • دعم فرض تصويب ثابت:
    • تفرق دي بين الإحالات القابلة للتغيير والبيانات غير القابلة للتغيير، والإحالات الثابتة للبيانات القابلة للتغيير والمرافقات لما هو مذكور سلفا.
    • أن الكلمات الدالة الثابتة وغير القابلة للتغيير تكون متعدية.
  • دعم محدود للوصل بالشفرة المكتوبة في C++.
  • تكرار فوريتش (لكل من) foreach على المدى المحدد فحسب.
  • دعم الإغلاقات «الحقيقية». ولا يمكن للإغلاقات السابقة أن تعاد بامان من الوظائف، لأن المتغيرات المخصصة المرصوصة ستصبح غير قابلة للوصول إليها.
  • دعم الوظائف الصرفة التي لا يمكنها سوى استخدام البيانات غير القابلة للتغيير واستدعاء الوظائف الصرفة الأخرى. ويضمن ذلك أن الوظيفة الصرفة ليس لها آثار سلبية (تكون نفس المدخلات المرصوصة دائمة مسفرة عن نفس المخرجات، ولا توجد المخرجات إلى من خلال قيم العائد). ومع دعم الإغلاق الحقيقي فإن ذلك يسمح بوجود البرمجة الوظيفية في دي ويفتح أيضا الطرق النظرية أمام التشعب الآلي الآمن.
  • وظائف عدم التخلص.
  • مجموعة فرعية «آمنة» (D آمنة SafeD)، والتي لا يمكنها الولوج مباشرة إلى ذاكرة لا تخص العملية (ولا يمكن توفر سوى مجموعة محددة من القوالب والمؤشر الحسابي في مثل هذه الشفرة).
  • عمليات متجهة، مثل a[] = b[] + c[] (الخلاصة العنصرية الذكية element-wise summation لمجموعتين متحركتين/ثابتتين، أو a[] = 3 (مضروب في 3 من كل مجموعة عناصر).
  • بادئات تخزين شاملة كى سيكية لتشعب المخزون المحلي.
  • التغيرات في مكتبة فوبوس Phobos بما فيها إضافات البرمجة الأعلى والبرمجة الوظيفية.
  • حرفيات وظيفة قالب.

التطبيق

[عدل]

إن معظم التطبيقات الحالية لD تصرف مباشرة في الشفرة الآلية من أجل التنفيذ الكفء.

  • مصرف دي ديجيتال مارس DMD مصرف دي ديجيتال مارس هو المصرف الرسمي من قبل ولتر برايت. إن المصرف ذو النهاية الأمامية مرخص له من قبل كل من ذي أرتيستيك ليسنس the Artistic License و GNU GPL؛ ومن هنا يتم توزيع الشفرة الأصلية للنهاية الأمامية بامتداد ثنائيات المصرف. وتكون الشفرة الأصلية للنهاية الخلفية للمصرف متاحة لكن ليس وفق رخصة أصلية مفتوحة. وتطبق إصداري 1.0 و2.0.
  • جي دي سي GDC وهو النهاية الأمامية للنهاية الخلفية لجي سي سي GCC، وهو مبني بحيث يستخدم الشفرة الأصلية المفتوحة لمصرف دي ديجيتال مارس. كما تدعم اللقطات المطورة إصدار دي رقم 2.0.[10]
  • التشفير الرقمي المحلي Local Digital Coding (LDC) وهو مصرف يقوم على النهاية الأمامية لمصرف دي ديجيتال مارس الذي يستخدم LLVM باعتبارها المصرف ذو النهاية الخلفية لها. وقد نشرت أول نسخة ذات جودة في 9 يناير 2009.[11] وهي تصرف الإصدار 1.0 فحسب.[12]
  • مصرف لغة دي لدوت نت وهو النهاية الخلفية لمصرف لغة برمجة دي 2.0.[13][14] وهو يصرف الشفرة للشفرة الثمانية ل CIL بدلا من الشفرة الآلية. ومن ثم فيمكن لـ CIL أن يجري تشغيله من خلال الآلة الظاهرية لـ CLR.

أدوات التطوير

[عدل]

إن قائمة المحررين والقائمين على إلكترونيات القرص المتكاملة Integrated eDriv sElectronic (IDEs) الداعمون لدي تشمل من بين ما تشمل إكليبس Eclipse، ومايكروسوفت فيجوال ستوديو Microsoft Visual Studio، وسليك إديت SlickEdit، وإيماكس emacs، وفيم vim، وسايتي SciTE، وسملترون Smultron، وتكست ميت TextMate، وزيوس Zeus ,[15]، وجيني Geany.[16]

  • وهناك قابسين من إصدار إكليبس مخصصين للغة دي، وهما ديسنت Descent (مشروع ميت) و DDT,.[17][18]
  • تكامل فيجوال ستوديو مقدم من قبل فيجوال دي VisualD.[19]
  • تدعم فيم vim كل من التركيز على الصياغة وإكمال الشفرة (من خلال بطاقات سي Ctags المدفوعة).
  • هناك حزمة متاحة لإلكترونيات القرص المتكاملة لكل من تكست ميت وكود بلوكس Code::Blocks وتشمل الدعم الجزئي للغة. بأي حال فإن الميزات القياسية لإلكترونيات القرص المتكاملة مثل إكمال الشفرة أو إعادة التخصيم ليست متاحة بعد، بالرغم من أنها تعمل جزئيا في Code::Blocks (نظرا لتشابه لغة دي مع لغة سي).
  • وهناك قابس متاح لاكس كود XCode، وهو D for Xcode يمكن المشروعات القائمة على دي وتطويرها.[20]

إضافة إلى ذلك هناك إلكترونيات القرص المتكاملة لدي مفتوحة المصدر (بعضها مكتوب في لغة دي نفسها)، مثل بوسيدون،[21] Poseidon، وD-IDE,[22] وإنتيس ديزينر[23] Entice Designer. وهناك أيضا ألكترونيات القرص المتكاملة التجارية المتوفرة مثل بيئة تنمية بيتبروكس BITPROX Development Environment.[24]

ويمكن تنقيح تطبيقات دي باستخدام أي منقح لـ C / سي++ ، مثل GDB، أو WinDbg، بالرغم من أن دعم الميزات اللغوية المتعددة المحددة للغة دي محدودة للغاية. وفي ويندوز فإن برامج دي يمكن تنقيحها باستخدام Ddbg أو أدوات التنقيح لمايكروسوفت (WinDBG و Visual Studio)، وبعد تحويلها تستخدم المعلومات المنقحة cv2pdb. إن المنقح التجاري زيروبجس ZeroBUGS للينوكس كان له دعم تجريبي للغة دي. ويمكن أن يستخدم Ddbg مع إلكترونيات قرص متكاملة متنوعة أو من سطر الأوامر؛ ولدى زيروبجس واجهة المستخدم الرسومية الخاصة Graphical User Interface بها.

مشكلات وقضايا جدلية

[عدل]

تقسيم المكتبة القياسية

[عدل]

يطلق على المكتبة القياسية في دي لفظ فوبوس. وكان بعض أفراد جماعة لغة دي يعتقدون أن فوبوس مبسطة أكثر من اللازم وأن بها الكثير من المراوغات والقضايا الأخرى، وأنها إحلال لمكتبة مكتوبة سابقا اسمها تانجو.[25] بأي حال، في الفرع دي 1.0، فإن كل من تانجو وفوبوس غير متوافقين بسبب اختلاف دعم وقت التشغيل لواجهات التطبيق الثنائية (جامع المهملات، ودعم التشعب، الخ). إن وجود مكتبتين، وكلاهما يستخدمان على نطاق واسع، أدى إلى مشكلات كبيرة حيث أن بعض الحزم تستخدم فوبوس والبعض الآخر يستخدم تانجو. وسيتم تناول هذه المشكلة في فرع دي 2.0من خلال عمل وقت تشغيل مفرد يسمى وقت تشغيل دي druntime، وربط كل من فوبوس وتانجو بوقت تشغيل دي. وفي أكتوبر 2008، فوبوس كان موصلا بوقت تشغيل دي في أحدث إصدار من مصرف ديجيتال مارس. اما تانجو فإنه في طور التوصيل بدي 2.0، ومن المتوقع أن يشغل عاجلا في قمة وقت تشغيل دي. وفي المستقبل المنظور فإن دي سوف تكون لديها مكتبتي تشغيل متنافستين، لكن في فرع دي 2.0 فإنهما ستكونان متوافقتين وقابلتين للاستخدام جنبا إلى جنب في نفس قاعدة الشفرة.

الدعم غير المحدود للمكتبات المشاركة/ الحركية

[عدل]

إن مكتبات Unix’s ELF المتشاركة مدعوة لاستخدام مصرف جي دي سي. وبالنسبة لنظم ويندوز فإن مكتبات الوصل الديناميكية Dynamic Link Libraries تكون مدعومة وتسمح للكائنات المخصصة من قبل جامعة المهملات في لغة دي بأن يمر بأمان إلى وظائف سي، لأن جامع المهملات يمسح الركام للمؤشرات. بأي حال فإنه لا تزال هناك قيود متعلقة بمكتبات الوصل الميكانيكية في لغة دي بما فيها حقيقة أن معلومات نوع وقت التشغيل للفئات المعرفة في مكتبات الوصل الديناميكية غير متوافقة مع تلك المحددة في القابلة للتنفيذ، وهكذا فإن أي كائن يكون من داخل مكتبات الوصل الديناميكية يجب أن يكتمل قبل تفريغ مكتبات الوصل الديناميكية.[26]

تناول السلسلة

[عدل]

تمتعت اللغة ثلاثة أنواع حروف مميزة وهي (حرف char، حرف و wchar، وحرف د dchar) وثلاثة كنيات مسلسلة (وهي السلسلة، سلسلة و، وسلسلة د، التي هي ببساطة مجموعات ديناميكية من السابقة) والتي تقدم وحدات شفرات وسلاسل UTF-8, UTF-16 ,UTF-32 على التوالي. ولأسباب متعلقة بالأداء، فإن تشريح السلسلة والخاصية الطويلة يعملان على وحدات التشفير أكثر من نقاط التشفير (الأحرف)، والتي تجعل المطورين مضطربين باستمرار.[27] ولأن كل من UTF-8 و UTF-16 عبارة عن فك شفرات حرفية متباينة الطول، فإن الوصول باستخدام مؤشر نقطة التشفير في وقت ثابت ليس ممكنا بدون الحفاظ على جداول بحث إضافية. إن الشفرة التي تحتاج إلى وصول عشوائي سريع لنقاط التشفير سوف تحول السلاسل إلى UTF-32 أولا، أو استخدام جداول البحث. بأي حال فإن ذلك أيضا أمرا صحيحا بالنسبة للغات البرمجة الأخرى الداعمة لفك الشفرات Unicode مثل جافا وسي شارب اللتان تستخدمان UTF-16، وهكذا فغنهما قد تحتاجا إلى أزواج بديلة لتمثيل بعض نقاط التشفير.

أمثلة

[عدل]

المثال 1

[عدل]

إن هذا البرنامج المثالي يطبع سطر أمر معطياته. وتكون وظيفته الأساسية هي نقطة إدخال برنامج دي، وأرجات args هي مجموعة من السلاسل التي تمثل معطيات سطر الأمر. والسلسلة في دي هي مجموعة من الأحرف، والممثلة من خلال الحرف [] في دي 1.0 أو (حرف) [] غير قابل للتغيير في أبجدية دي 2.0. بأي حال فإن الإصدارات الأحدث للغة تعرف السلسلة باعتبارها كنية عن الحرف[] أو (حرف) [] غير قابل للتغيير، ومن الضروري هنا وجود تعريف كنية واضحة للتوافق مع الإصدارات الأقدم

import std.stdio: writefln;

void main(string[] args)
{
    foreach (i, arg; args)
        writefln("args[%d] = '%s'", i, arg);
}

يمكن لبيان الفوريتش أن يحدد أي مجموعة، وفي هذه الحالة فإنه ينتج مؤشرات مرتبة (i) وقيم (arg) من مجموعة أرجات args. إن المؤشر i والقيمة arg لهما أنواعهما المستنبطة من نوع المجموعة أرجات. وباستخدام مكتبة تانجو فإن الشفرة السابقة ستكون كما يلي:

import tango.io.Stdout;

void main(char[][] args)
{
    foreach (i, arg; args)
        Stdout("args[")(i)("] = '")(arg)("'").newline();
}

المثال 2

[عدل]

يظهر ما يلي القدرات العديدة لدي في برنامج قصير للغاية. ويحدد سطور ملف النصوص المسماة words.txt والتي تحتوي على كلمة مختلفة في كل سطر، ويطبع جميع الكلمات التي تشكل الجناس التصحيحي لجميع الكلمات الأخرى.

import std.stdio: writefln;
import std.stream: BufferedFile;
import std.string: tolower, join;

void main()
{
    string[][string] signature2words;

    foreach (string line; new BufferedFile("words.txt"))
        signature2words[line.tolower.sort] ~= line.dup;

    foreach (words; signature2words)
        if (words.length> 1)
            writefln(words.join(" "));
}
  1. نوع التوقيع على الكلمات عبارة عن مجموعة مترابطة داخليا تخطط سلسلة المفاتيح لمجموعات السلاسل. وهو شبيه (بالقائمة) المبدئية في بايثون Python.
  2. يقوم ملف المخزنة بوضع السطور ببطء، دون سطورها الجديدة، لأن أداء السطر الذي تضعه يكون مجرد منظر على سلسلة، لذلك يجب نسخه مكررا ليكون له نسخة مسلسلة فعلية والتي يمكن استخدامها لاحقا (إن ازدواج خاصية المجموعات يحقق ازدواجا في المجموعات نفسها).
  3. يلحق مشغل ~= سلسلة جديدة للقيم التي تربط المجموعة.
  4. إن كل من تولوير tolower والمشترك وظيفتين متسلسلتين تسمح دي باستخدامهما بمنهج بنيوي، وأسماءهم تشبه عادة طرق تسلسل بايثون. ويحول تولوير tolower سلسلة ASCII إلى حالة أدنى وتقوم المشترك join (" ") بجمع مجموعة من السلاسل في سلسلة واحدة باستخدام مسافة واحدة كفاصل.
  5. تفرز خاصية الفرز المجموعة القائمة، وتكون توقيعا فريدا للكلمات التي تشكل الجناس التصحيحي لبعضها البعض.
  6. وتحدد الفوريتش foreach الثانية (لغة لكل من) قيم المجموعة المترابطة، وهي قادرة على استنتاج نوع الكلمات.

انظر أيضا

[عدل]

المراجع

[عدل]
  1. ^ "Changelog". D Programming Language 2.0. Digital Mars. مؤرشف من الأصل في 2015-08-14. اطلع عليه بتاريخ 2016-04-16.
  2. ^ "Release D 2.071.0". مؤرشف من الأصل في 2018-01-02. اطلع عليه بتاريخ 2016-04-16.
  3. ^ Alexandrescu، Andrei (2010). The D programming language (ط. First). Upper Saddle River، NJ: Addison-Wesley. ص. 314. ISBN:0321635361.{{استشهاد بكتاب}}: صيانة الاستشهاد: التاريخ والسنة (link)
  4. ^ "Building assert() in Swift، Part 2: __FILE__ and __LINE__". مؤرشف من الأصل في 8 أبريل 2019. اطلع عليه بتاريخ September 25، 2014. {{استشهاد ويب}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  5. ^ "2.109.1". اطلع عليه بتاريخ 2024-07-07.
  6. ^ "std.gc". D Programming Language 1.0. Digital Mars. مؤرشف من الأصل في 2019-03-11. اطلع عليه بتاريخ 2010-07-06.
  7. ^ "D Change Log (older versions)". D Programming Language 1.0. Digital Mars. مؤرشف من الأصل في 2019-03-11. اطلع عليه بتاريخ 2010-07-06.
  8. ^ "Migrating D1 Code to D2". D Programming Language 2.0. Digital Mars. مؤرشف من الأصل في 2018-04-02. اطلع عليه بتاريخ 2010-07-06.
  9. ^ "D 2.0 Enhancements from D 1.0". D Programming Language 2.0. Digital Mars. مؤرشف من الأصل في 2018-04-02. اطلع عليه بتاريخ 2010-07-06.
  10. ^ "gdc project on bitbucket". مؤرشف من الأصل في 2020-03-14. اطلع عليه بتاريخ 2010-07-03.
  11. ^ "LLVM D compiler project on DSource". مؤرشف من الأصل في 2018-09-30. اطلع عليه بتاريخ 2010-07-03.
  12. ^ "LDC can't import std.io".{{استشهاد ويب}}: صيانة الاستشهاد: url-status (link)[وصلة مكسورة]
  13. ^ "D .NET project on CodePlex". مؤرشف من الأصل في 2018-01-26. اطلع عليه بتاريخ 2010-07-03.
  14. ^ Jonathan Allen (15 مايو 2009). "Source for the D.NET Compiler is Now Available". InfoQ. مؤرشف من الأصل في 2019-03-11. اطلع عليه بتاريخ 2010-07-06.
  15. ^ Zeus نسخة محفوظة 12 أبريل 2016 على موقع واي باك مشين.
  16. ^ "Wiki4D - Editor Support". مؤرشف من الأصل في 2019-03-11. اطلع عليه بتاريخ 2010-07-03.
  17. ^ DDT نسخة محفوظة 09 نوفمبر 2013 على موقع واي باك مشين.
  18. ^ Descent نسخة محفوظة 27 أغسطس 2017 على موقع واي باك مشين.
  19. ^ VisualD نسخة محفوظة 19 يونيو 2017 على موقع واي باك مشين.
  20. ^ D for Xcode نسخة محفوظة 01 أبريل 2012 على موقع واي باك مشين.
  21. ^ Poseidon نسخة محفوظة 01 ديسمبر 2017 على موقع واي باك مشين.
  22. ^ D-IDE نسخة محفوظة 06 فبراير 2014 على موقع واي باك مشين.
  23. ^ Entice Designer نسخة محفوظة 01 أكتوبر 2017 على موقع واي باك مشين.
  24. ^ BITPROX Development Environment نسخة محفوظة 05 يوليو 2010 على موقع واي باك مشين.
  25. ^ "Wiki4D - Standard Lib". مؤرشف من الأصل في 2019-03-11. اطلع عليه بتاريخ 2010-07-06.
  26. ^ "Wiki4D - BestPractices/DLL". مؤرشف من الأصل في 2016-04-11. اطلع عليه بتاريخ 2010-07-06.
  27. ^ Keep، Daniel. "Wiki4D - Text in D". مؤرشف من الأصل في 2019-04-26. اطلع عليه بتاريخ 2010-07-06.

قراءات أخرى

[عدل]
  • Alexandrescu، Andrei (4 يناير 2010). The D Programming Language (ط. 1). Addison-Wesley Professional. ISBN:978-0321635365.
  • Alexandrescu، Andrei (15 يونيو 2009). "The Case for D". Dr. Dobb's Journal. مؤرشف من الأصل في 2009-06-19.

وصلات خارجية

[عدل]