زبان برنامه سازی D تحت لینوکس قسمت دوم
S h a b g a r d . O R G
.::Security Group::.

*Nix *Nix *Nix *Nix *Nix *Nix *Nix مبتدی مبتدی مبتدی

    Search for in  

  خانه

  *Nix

      مبتدی

      متوسط

      تخصصی

  Windows

      مبتدی

      متوسط

      تخصصی

  network

  Programming

      PHP

  Security

  Hacking

  Program

      MS-Word

      Graphic

  Cisco

  Hardware



زبان برنامه سازی D تحت لینوکس قسمت دوم
Posted by on Dec 31, 2004, 17:09

 برای چه کسانی مناسب است؟
برنامه نویسانی که به طور مداوم از ابزارهای تجزیه و تحلیل کد استفاده می‌کنند تا خطاها را حتی قبل از کامپایل شدن ازبین ببرند.
افرادی که عمل کامپایل را با بالاترین سطح هشدارها انجام می‌دهند یا از کامپایلر می‌خواهند که هشدارها را به منزله خطا تلقی کند
.
مدیران برنامه‌نویسی که مجبورند به راهنماییهای سبک برنامه‌نویسی برای اجتناب از اشکالات معمول C اعتماد کنند
.
افرادی که براین باورند که وعده‌های سبک شیءگرای C++ به خاطر پیچیده‌گیهایش برآورده نمی‌شود
.
برنامه‌نویسانی که از قدرت بیانگر C++ لذت می‌برند اما به خاطر نیاز به صرف تلاش زیاد برای اداره حافظه و یافتن اشکالات اشاره‌گرها ، ناامید شده‌اند
.
پروژه‌هایی که نیاز به تست همراه و تصدیق و تأیید دارند
.
برنامه‌نویسانی که فکر می کنند زبان باید دارای خصوصیات کافی باشد . برای رفع نیاز دائمی اداره دستی و مستقیم اشاره‌گرها
.
برنامه‌نویسان محاسبات عددی . D دارای خصوصیات زیادی برای پشتیبانی مستقیم اعمال مورد نیاز برنامه نویسان محاسبات می‌باشد ، مانند پشتیبانی مستقیم از نوع داده مرکب و اعمال تعریف شده برای بی‌نهایت و NAN’S (این خصوصیات در استاندارد C99 اضافه شد ولی در C++ نه
)
بخش تجزیه لغوی و تجزیه نحوی D از یکدیگر در نهایت مجزا هستند و همچنین از تجزیه‌گر معنایی
.
این بدین معناست که نوشتن ابزارهای ساده برای اداره کردن کد منبع D بر سطح عالی آسان است بدون اینکه مجبور به ساختن یک کامپایلر کامل باشیم . همچنین بدین معناست که کد منبع ، قابل انتقال به فرم tokenها است برای کاربردهای خاص
.

D
برای چه کسانی مناسب نیست؟

به طور واقع بینانه ، هیچکس قصد تبدیل میلیونها خط که از C++/C به D ندارد و از آنجا که D کد منبع اصلاح نشده C++/C را کامپایل نمی‌کند D برای apps اشاره مناسب نیست. (به هرحال D ، CAPF های ارث را به خوبی پشتیبانی می‌کند).
برنامه های خیلی کوچک ـ یک زبان اسکریپتی یا دارای مفسر مانند Perl , Dmdscript , Python احتمالاً مناسبتر است
.
به عنوان زبان برنامه‌نویسی برای شروع ـ برای مبتدی‌ها basivc یا java مناسبتر است D یک زبان دوم عالی است برای برنامه نویسان متوسط تا پیشرفته
.
زبان به کاربرد کلمات صحیح وسواس دارد. D یک زبان عملی است و هر خصیصه از آن ترجیحاً قابل مقایسه و ارزیابی در همان حداست تا در حد ایده‌آل . به طور مثال D ساختارها و مفاهیمی دارد که به طور مجازی نیاز به اشاره‌گرها را برای امور پیش‌پا افتاده ازبین می‌برد. به طور مشابه تغییر نوعها هنوز وجود دارد برای آن جایی که سیستم نوع نیاز به نادیده گرفتن دارد
.

