زبان برنامه نویسی D

محیط توسعه خوب مسئله این است!!
محیط توسعه خوب مسئله این است!!


من به زبان های برنامه نویسی علاقه دارم و به عنوان تفریح و سرگرمی، رایج ترین ها را امتحان میکنم و به شدت متکی به قابلیت auto-complete محیط توسعه هستم

چند روزی هست که زبان برنامه نویسی D برام جالب شده سراغ سایتشان رفتم تا محیط های توسعه پیشنهادی شان را امتحان کنم چند تای اول لیست که معروف بودن را دانلود و تست کردم ولی متاسفانه auto-complete هیچ کدام از آنها کار نکرد(البته در محیط لینوکس همیشه کمبود یه سری ابزار ها حس میشه) من ماندم و یک تو ذوغی تلخ ، برام عجیب بود که چرا یه سری زبان ها به شدت نادیده گرفته میشوند و اسمی از آن ها شنیده نمیشود و ابزار توسعه پایدار و مفیدی برایشان طراحی نشده(حداقل تا جایی که من گشتم)

D Language Icon
D Language Icon



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



زبان D چیست؟

دی یک زبان برنامه نویسی سطح بالای سیستمی برای کارهای عمومی است، اما توانایی نوشتن کد با کارایی بالا را به طور مستقیم با API سیستم عامل و با سخت افزار حفظ می کند. دی به خوبی برای نوشتن برنامه های خطی در مقیاس متوسط ​​تا بزرگ با تعداد زیادی از برنامه نویسان مناسب است. دی به راحتی قابل یادگیری است ، قابلیت های بسیاری برای کمک به برنامه نویس فراهم می کند و به خوبی برای فناوری بهینه سازی کامپایلر تهاجمی مناسب است.

دی یک زبان اسکریپتی یا یک زبان تفسیری یا ماشین مجازی نیست، ​ فلسفه غالبی وجود ندارد. این یک زبان عملی برای برنامه نویسان عملی است که باید کار را به سرعت ، با اطمینان انجام دهند و کدهای قابل فهم و قابل نگهداری را پشت سر بگذارند.

دی اوج تجربه چندین دهه در اجرای کامپایلرها برای بسیاری از زبانهای مختلف و تلاش برای ساخت پروژه های بزرگ با استفاده از این زبانها است. دی از زبانهای دیگر (به ویژه ++ C) الهام می گیرد و آن را به تجربه و عملی بودن در دنیای واقعی تعدیل می کند.

hello world example -- D Language
hello world example -- D Language


چرا D

چه کسی به زبان برنامه نویسی دیگری نیاز دارد؟

صنعت نرم افزار به طور مداوم با سرعتی سرسام آور در حال پیشرفت است. ایده های جدید ظاهر، و ایده های قدیمی اعتبارسنجی یا کنار گذاشته می شوند. نیاز های برنامه نویسان همیشه در حال تغییر کردن است. حافظه و قدرت محاسباتی موجود با توجه به ترتیب و همچنین مقیاس برنامه های در حال توسعه افزایش یافته است.

کامپایلرها دیگر خیلی محدود به منابع محاسباتی نیستند و بنابراین می توانند کارهای بیشتری برای برنامه نویس انجام دهند. ویژگی های زبانی بسیار قدرتمندتر عملی شده اند. بازسازی این ویژگی ها به زبانهای موجود دشوار است و وقتی تعداد کافی از آنها وجود داشته باشد ، یک زبان جدید توجیه می شود.

اهداف اصلی طراحی D

همه چیز در طراحی زبان یک معامله است. در نظر داشتن برخی اصول به تصمیم گیری صحیح کمک می کند.

−نوشتن کد سریع و موثر را به روشی مستقیم فعال کنید.

−نوشتن کدی را که از کامپایلر به کامپایلر ، ماشین به ماشین و سیستم عامل به سیستم عامل قابل حمل است ، آسان تر کنید. رفتارهای تعریف نشده و پیاده سازی شده را به همان اندازه عملی از بین ببرید.

−ساختارهای نحوی و معنایی ارائه دهید که اشتباهات رایج را از بین ببرد یا حداقل آنها را کاهش دهد. نیاز به جستجوگر کد استاتیک شخص ثالث را کاهش داده یا حتی از بین ببرید.

−از برنامه نویسی امن حافظه پشتیبانی کنید.

-از برنامه نویسی چند پارادایمی پشتیبانی کنید ، یعنی در حداقل الگوی پشتیبانی برنامه نویسی ، ساختاری ، شی گرا ، عمومی و حتی کاربردی.

