زبان برنامه‌نویسی D، یک زبان شی گرا، امری و چندالگویی سیستمی است که توسط Walter Bright از Digital Mars طراحی و در سال ۲۰۰۱ منتشر شد. Bright توسط Andrei Alexandrescu در سال ۲۰۰۶ به تلاش توسعه و طراحی پیوست. با اینکه D مهندسی دوباره‌ای از سی پلاس پلاس است، کاملاً یک زبان جدا محسوب می‌شود؛ زیرا بسیاری از ویژگی‌های هسته سی پلاس پلاس را نگه داشته و بسیاری را دور ریخته‌است. در طراحی زبان دی همچنین از زبان‌هایی مانند پایتون، روبی، سی شارپ، ایفل و جاوا نیز الهام گرفته شده‌است. هدف طراحی زبان D ترکیب کارایی و امنیت زبان‌های کامپایلری، با قدرت زبان‌های پویای مدرن است. کد یک برنامه در زبان D شبیه به زبان سی پلاس پلاس است، اما کوتاه‌تر می‌باشد.

ویژگی‌ها
--------

۱. چند الگویی
  
۱٫۱ امری: زبان D یک زبان امری مشابه C است. توابع، داده‌ها، دستورها، اعلان‌ها و عبارات کاملاً مانند زبان C عمل می‌کنند. از تفاوت‌های مهم زبان D با زبان C در امری بودن، می‌توان به حلقه foreach اشاره کرد که امکان حرکت کردن روی یک collection را به ما می‌دهد. همچنین، زبان D دارای توابع تو در تو است که داخل یکدیگر تعریف می‌شوند.
  
۱٫۲ شی گرایی: زبان D بر پایه سلسله مراتب وراثت تکی بنا شده‌است و از وراثت چندگانه پشتیبانی نمی‌کند.
  
۱٫۳ Meta Programming
  
۱٫۴ تابعی: زبان D از بسیاری ویژگی‌های برنامه‌نویسی تابعی پشتیبانی می‌کند؛ مانند ثابت توابع، اشیای بازگشتی-تغییرناپذیر و همچنین توابع با اولویت بالا
  
۱٫۵ موازی: مثلاً در یک حلقهٔ for همه دفعات تکرار حلقه همزمان اجرا می‌شوند.

```
import std.stdio : writeln;
import std.range : iota;
import std.parallelism : parallel;

void main()
{
 foreach (i; iota(10).parallel) {
 // The body of the foreach loop is executed in parallel for each i
 writeln("processing ", i);
 }
}

```

  
۱٫۶ همروندی

```
import std.stdio, std.concurrency;

void foo()
{
 bool cont = true;

 while (cont)
 {
 receive( // delegates are used to match the message type
 (int msg) => writeln("int received: ", msg),
 (Tid sender) { cont = false; sender.send(-1); },
 (Variant v) => writeln("huh?") // Variant matches any type
 );
 }
}

void main()
{
 auto tid = spawn(&foo); // spawn a new thread running foo()

 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 a struct (Tid)

 receive((int x) => writeln("Main thread received message: ", x));
}

```

  
۲. مدیریت حافظه: برای این کار هم می‌توان از توابع new و delete استفاده کرد و هم از malloc و free به همان شکل زبان C به صورت مستقیم؛
  
۳. SafeD: به زیر مجموعه‌ای از زبان D گفته می‌شود که از نظر مدیریت حافظه قابل اطمینان است. (هیچ چیز در حافظه نوشته نمی‌شود مگر اینکه برای آن حافظه فضایی گرفته شده باشد و هیچ چیز نوشته نمی‌شود اگر آن حافظه بازیابی شده باشد)

تعامل با سایر سیستم‌ها
----------------------

برنامه رابط دودویی سی، در تمامی انواع مشتق شده C پشتیبانی می‌شود. کتابخانه استاندارد زبان C، خود بخشی از زبان D است. از آنجایی که C++ خود یک برنامه رابط دودویی تک ندارد، زبان D تنها قادر به دسترسی به کد C++ نوشته شده در برنامه رابط دودویی زبان C است.
  