خصوصیات اصلی
D
این قسمت برخی خصوصیات جالب‌تر C را در دسته‌های مختلف طبقه‌بندی می‌کند
.
برنامه‌نویسی شیءگرا

کلاسها : طبیعت شیءگرای D از کلاسها آغاز می‌شود. مدل وراثت ، وراثت یگانه است که با روابط تقویت می‌شود. شیء کلاس در ریشه‌ی شجره وراثت می نشیند. بنابراین تمام کلاسها یک مجموعه متداول تابعی را اجرا می‌کنند. کلاسها به وسیله ارجاع معرفی می‌شوند و چنان که پیچیده‌ای برای آنکه پس‌از استثناها پاک شود نیاز نیست.
تعریف مجدد عملگرها: می‌توان کلاس را برآن واداشت که با استفاده از عملگرهای موجود ، سیستم نوع را برای پشتیبانی نوعهای جدید گسترش دهند. مثلاً ایجاد کلاس اعداد بزرگ و سپس تعریف مجدد عملگرهای (/,*,_,+) برای توانایی استفاده از آنها در املای عبارات جبری معمولی
.

خاصیت فراوری
Productivity
پیمانه‌ها : فایلهای منبع دارای ارتباطی یک‌به‌یک با پیمانه‌ها هستند. به جای #include نمودن یک فایل از اعلان ها فقط پیمانه را import می‌نماییم. هیچ نگرانی در مورد importهای متعدد از همان پیمانه نیست همچنین نیازی به پوشاندن فایلهای header با #ifndef یا #endif یا #pragma once و از این قبیل نیست
.

اعلان در برابر تعریف

++C
معمولاً نیاز دارد که توابع و کلاسها دوبار اعلان شوند یک اعلان که در فایلهای header صورت می‌گیرد و تعریف که در فایل منبع با پسوند “C.” . این یک روند مستعد خطا و کسل کننده است . به طور واضح برنامه‌نویس فقط نیاز دارد که یک بار آن را بنویسید و سپس کامپایلر باید داده‌های اعلان را بسط دهد و برای وارد کردن نمادین در دسترس قرار دهد. دقیقاً آن گونه که D می‌کند:
مثال
:
دیگر نیاز به تعریف جدای توابع عضو، اعضای استاتیک ، externها یا املاهایی مانند زیر نیست
:

تذکر : البته در ++C توابع جزیی مانند {return 7;} به صورت inline هم نوشته می‌شوند اما توابع پیچیده نه. علاوه برآن اگر یک ارجاع بعدی موجود باشد تابع نیاز به الگو دارد که از قبل موجود باشد مثال زیر در C++ کار نمی کند
.
اما کد هم‌ارز در D کار می کند
:
اینکه یک تابع D به صورت inline است یا نه توسط تنظیمات بهینه‌ساز قابل کنترل است
.

قالب‌ها

قالبهای D روشی واضح برای پشتیبانی برنامه‌سازی عمومی همراه با قدرت اختصاصی‌سازی به صورت قسمت به قسمت ، پیشنهاد می‌کند.

آرایه‌های شرکت‌پذیر

آرایه‌های شرکت‌پذیر آرایه‌هایی هستند با یک نوع داده قراردادی (اختیاری) به عنوان ایندکس به جای آنکه به یک ایندکس از نوع اعداد صحیح محدود باشند. در اصل آرایه‌های شرکت‌پذیر جدولهای hash هستند. این آرایه‌ها ساختن سریع ، کارا و خالی از اشکال جدول‌های سمبل را آسان می‌نماید.

تعریف نوعهای واقعی

تعریف نوعهای C و C++ در حقیقت نام مستعار نوع هستند طوریکه هیچ نوع جدیدی به طور واقعی مطرح نمی‌شود. D ، تعریف نوعهای واقعی پیاده‌سازی می‌کند جایی که:
type def int handle;
به طور واقعی یک نوع جدید به نام handle ایجاد می‌کند . بر کنترل نوع تأکید شده است و تعریف نوعها در تعریف مجدد توابع شریک می‌شوند. برای مثال
:
int foo (int I );
int foo (handle h);