−انجام کارها را به روش صحیح آسان تر از روش نادرست قرار دهید.

−یک منحنی یادگیری کوتاه برای برنامه نویسان داشته باشید که با برنامه نویسی در C++ ، C یا Java راحت باشند.

−در صورت لزوم دسترسی به سطح پایین به سخت افزار را فراهم کنید. وسیله ای برای برنامه نویس پیشرفته فراهم کنید تا در صورت لزوم از بررسی خارج شود.

−با رابط باینری برنامه C محلی سازگار باشد.

−در جایی که کد D همان کد C است ، از آن بخواهید که رفتار یکسانی داشته باشد یا خطایی از خود بروز دهد.

−یک دستور زبان بدون زمینه داشته باشید. تجزیه و تحلیل موفقیت آمیز نیازی به تجزیه و تحلیل معنایی ندارد.

−به راحتی از نوشتن برنامه های بین المللی پشتیبانی کنید - Unicode در همه جا.

−برنامه نویسی قرارداد و روش آزمایش واحد را در آن بگنجانید.

−بتوانید برنامه های سبک و مستقل ایجاد کنید.

−هزینه های ایجاد اسناد را کاهش دهید.

−معناشناسی کافی را برای پیشرفت فناوری بهینه سازی کامپایلر فراهم کنید.

−پاسخگوی نیازهای برنامه نویسان تحلیل عددی باشید.

−بدیهی است که گاهی اوقات این اهداف با هم تضاد دارند. وضوح به نفع قابلیت استفاده خواهد بود.

زبان D
زبان D



در حال انتقال به D

نمای کلی D مانند C و++ C است. این امر یادگیری و انتقال کد به D. را آسان تر می کند. انتقال از C / C ++ به D باید طبیعی باشد. برنامه نویس مجبور نیست روش کاملاً جدیدی را برای انجام کارها بیاموزد.

استفاده از D به معنای محدود شدن برنامه نویس به زمان اجرا vm (ماشین مجازی) مانند Java vm یا Smalltalk vm نخواهد بود. D vm وجود ندارد ، این یک کامپایلر ساده است که پرونده های شی قابل پیوند را تولید می کند. D دقیقاً مانند C به سیستم عامل متصل می شود. ابزارهای معمول مانند make درست در توسعه D مناسب هستند.

D Language Example
D Language Example


دی برای چه کسی است؟

−برنامه نویسان که به طور معمول از ابزارهای مشابه تجزیه و تحلیل کد برای از بین بردن اشکالات قبل از تدوین کد استفاده می کنند.

−افرادی که با حداکثر سطح هشدارها عمل کامپایل انجام میدهند و به کامپایلر دستور می دهند هشدارها را به عنوان خطا تلقی کند.

−مدیران برنامه نویسی که مجبور می شوند برای جلوگیری از اشکالات رایج به دستورالعمل های سبک برنامه نویسی اعتماد کنند.

−پروژه هایی که نیاز به آزمایش و تأیید داخلی دارند.

−تیم هایی که برنامه هایی با یک میلیون خط کد در آن می نویسند.

−برنامه نویسان که فکر می کنند این زبان باید ویژگی های کافی برای جلوگیری از ضرورت مستمر دستکاری مستقیم اشاره گرها را فراهم کند.

−برنامه نویسان که نیمی از برنامه خود را به زبان اسکریپت نویسی می کنند و نیمی دیگر را برای تسریع در گلوگاه ها به زبانهای محلی می نویسند. D دارای ویژگی های بهره وری است که استفاده از چنین رویکردهای ترکیبی را غیر ضروری می کند.

−تجزیه و تحلیل واژگانی D و تجزیه کننده کاملاً از یکدیگر و از تحلیلگر معنایی مستقل هستند. این بدان معنی است که نوشتن ابزار ساده برای دستکاری کامل منبع D بدون نیاز به ساخت کامپایلر کامل آسان است. این همچنین بدان معنی است که کد منبع می تواند به صورت توکن برای کاربردهای تخصصی منتقل شود.

نمونه ای از زبان D
نمونه ای از زبان D


ویژگی های اصلی D

−برنامه نویسی شی گرا:

ماهیت شی گرا D از کلاس ها ناشی می شود. مدل وراثت ، وراثتی منفرد است که با رابط ها تقویت می شود. Object کلاس در ریشه سلسله مراتب وراثت قرار دارد ، بنابراین همه کلاسها مجموعه ای مشترک از عملکردها را پیاده سازی می کنند. کلاسها با مرجع نمونه سازی می شوند ، بنابراین کد پیچیده ای برای تمیز کردن پس از استثنائات مورد نیاز نیست.

