زبان برنامه نویسی 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 عرضه میشود و دیگر این نسخه ادامه نخواهد یافت .
ویژگیها
۱. چند الگویی
۱.۱ امری : زبان 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 عرضه میشود و دیگر این نسخه ادامه نخواهد یافت .