نوع
bit
نوع داده پایه بیت است و D یک نوع داده با نام bit دارد . این امر بیش از همه در ساخت آرایه‌هایی از بیتها مفید است
:
bit [ ] foo;
توابع

D
توقع پشتیبانی از توابع معمول از جمله توابع عمومی ، توابع مجدد تعریف شده ، توابع inline ، توابع عضو ، توابع مجازی ، اشاره‌گرها به توابع و … را داشته است علاوه برآن :
توابع تودرتو

توابع می‌توانند درون توابع دیگر قرار گیرند. این امر در ساخت کد ، خاصیت locality و تکنیکهای بسته‌بندی توابع بسیار مفید است.
لفظ‌های توابع
Fune tionliterals
توابع بی‌نام می‌توانند به طور مستقیم در یک عبارت جای داده شوند
.
وکالت دینامیک

توابع محصور شده و توابع عضو کلاس بوسیله وکالتها می‌توانند ارجاع داده شوند (delegates) که این باعث آسانتر شدن برنامه‌سازی عمومی و type safe می‌شود.
پارامترهای ورودی، خروجی ، ورودی خروجی

این خصوصی‌سازی نه تنها کمک می‌کند که توابع خود مستندتر شوند بلکه بسیاری از موارد لزوم اشاره‌گرها را حذف می‌کند بدون قربانی کردن هیچ چیز و این امکاناتی را برای کمک بیشتر کامپایلر دریافتن مسائل کد فراهم می‌کند.
بدیت ترتیب برای D ممکن میشود که مستقیماً با یک بازه وسیعتری از APIهای بیگانه ارتباط برقرار کند. و هیچ نیازی برای کارهای جانبی مانند زبانهای تعریف ارتباطات وجود ندارد
.
آرایه‌ها

آرایه‌های C اشتباهات متعددی دارند که می‌توانند تصحیح شوند:
اطلاعات بعد با آرایه همراه نیست و بنابراین باید ذخیره‌شده و جداگانه ارسال شود . مثال کلاسیک این مورد پارامترهای argc و argr هستند که به main فرستاده می‌شوند
.
Main (int argc , char*argr[ ])
آرایه‌ها اشیاء سطح اول نیستند. وقتی یک آرایه به عنوان پارامتر به یک تابع فرستاده می‌شود به یک اشاره‌گر برگردانده می‌شود حتی با اینکه الگوی تابع به طور گیج کننده‌ای می گوید که این آرایه است. وقتی این برگرداندن انجام می‌شود تمام اطلاعات نوع آرایه گم می‌شود
.
آرایه‌های C قابل تغییر اندازه نیستند . این بدان معنی است که حتی چیزهای ساده انبوه و متراکم می‌گردد مانند یک پشته که نیازدارد به عنوان یک کلاس پیچیده ساخته شود
.
مرز یک آرایه C قابل کنترل نیست چون اصلاً مرز آرایه مشخص نیست
.
آرایه‌ها با علامت [ ] پس از شناساننده اعلان می‌شوند . این به یک املای بی‌خود و گیج کننده در اعلان اشیایی مانند اشاره‌گر به یک آرایه می‌انجامد
:
int (*array ) [3];
در D علامت [ ] در سمت چپ قرار می‌گیرد که فهم آن بسیار ساده‌تر است
.
اعلان یک اشاره‌گر به یک آرایه سه‌تایی از اعداد صحیح
int [3] * array ;
اعلان یک تابع که آرایه‌ای از longها را برمی‌گرداند
. Long [ ] func (int x);
آرایه‌های D در چهار نوع می‌آیند : اشاره‌گرها بر آرایه‌های استاتیک ، آرایه‌های دینامیک و آرایه‌های شرکت‌پذیر ،‌قسمت آرایه‌ها را ببنید
!
رشته‌ها

پردازش رشته‌ها آن قدر متداول است و آن قدر در C و ++C زمخت و بدترکیب که در زبان نیازمند پشتیبانی مستقیم است. زبانهای مدرن ، الحاق رشته‌ها ، کپی کردن و … را در دست می‌گیرند و D نیز رشته‌ها رهاورد مستقیم در دست گیری بهینه شده آرایه‌ها هستند