−اضافه بار اپراتور یا همون Operator Overloading

کلاسهایی ساخته می شود که با اپراتورهای موجود کار می کنند تا سیستم نوع را برای پشتیبانی از انواع جدید گسترش دهند. به عنوان مثال ایجاد یک کلاس bignumber و سپس بارگذاری بیش از حد عملگرهای + ، - ، * و / برای استفاده از نحو جبری معمولی با آنها.


برنامه نویسی عملکردی یا Functional Programming

برنامه نویسی کاربردی از نظر کپسول سازی ، برنامه نویسی همزمان ، ایمنی حافظه و ترکیب موارد زیادی برای ارائه دارد. پشتیبانی D از برنامه نویسی به سبک عملکردی شامل موارد زیر است:

-عملکردهای خالص

−انواع و ساختارهای داده غیرقابل تغییر

−عملکرد و بسته شدن لامبدا

−بهره وری یا Productivity

ماژول ها

پرونده های منبع مکاتبات یک به یک با ماژول ها دارند.

اعلامیه در مقابل تعریف [Declaration vs Definition]

توابع و کلاسها یکبار تعریف می شوند. در صورت مراجعه به جلو نیازی به اظهارنامه نیست. یک ماژول می تواند وارد شود و کلیه اظهارات عمومی آن در دسترس واردکننده قرار می گیرد.

الگوها [Templates]

الگوهای D ضمن ارائه قدرت تخصص جزئی ، روشی تمیز برای پشتیبانی از برنامه نویسی عمومی ارائه می دهند. کلاسهای الگو و توابع الگو همراه با آرگومانهای الگوی متغیر و مجموعه های در دسترس موجود است

کارکرد[Functions]

از عملکردهای معمولی از جمله توابع جهانی ، توابع بیش از حد ، مشخص کردن توابع ، توابع عضو ، توابع مجازی ، نشانگرهای عملکرد و غیره پشتیبانی مورد انتظار را دارد. علاوه بر این:

توابع تو در تو

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

prime numbers
prime numbers


Function Literals

توابع ناشناس را می توان مستقیماً در یک عبارت جاسازی کرد.

بسته شدن پویا

توابع تو در تو و توابع عضو کلاس را می توان با بسته شدن (که به آنها نماینده نیز می گویند) ارجاع داد ، و این امر باعث می شود برنامه نویسی عمومی بسیار آسان تر شود و نوع آن ایمن باشد.

پارامترهای In ، Out و Ref

نه تنها مشخص کردن این امر به مستندسازی بیشتر توابع کمک می کند ، بلکه ضرورت اشاره گرها را بدون از بین بردن چیزی از بین می برد و امکان کمک به کامپایلرهای بیشتر در یافتن مشکلات کدگذاری را فراهم می کند.

این امکان را برای D فراهم می کند تا به طور مستقیم با طیف گسترده ای از API های خارجی رابطه داشته باشد. دیگر نیازی به راه حل هایی مانند "زبانهای تعریف رابط" نیست.

مدیریت منابع

مدیریت خودکار حافظه

تخصیص حافظه D به طور کامل زباله جمع آوری شده است. با جمع آوری زباله ، برنامه نویسی بسیار ساده تر می شود. جمع آوری زباله نیاز به کد رهگیری حافظه خسته کننده و مستعد خطا را از بین می برد. این نه تنها به معنی زمان توسعه بسیار سریعتر و هزینه های تعمیر و نگهداری پایین تر است ، بلکه برنامه حاصل اغلب سریعتر اجرا می شود.

مدیریت حافظه صریح

علی رغم اینکه D دارای جمع آوری زباله است ، عملیات جدید و حذف می تواند برای کلاسهای خاص نادیده گرفته شود تا بتوان از یک تخصیص دهنده سفارشی استفاده کرد.

RAII

یک تکنیک مدرن توسعه نرم افزار برای مدیریت و تخصیص منابع است. D از RAII به روشی کنترل شده و قابل پیش بینی و مستقل از چرخه جمع آوری زباله پشتیبانی می کند.


کارایی [Performance]

سنگدانه های سبک [Lightweight Aggregates]

از سازه های ساده به سبک C پشتیبانی می کند ، هم برای سازگاری با ساختارهای داده C و هم برای اینکه وقتی قدرت کامل کلاس ها بیش از حد باشد ، مفید هستند.

Inline Assembler