در ویندوز، زبان D به Component Object Model دسترسی دارد.

نمونه‌ای از کد زبان D
---------------------

برنامه زیر توسط یک تابع بازگشتی، فاکتوریل یک عدد را محاسبه می‌کند.

  

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

```

ابزارهای توسعه
--------------

ویرایشگرها و محیط‌های توسعه یکپارچه متعددی برای زبان D وجود دارد. شامل: Eclipse, Microsoft Visual Studio, SlickEdit,Emacs,vim,SciTE,Smultron,TextMate,MonoDevelop,Zeus,Geany
  
برنامه‌های زبان D می‌توانند توسط هر کامپایلر زبان C، اشکال زدایی شوند.

تاریخچه
-------

Walter Bright در سال ۱۹۹۹ تصمیم گرفت روی زبان جدیدی کار کند. زبان D اولین بار در دسامبر ۲۰۰۱ منتشر شد و در ژانویه ۲۰۰۷ به نسخه ۱٫۰ رسید. اولین نسخه زبان D که D1 نامیده شد، مبتنی بر مبانی شی گرایی، امری بودن و چند الگویی بود؛ مشابه سی پلاس پلاس
  
در همان سال ۲۰۰۷، اولین نسخه D2 منتشر شد. در واقع D2 برای تثبیت D1 عرضه شد و بسیاری از خطاهای D1 را برطرف کرده بود.
  
در سال ۲۰۱۱، پروژه زبان D بر روی GitHub قرار گرفت تا از توسعه بر مبنای خطایابی رها شود. در همان سال، Andrei Alexandrescu اعلام کرد که در ۳۱ دسامبر ۲۰۱۲ نسخه آخر D1 عرضه می‌شود و دیگر این نسخه ادامه نخواهد یافت.

منابع
-----

1. ↑  "Change Log: 2.104.0". Retrieved 25 June 2023.

پیوند به بیرون
--------------

* وبگاه رسمی زبان برنامه‌نویسی دی

| * ن
* ب
* و
زبان برنامه‌نویسی سی |
| --- |
| 
* انسی سی
	+ سی۸۹ و سی۹۰
* سی۹۹
* سی۱۱
* سی2x

 |
| کامپایلرها | 
* بورلند توربو سی
* کلنگ
* جی‌سی‌سی
* پی‌سی‌سی
* ال‌سی‌سی
* پلس‌سی
* پی‌سی‌سی
* تی‌سی‌سی
* ویژوال سی++
	+ سی++
	+ سی++/سی‌ایکس
* کامپایلر سی/سی++ واتکام

 |
| کتابخانه‌ها | 
* کتابخانه استاندارد سی
* جی‌لیب‌سی
* دایت‌لیب‌سی
* بی‌اس‌دی لیب‌سی
* uClibc
* Newlib
* EGLIBC
* بایونیک (نرم‌افزار)
* klibc
* libhybris
* musl

 |
| امکانات | 
* رشته‌ها
* نحو
* پیش‌پردازنده
* انواع داده‌ها و اعلان‌ها
* توابع

 |
| فرزندان سی | 
* سی++
* سی شارپ
* دی
* آبجکتیو-سی
* الف
* لیمبو
* گو
* والا
* MQL4
* کربن

 |
| سی و زبان‌های دیگر | 
* سی و سی++
	+ سازگاری
	+ عملگرها
* مقایسه سی و پاسکال
* کامپایلر سی به بایت‌کد جاوا

 |
| 
* **رده:زبان برنامه‌نویسی سی**

 |

|  |  |
| --- | --- |
| آیکون خرد | این یک مقالهٔ خرد زبان برنامه‌نویسی است. می‌توانید با گسترش آن به ویکی‌پدیا کمک کنید. |