حمید نصیبی (hamidnsaba@yahoo.com)






---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
Latest Headlines

 *Nix
 نصب سيستم عامل لينوكس وفارسي نويسي در محيط
kavoshgar.blogsky.com
 نصب سيستم عامل لینوکس مندریک 9.2 Mandrake linux
 راهنماي كاربران جديد لينوكس
 راهنماي كاربران جديد لينوكس
 تعاريف پايه و نكات كاربردي در لينوكس و يونيكس
 تنظیماتIP و شبکه در گنو / لینوکس
 تعیین سطوح دسترسی کاربران در لینوکس
 تاریخچه لینوکس
 ظاهر پوسته فرمان
 استفاده از پوسته فرمان در لینوکس
 Windows
 بازگرداندن ویندوز خراب شده به حالت قبل از بروز مشکل
 چگونه میتوان در ويندوز 98 و ME به درايو NTFS دسترسي داشت
 با افزودن پسورد دوم براي ورود به ویندوز XP امنیت خود را تا حد زیادی افزایش دهید
 برنامه های تحت داس و قدیمی را چگونه در XP اجرا کنیم
 نصب ويندوز 98 يا ME در محیط ويندوز NT يا XP فقط در یک دقیقه و نیم
 مقدمات و نيازهاي شما براي يادگيري TCP/IP
 امكانات شبكه اي ويندوز
 SSL چيست ؟
 آموزش HyperTerminal
 آموزش كرك فايل هاي SAM
 network
 كارت شبكه يا LAN Card
 شبكه سرى يا BNC
 شبكه Hub
 تنظيم و كنترل برنامه Network Neighborhood
 استفاده از شبكه و عمل Sharing
 نصب و تنظيم برنامه Wingate جهت اتصال شبكه به سرور و اينترنت
 AAA (Authentication, Authorization and Accounting)
 مقدمه ای بر شبکه خصوصی مجازی (VPN)
 ip و port
  RFC چيست؟
 Programming
 زبان برنامه نویسی D قسمت اول
 زبان برنامه سازی D تحت لینوکس قسمت دوم
 زبان برنامه‌نويسی D بخش سوم
 زبان برنامه نویسی D بخش چهارم
 زبان برنامه نویسی D بخش پنجم
 زبان برنامه‌نویسی D بخش ششم
 نرم‌افزار آزاد یا باز‌متن چیست؟
 مقدمه ای بر برنامه نويسی شی گراء در دات نت
 آموزش رتينا
 ايجاد فايل XML با استفاده از يک بانک اطلاعاتی
 Security
 بررسی نحوه عملکرد فایروال Firewallیا ديواره آتش
 مقايسه سرورهای لينوکس و ويندوز
 چه فایلهائی میتوانند برای کاربران مخاطره آمیز باشند !
 امنيت برنامه های وب ( بخش اول )
 امنيت برنامه های وب ( بخش دوم )
 امنيت برنامه های وب ( بخش سوم )
 امنيت برنامه های وب ( بخش چهارم )
 امنيت برنامه های وب ( بخش پنچم )
 امنيت نامه های الکترونيکی ( بخش اول )
 مفاهيم اوليه پروتکل TCP/IP ( بخش اول )
 Hacking
 چگونه هکر شویم؟ بخش اول
 چگونه هکر شویم؟ بخش دوم
 هنر هشتم : كرك كردن
 مقدمات قبل از شروع يادگيری هک
 Port Scanning
 Port Scanning
  کاربرد نرم‌افزار nmap
 IP Scanning
 پورت ۷۹
 پورت ۸۰ چيست؟
 Program
  آموزشهاي افكتهاي فتوشاپ
 Shocking Text
 مبانی آشنايی با Word
  آموزش ساخت متن یخی
 نصب تم در موزیلا فایرفاکس
 کلید های میانبر در فایرفاکس
 Cisco
 آشنايي با مدارک سيسکو
 Cisco Systems
 Hardware
 آشنايي با پورت USB
 نحوه انتخاب يك كارت صدا