درایورهای دستگاه ، برنامه های سیستم با کارایی بالا ، سیستم های جاسازی شده و کد تخصصی برای انجام کار ،گاهی باید به زبان اسمبلی فرو بروند. در حالی که برای پیاده سازی مونتاژ درون خطی نیازی به پیاده سازی های D نیست ، این زبان تعریف شده و بخشی از آن است. بسیاری از نیازهای کد اسمبلی را می توان با آن برطرف کرد و نیاز به مونتاژ جداگانه یا DLL را برطرف کرد.

بسیاری از پیاده سازی های D نیز توابع ذاتی را به طور مشابه با پشتیبانی C برای دستکاری پورت I / O ، دسترسی مستقیم به عملیات ویژه شناور و غیره پشتیبانی می کنند.

قابلیت اطمینان

یک زبان مدرن باید تمام تلاش خود را انجام دهد تا به برنامه نویس کمک کند اشکالات کد را از بین ببرد. کمک می تواند به اشکال مختلف باشد. از سهولت استفاده از تکنیک های قوی تر ، تا گردآوری پرچم گذاری کد کاملاً نادرست ، تا بررسی زمان اجرا.

مدیریت استثنا

از مدل برتر try-catch-نهایت استفاده می شود تا فقط try-catch. نیازی به ایجاد اشیا ساختگی نیست فقط برای اینکه تخریب گر بتواند سرانجام معناشناسی را پیاده سازی کند.

هماهنگ سازی [Synchronization]

برنامه نویسی چند رشته ای بیشتر و بیشتر جریان اصلی پیدا می کند ، و D برای ساخت برنامه های چند رشته ای اولیه را فراهم می کند. همگام سازی را می توان در هر دو روش یا سطح شی انجام داد.

پشتیبانی از تکنیک های قوی

آرایه های پویا به جای اشاره گرها

متغیرهای مرجع به جای اشاره گرها

اشیا point مرجع به جای اشاره گرها

جمع آوری زباله به جای مدیریت حافظه صریح

بدوی داخلی برای همگام سازی نخ

هیچ ماکروی وجود ندارد تا ناخواسته کد را اسلم کنید

توابع درون خطی به جای ماکرو

نیاز به اشاره گر به شدت کاهش می یابد

اندازه نوع انتگرال صریح است

دیگر عدم اطمینان در مورد امضای کاراکترها

بدون نیاز به کپی کردن اعلامیه ها در پرونده های منبع و هدر.

پشتیبانی تجزیه صریح برای افزودن کد اشکال زدایی.

چک کردن زمان کامپایل

بررسی نوع قوی تر

خالی نیست برای بدن حلقه

تکالیف نتایج بولی نمی دهند

در حال استفاده از API های منسوخ

بررسی زمان اجرا

اصطلاحات () را ادعا کنید

بررسی مرزهای آرایه

حالت تعریف نشده به استثنای سوئیچ

به استثنای حافظه

در ، خارج و کلاس پشتیبانی از برنامه نویسی بی اعتبار

سازگاری

قوانین تقدم و ارزیابی اپراتور

عملگرهای C و قوانین تقدم ، ترتیب قوانین ارزیابی و قوانین ارتقا promotion را حفظ می کند. با این کار از اشکالات ظریفی که ممکن است ناشی از عادت به شیوه C انجام کارها باشد ، جلوگیری می شود ، زیرا به دلیل معناشناسی مختلف فرد در یافتن اشکالات با مشکل زیادی روبرو می شود.

دسترسی مستقیم به C API ها

نه تنها دارای انواع داده های متناسب با انواع C است ، بلکه دسترسی مستقیم به توابع C را نیز فراهم می کند. برای کپی یکایک اعضای جمع ، نیازی به نوشتن توابع لفافی ، swizzlers پارامتر و کد نیست.

پشتیبانی از انواع داده های C

ایجاد امکان رابط با هر API C یا کد موجود کتابخانه C. این پشتیبانی شامل ستون ها ، اتحادیه ها ، فهرست ها ، اشاره گرها و همه انواع C99 است. D شامل توانایی تنظیم تراز بندی اعضای ساختار برای اطمینان از سازگاری با قالبهای داده اعمال شده از خارج است.

مدیریت استثنای سیستم عامل

مکانیزم کنترل استثنا D به روشی که سیستم عامل اصلی در موارد استثنا انجام می دهد متصل می شود.

کدی را در قالب پرونده استاندارد شی object تولید می کند ، و امکان استفاده از مونتاژگرهای استاندارد ، پیوند دهنده ها ، اشکال زدایی ، پروفایلرها ، کمپرسورهای exe و سایر تجزیه و تحلیل ها را فراهم می کند ، همچنین می تواند به کدهای نوشته شده به زبان های دیگر پیوند دهد.