PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : معرفی کامل زبان های برنامه نویسی به همراه تاریخچه و کاربرد و منابع آموزشی در مورد آن



Borna66
05-25-2011, 08:16 PM
به نام خدا

در این تاپیک میخواهم زبانهای برنامه نویسی را معرفی کنم همراه با توضیح لازم

منابع : سایت وکی پدیا و سایتهای زبانهایی که معرفی میکنم

مقدمه :

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


1 -نسل اول زبان ماشین - زبان صفرو یک
2 -نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
3 -نسل سوم زبانهایی مانند کوبول و پی ال وان و... -دستورات قابل فهم تر برای انسان و نیاز به کمپایلرها
4 -نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاوره های انسانی
5- نسل پنج زبانهایی مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط برنامه نویس



http://pnu-club.com/imported/mising.jpg


گردآورنده: طه / Borna66

Borna66
05-25-2011, 08:21 PM
یک زبان برنامه نویسی یک زبان مصنوعی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شده است.زبان های برنامه نویسی برای ایجاد برنامه هایی به کار می روند که رفتار یک ماشین را مشخص می کنند، الگوریتم دقیق را بیان می کنند، و یا روشی برای ارتباط انسانند.

بسیاری از زبان های برنامه نویسی تعدادی قالب از ویژگی های نوشته شده دستوری(syntax) و معنا شناسی (semantics) دارند، چرا که رایانه ها دستورات دقیقا مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شده اند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده سازی غالبی می باشند.(مانند Perl) اولین زبان برنامه نویسی به قبل از اختراع رایانه باز می گردد، و برای هدایت رفتار ماشین هایی مانند دستگاه های نساجی اتوماتیک و نوازنده های پیانو به کار می رفت. هزاران زبان برنامه نویسی خلق شده اند، بیشتر در زمینهٔ رایانه، زمینه ای که هر ساله بسیاری دیگر ایجاد می شوند.


http://pnu-club.com/imported/mising.jpg

Borna66
05-25-2011, 08:23 PM
تقسیم بندی زبان های برنامه نویسی :

زبان های برنامه نویسی را می توان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم بندی کرد:
الف)روش های برنامه نویسی ۱-زیر روالی ۲-ساخت یافته ۳-مدولار ۴-شئ گرا
ب)نزدیکی به زبان ماشین ۱-سطح پایین ۲-سطح میانی ۳-سطح بالا
ج)نوع ترجمه ۱-مفسری ۲-کامپایلری د)رابط برنامه نویسی ۱-مبتنی بر متن ۲-مبتنی بر گرافیک (ویژوال)


تعاریف :

ویژگی هایی که غالبا برای تشکیل یک زبان برنامه نویسی مهم شمرده می شوند:

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

هدف: زبان های برنامه نویسی با زبان های طبیعی تفاوت دارند و آن اینکه زبان های طبیعی فقط برای فعل و انفعالات بین مردم به کار می روند، در حالیکه زبان های برنامه نویسی همچنین به انسانها اجازه می دهد که از طریق دستورات با ماشین ها ارتباط برقرار کنند. برخی زبان های برنامه نویسی بوسیله یک دستگاه استفاده می شوند تا دستگاه دیگری را کنترل کند. برای مثال برنامه های پست اسکریپت(post script) غالبا توسط برنامه دیگری برای کنترل یک چاپگر و یا نمایشگر ایجاد می شوند.

ساختارها: زبان های برنامه نویسی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.

توان بیانگر: نظریه محاسبات، زبان ها را بوسیله محاسباتی که توان بیان آنها را دارند طبقه بندی می کند. تمام زبان های "کامل تورینگ" می توانند مجموعه یکسانی از الگوریتم ها را پیاده سازی کنند.ANSI/ISO SQL و Charity مثال هایی هستند از زبان هایی که کامل تورینگ نیستند، ولی غالبا زبان برنامه نویسی نامیده می شوند.

برخی مولفین اصطلاح" زبان برنامه نویسی" را محدود به آنهایی می کنند که می توانند تمام الگوریتم های ممکن را پیاده سازی کنند، گاهی اوقات اصطلاح" زبان رایانه" برای زبان های برنامه نویسی محدودتر به کار می رود.
زبان های غیر محاسباتی، مانند زبان های مارک آپ(markup) HTML یا گرامرهای قراردادی مثل BNF، معمولا زبان برنامه نویسی محسوب نمی شوند. یک زبان برنامه نویسی(که می تواند کامل تورینگ نباشد) ممکن است در این زبان های غیر محاسباتی (میزبان) تعبیه شوند.

کاربرد :

زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف داده ها، و عملیات یا تبدیل هایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم می کند.
یک برنامه نویس از انتزاعات آماده در زبان استفاده می کند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده ترین عناصر موجود بیان می شوند(مفاهیم ابتدایی نامیده می شوند).

زبان های برنامه نویسی با غالب زبان های انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبان های طبیعی برای ارتباط با دیگر انسان ها، نویسندگان و گویندگان می توانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد.
اگرچه، مجازا، رایانه ها دقیقا آنچه که به آنها گفته شده را انجام می دهند.
و نمی توانند بفهمند که نویسنده دقیقا چه کدی مد نظر نویسنده بوده است البته امروزه برنامه هایی برای انجام این کار تولید شده اند و تلاش های بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است

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

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

یک سیر رایج در گسترش زبان های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان های برنامه نویسی اولیه به سخت افزار رایانه گره خورده بودند.
همانطور که زبان های برنامه نویسی جدید گسترش پیدا کرده اند، ویژگی هایی به برنامه ها افزوده شده که به برنامه نویس اجازه دهد که ایده هایی که از ترجمه ساده به دستورات سخت افزار دورتر هستند نیز استفاده کند.
چون برنامه نویس ها کمتر به پیچیدگی رایانه محدود شده اند، برنامه های آنها می تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند.
این به آنها این امکان را می دهد که کارایی بیشتردر واحد زمان داشته باشند.
"پردازنده های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان های اختصاصی برنامه نویسی پیشنهاد شده اند.
هرچند، این هدف دور است و فواید آن قابل بحث است.
"ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد.

مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از:

C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.

Borna66
05-25-2011, 08:24 PM
المان ها :

تمام زبان های بزنامه نویسی تعدادی بلوک های ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معنا شناسی و دستوری تعریف می شوند که ساختار و معنای مربوطه را توضیح می دهند.

دستور(syntax)

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

دستور زبان برنامه نویسی معمولا بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف می شوند.
متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z']. list ::= '(' expression ')' این گرامر موارد ذیل را مشخص می کند:

یک عبارت یا atom است و یا یک لیست
یک atom یا یک عدد است و یا یک سمبل
یک عدد دنباله ناشکسته ای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی می تواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) می آید.
یک لیست تعدادی پرانتز است که می تواند صفر یا چند عبارت در خود داشته باشد.

"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثال هایی هستند از دنباله های خوش فرم در این گرامر.

همه برنامه هایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامه های درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامه هایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقا مطلوب نویسنده آن نبوده باشد.

به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اتلاق کرد و یا ممکن است جمله نادرست باشد:

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

این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام می دهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex p = NULL; complex abs_p = sqrt (p->real p->real + p->im p->im);

گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی می تواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبان های برنامه نویسی می تواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.

معناشناسی ایستا

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

سیستم نوع گذاری

یک سیستم نوع گذاری مشخص می کند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی می کند، چگونه می تواند آن نوع ها را تغییر دهد و رفتار متقابل آن ها چگونه است. این کارعموما توضیح داده ساختارهایی که می توانند در آن زبان ایجاد شوند را شامل می شود. طراحی و مطالعه سیستم های نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.

زبان های نوع گذاری شده و بدون نوع گذاری

یک زبان نوع گذاری شده است اگر مشخصات هر عملیات، نوع داده های قابل اجرا توسط آن را با نشان دادن نوع هایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشته است. در غالب زبان های برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبان های برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه ها رد کنند. در برخی زبان ها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه ها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان های نوع دار زبان های تک نوعند. این زبان ها غالبا اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالبا رشته های کاراکتری که هم برای داده های عددی و هم برای داده های سمبلی کاربرد دارند.
در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان های اسمبلی، این امکان را می دهد که هر عملیاتی روی هر داده ای انجام شود، که معمولا دنباله ای از بیت ها با طول های متفاوت در نظر گرفته می شوند. زبان های سطح بالا که بی نوع هستند شامل زبان های ساده رایانه ای و برخی از انواع زبان های نسل چهارم.

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

نوع گذاری ایستا و متحرک

در نوع گذاری ایستا تمام عبارات نوع های خود را قبل از اجرای برنامه تعیین می کنند(معمولا در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمی توانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.

زبان های نوع گذاری شده ایستا می توانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحا نوع ها را در جایگاه های منتنی مشخص می نویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریف ها را بر اساس متن استنباط می کند. غالب زبان های مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری می شوند

نوع گذاری قوی و ضعیف

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

نوع گذاری قوی مانع رخ دادن مشکل فوق می شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می شود. زبان هایی که نوع گذاری قوی دارند غالبا با نام "نوع-امن" و یا امن شناخته می شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان ها اشاره می کند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را می دهند. در جاوااسکریپت، برای مثال، عبارت ۲ x به صورت ضمنی x را به عدد تبدیل می کند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشته ای از حروف باشد. چنین تبدیلات ضمنی غالبا مفیدند، اما خطاهای برنامه نویسی را پنهان می کنند.

قوی و ایستا در حال حاضر عموما دو مفهوم متعامد فرض می شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار می برند و منظورشان قوی، ایستایی نوع گذاری شده است، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شده است. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده می شود.

معناشناسی اجرا

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

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

کتابخانه هسته

اغلب زبان های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولا تعریف الگوریتم ها، داده ساختارها و مکانیزم های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالبا با کتابخانه هسته به عنوان قسمتی از آن رفتار می کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند.
بسیاری از خصوصیات زبان هسته ای را مشخص می کنند که باید در تمام پیاده سازی ها موجود باشند، و در زبان های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان ها به گونه ای تعریف شده اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه ای از کلاس BlockContext کتابخانه می سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.

Borna66
05-25-2011, 08:27 PM
عمل

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

خصوصیات

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

تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولا با یک معناشناسی قراردادی مشخص می شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)

توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.

پیاده سازی منبع یا مدل. گاهی اوقات در زبان های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحا در رفتار پیاده سازی مدل موجودند.

پیاده سازی

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

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

برنامه هایی که مستقیما روی سخت افزار اجرا می شوند چندین برابر سریعتر از برنامه هایی که با کمک نرم افزار اجرا می شوند، انجام می شوند.

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

Borna66
05-25-2011, 08:28 PM
تاریخچه

پیشرفت های اولیه

اولین زبان برنامه نویسی به قبل از رایانه های مدرن باز می گردد. قرن ۱۹ دستگاه های نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثال هایی از زبان های برنامه نویسی با حوزه مشخص شناخته می شوند. با شروع قرن بیستم، پانچ کارت ها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند.
در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم ها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.

در دهه ۴۰، اولین رایانه های دیجیتال که توسط برق تغذیه می شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه های زبان ماشین استفاده می کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می شوند جایگزین شد.
در سال های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه های به روز شده این برنامه ها همچنان مورد استفاده قرار می گیرند، و هر کدام قویا توسعه زبان های بعد را تحت تاثیر قرار دادند.
در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان های برنامه نویسی به شدت متاثر از محدودیت های رابط بودند.

پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه های آن بهینه سازی ایده های اولیه نسل سوم زبان برنامه نویسی بود:

APL برنامه نویسی آرایه ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده های خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملا شئ گرا معرفی شد.

C بین سال های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

هر یک از این زبان ها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبان ها از تبار حداقل یکی از زبان های فوق به شمار می آیند.

دهه های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان های سطح بالا حذف شود.

در دهه های ۶۰ و ۷۰ توسعهٔ تکنیک هایی صورت گرفت که اثر یک برنامه را کاهش می داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.

یکپارچگی و رشد

دهه ۸۰ سال های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه های گزافی صرف تحقیق در مورد زبان نسل پنجم می شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد.
به جای ایجاد مثال های جدید، تمام این تلاش ها ایده هایی که در دهه های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم های بزرگ از طریق مدول ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم های مدولی برجسته ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم های مدولی غالبا با ساختارهای برنامه نویسی عام همراه شده اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت های ایجاد زبان های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب گاه های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه ها اساسا نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می کند، هم در تحقیقات و هم در صنعت. جهت های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه های جدید مدولی(mixin، نماینده ها، جنبه ها) و تجمع پایگاه داده.

۴GL ها نمونه ای از زبان هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده های اسکالر را برگردانند، مجموعه هایی را تغییر داده و بر می گردانند که برای اکثر زبان ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.

سنجش استفاده از زبان

مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفاده است، و اینکه کاربرد چه معنی می دهد با توجه به زمینه تغییر می کند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبان ها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالبا روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامه های کاربردی، C در برنامه های تعبیه شده و سیستم های عامل؛ و بقیه برنامه ها معمولا برای نوشتن انواع دیگر برنامه ها کاربرد دارند. روش های مختلفی برای سنجش محبوبیت زبان ها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شده است:

شمارش تعداد تبلیغات شغلی که از آن زبان نام می برند.
تعداد کتاب های آموزشی و شرح دهندهٔ آن زبان که فروش رفته است.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبان هایی را که در جستجوها کمتر پیدا می شوند دست کم گرفته شوند.
شمارش ارجاع های زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.

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

این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر می کند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق می کند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.

در نگاه کلی، زبان های برنامه نویسی به مثال های برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم می شوند. مثال ها شامل برنامه نویسی رویه ای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبان ها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبان های برنامه نویسی ممکن است همه منظوره باشند، زبان های برنامه نویسی سیستمی، زبان های اسکریپتی، زبان های محدوده مشخص، زبان های همزمان/ گسترده(و یا ترکیب اینها). برخی زبان های همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شده اند.

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

Borna66
05-25-2011, 08:41 PM
اولین زبان برنامه نویسی که معرفی میکنم اباپ است

ابـــــــاپ مخفف Advanced Business Apllication Programming

یک زبان برنامه نویسی سطح بالا می باشد که توسط شرکت آلمانی SAP ایجاد شده است.
پس از معرفی برنامه و روش برنامه نویسی جاوا، این زبان برنامه نویسی، جایگاه خود را در زمینه برنامه نویسی برای
برنامه Web Application Server طراحی شده توسط شرکت SAP، که یک پایگاه تحت وب برای طراحی برنامه های کاربردی است، پزدا کرده است. دستور زبان آباپ شبیه زبان کوبول می باشد ولی سی شیءگرا هم بر این زبان تأثیر گذارده است.

برنامه نمونه

PROGRAM TEST. WRITE 'Hello World'

در بالا به زبانهای برنامه نویسی سطح بالا اشاره شد

توضیح زبانهای برنامه نویسی سطح بالا :

زبان برنامه نویسی سطح بالا یا زبان برنامه نویسی بلندتراز (High-level programming language) زبانی است که نسبت به زبان برنامه نویسی سطح پایین راحت تر قابل استفاده و قابل حمل بین سیستم های متفاوت و دارای انتزاع بیشتری هستند. چنین زبان هایی عموماً از عملیات CPU مانند مدل های دسترسی به حافظه و مدیریت حوزه دور هستند.

مشخصات زبان های سطح بالا

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

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

زبانهای سطح بالا پر کاربردترین ودر عین حال جذابترین و کاربردی ترین محیط های برنامه نویسی را شامل می شوند، چرا که محیط آن کاربر پسند(User Friendly) بوده و یادگیری اصطلاحات و مفاهیم آن در محیط و قالبی گرافیکی به کاربر ارائه می شود، برنامه نویسان به راحتی به یادگیری دستورات و قواعد آن به دلیل اینکه به زبان محاوره ایی و انگلیسی نزدیک است می پردازند، اینگونه زبانها از سرعت کمتری نسبت به زبانهای سطح میانی و پایین برخوردار می باشد، به دلیل اینکه دستورات بایستی به زبان قابل فهم برای ماشین تبدیل گردند که این خود زمان بر می باشد، ولی در عین حال فضای کمتری اشغال می کنند که نمونه ایی از این زبانها، زبانهای برنامه نویسی پاسکال، C، ویژوال، دلفی، فرترن و جاوا می باشند.

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

معنای نسبی

توجه به این نکته ضروری است که عبارت سطح بالا و سطح پایین نسبی هستند. در ابتدا زبان اسمبلی سطح پایین و زبان کوبول و سی و غیره بدلیل استفاده از متغیر و توابع و عبارات سطح بالا محسوب می شدند. با این وجود برنامه نویسان ممکن است سی را یک زبان سطح پایین محسوب نمایند چرا که امکان دسترسی به حافظه به صورت مستقیم و امکان دسترسی به کد اسمبلی را نیز فراهم می سازد. برای اطلاع بیشتر در این مورد وبسایت C۲'s page about high-level languages را ببینید

مدل های اجرا

تفسیر

زبان های تفسیر شده مستقیماً خوانده و اجرا می گردند بدون مرحله ترجمه.

کامپایل شونده

زبان های ترجمه شده ابتدا به فیل قابل اجرا تبدیل می شوند سپس اجرا می گردند دو نوع از این زبان ها وجود دارد:

نمایش میانی

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

تولید کد ماشین

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

ترجمه شونده زبان های سطح بالا ممکن است به یک زبان سطح پایین ترجمه گردند که معمولاً زبان هدف سی می باشد


برای یادگیری زبان ابـــــــــاپ :





http://www.abaplearning.com/

http://abap-gallery.blogspot.com/search/label/ABAP%20Tutorial

Borna66
05-25-2011, 08:45 PM
دومین زبانی که میخواهم برای شما معرفی کنم ایدا یا ادا ( فارسی ) ADA ( انگلیسی ) است

ADA :

یک زبان برنامه نویسی شیءگرا و سطح بالا است که در سال ۱۹۸۳ میلادی توسط وزارت دفاع آمریکا ایجاد شد. برای ایجاد این زبان برنامه نویسی بیش از هر زبان دیگری هزینه صرف شده است.

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

تاریخچه ایدا

اِیدا ۹۵ در آغاز با سه دغدغه مهم طراحی شد:

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

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

خلاصهٔ زبان اِیدا ۹۵

یک برنامهٔ ایدا از یک یا بیش از یک واحد تشکیل شده است. واحدهای برنامه ممکن است زیربرنامه ها (که الگوریتم های قابل اجرا را تعریف می کنند)، پکیج ها (که مجموعه ای از موجودیت ها را تعریف می کنند)، واحدهای وظیفه (که محاسبات هم زمان را تعریف می کنند)، واحدهای حفاظت شده (که عملیاتی برای اشتراک هماهنگ داده ها بین وظیفه ها را تعریف می کنند)، یا واحدهای عمومی (که فرم های پارامتردار پکیج ها و زیربرنامه ها را تعریف می کنند) باشند. هر واحد برنامه معمولاً شامل دوبخش است: یکی بخش ذکر خصوصیات، شامل اطلاعاتی که باید برای واحدهای دیگر آشکار باشند؛ و دیگری بخش بدنهٔ برنامه، شامل پیاده سازی جزئیاتی که لازم نیست برای واحدهای دیگر قابل رؤیت باشد. بیشتر واحدهای برنامه می توانند به طور جداگانه کامپایل شوند.

ویژگیهای ادا

ایدا یک زبان برنامه نویسی استاندارد شده و همه منظوره است که در گسترهٔ وسیعی از کاربردها استفاده می شود – از کنترل موشک ها گرفته تا تحویل صورت پرداخت به سیستم کنترل ترافیک هوایی.

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

ایدا شیوهٔ صحیح برنامه نویسی را به وسیلهٔ اصول مهندسی نرم افزار یکپارچه با امکان تایپ کد قوی، پیمانه ای بودن، قابلیت حمل، قابلیت استفادهٔ مجدد و قابلیت خواندن (یا خوانایی) تقویت می کند. این خصوصیات هزینه ها را در تولید و توسعه، بررسی، اشکال زدایی و نگهداری نرم افزار، کاهش می دهد.

قابلیت حمل

ایدا برای یک سیستم ساخته شد در حالی که می تواند به آسانی کامپایل مجدد شده و به سیستم دیگری منتقل شود، چون تمام کامپایلرهای ایدا معتبر هستند و ایدا یک زبان طراحی نرم افزاری است که از لحاظ بین المللی استاندارد شده توسط MIL-STD-۱۸۱۵A، ANSI و ISO می باشد.

پیمانه ای بودن

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

قابلیت استفادهٔ مجدد

مفهوم پکیج در ایدا اجازه می دهد که کاربران اجزایی از نرم افزار را که می توانند بازیابی، استفاده و/یا تغییر داده شوند بدون اینکه بر بقیهٔ اجزای برنامه اثر بگذارند، توسعه دهند. واحدهای برنامه های عام ایدا همچنین اجازه می دهد که یک تابع منطقی روی بیشتر از یک نوع داده اجرا شود. پکیج ها و برنامه های عام همچنین تجرد داده ها و طراحی مبتنی بر شیء را پشتیبانی می کنند.

قابلیت اعتماد

امکان تایپ کد قوی در ایدا خطاها را هم در کامپایل اولیه و هم در کامپایل مجزا، بسیار ساده تر پیدا می کند. مکانیسم دستکاری و پردازش استثناء در ایدا، برنامه های کاربردی مقاوم در برابر خطا را با ارائهٔ یک روش کامل و قابل حمل خطایابی و واکنش موقرانه به شرایط خطا، پشتیبانی می کند. خصوصیات سازماندهی عملیات در ایدا، استفادهٔ هم زمان از الگوهای سطح بالا را به جای تک کاره بودن و در معرض خطا بودن، پشتیبانی می کند.

نگهداری

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

زمینه های برنامه های کاربردی ادا

موفقیت های مستند سراسری ایدا، استفاده آن را در دامنهٔ وسیعی از کاربردها برمی شمرند. امروزه ایدا سیستم های زیر را طراحی می کند :

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

اکتشافات ژئوفیزیک و سیستم پردازش داده ها، و سیستم تجزیهٔ شیمیایی.
مرکز تجاری مخابرات تلفن همراه و برنامه های تجاری ارتباطات راه دور مانند PABXها.
FAA در جت های تجاری، سیستم های کنترل ترافیک هوایی، سیستم های ردیابی و هدایت زمان پرواز، شبیه سازهای آموزش پرواز و سیستم های کنترل/نمایشگر پرواز.
سفینه های فضایی ناسا و محیط های ایستگاه های فضایی.
سیستم های تولید خودکار، سیستم های خودکار جابه جایی مواد، سیستم های جوشکاری رباتیک و سیستم های مدیریت موجودی.
سیستم های نظارت بی درنگ و پیوسته بهداشتی و کنترل تعبیه شدهٔ بی درنگ دستگاه های کپی و نسخه برداری.
سیستم های تعبیه شدهٔ نظامی استراتژیک، و اکثر برنامه هایی که در برنامه های کاربردی و سیستم های بی درنگ، استفاده می شوند.


برنامهٔ نمونه

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





with Ada.Text_IO;

procedure Hello is
begin
Ada.Text_IO.Put_Line(«Hello, world!»);
end Hello;



منابع و مراجع :




http://www.adahome.com

Ada 95 RM - Introduction (http://www.adahome.com/rm95/rm9x-intro.html)




برای یادگیری زبان ADA







http://www.functionx.com/ada/index.htm

Borna66
05-25-2011, 08:57 PM
در این بخش به معرفی زبان برنامه نویسی اسمال تالک SmallTalk میپردازیم


http://pnu-club.com/imported/2011/05/828.jpg


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

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

اسمال تاک برای پشتیبانی از دنیای جدید حاصل از فهماندن محاسبات با مثال توسط «همزیستی میان انسان و کامپیوتر» به وجود آمد.
اسمال تاک به منظور اموزش توسط زیراکس پارک (Xerox PARC) و آلن کی، دان اینگالس، آدل گلدبرگ، تد کاهلر، اسکات والاس، و دیگران در طول دهه ۱۹۷۰ تحت تأثیر لیسپ و لوگو و اسکچپد(sketchpad)، سیمولا ساخته شد.
این زبان اولین بار تحت عنوان اسمال تاک-۸۰ عرضه شد و پس از آن بصورت گسترده به کار برده شد. زبان هایی مشابه اسمال تاک همچنان در حال توسعه هستند و کاربران وفادار بخود را دارند. نسخه انسی اسمال تاک در سال ۱۹۹۸ معرفی شد و این نسخه ی استاندارد از اسمال تک را نشان می دهد.

از بخش ضمیمه ی همین پست یک فایل PDF حاوی معرفی کامل و جامع در مورد این زبان برنامه نویسی می تونید دانلود کنید و استفاده کنید ازش.

Borna66
05-25-2011, 09:00 PM
زبان اسمبلی

اَسِمبلی (Assembly) به مجموعه زبان های برنامه نویسی سطح پایینی اطلاق می شود که در آن مستقیماً دستورالعمل های پردازندهٔ اصلی (CPU) نوشته می شود( یعنی دستوراتی که ALU توانایی انجام آنها را دارد.)

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

این زبان به زبان مادر کامپیوتر بسیار نزدیک می باشد بطوربکه تمامی برنامه های اولییه همچون ++C توسط زبان اسمبلی ساخته شده است و همچنین اکثر کارهای هک و .... با این زبان انجام می شود. در زبان اسمبلی هر دستور زبان متناظر یک دستور باینری است .
اين زبان را با استفاده از آسيمبلر ها مي توان به زبان ماشين يعني صفر و يك تبديل كرد. نرم افزارهاي اسمبلر بر روي سيستم نصب شده و با وارد كردن كدهاي اسمبلي و دباگ كردن ان مي توان انها را به زبان ماشين تبديل كرد.

اَسِمبلی 64 بیتی 32 بیتی و 16 بیتی در زبان اَسِمبلی با توجه به امکانات پردازنده و مقدار حافطهٔ آن از یک اسمبلر 16 بیتی 32 بیتی و یا 64 بیتی استفاده می شود. در اَسِمبلی 16 بیتی حافظه در ثبات های AX BX CX DX AH AL BH BL CH CL DH DL IP CS DS ... قرار دارد. در اَسِمبلی 32 بیتی ثبات های EAX EBX ECX EDX EIP اضافه می شوند. و در اَسِمبلی 64 بیتی نیز ثبات های RAX RBX RCX RDX RIP اضافه می شوند. حافظهٔ قابل دسترس در حالات فوق به ترتیب 65536, 4294967296 و 18446744073709551616 بایت است.

زبان ماشین مجموعه فرامینی است که به صورت مستقیم توسط پردازنده کامپیوتر قابل رمزگشایی و اجرا می باشد. این فرامین کاملاً وابسته به معماری پردازنده است. زبان ماشین بصورت کدهای دودویی است. زبان اسمبلی استفاده از کلمات به جای کدهای زبان ماشین است.

از بخش ضمیمه ی همین پست یک فایل PDF حاوی معرفی کامل و جامع و آموزش ابتدایی در مورد این زبان برنامه نویسی می تونید دانلود کنید و استفاده کنید ازش.

Borna66
05-25-2011, 09:09 PM
AWK :

یک زبان برنامه نویسی همه کاره است که برای پردازش داده های مبتنی بر متن (text-based) یا فایلها یا جریان داده ها در آزمایشگاه bell در سال 1970 طراحی و ساخته شد.نام awk از نام خانوادگی سازندگانش مشتق شده است ( Alfred Aho, Peter Weinberger, Brian Kernighan)

به هر حال معمولا به عنوان رشته حرف های جدا تلفظ نشده استولی تا حدی که مشابه به صدای نام یک پرنده aak صدا بدهد (که به صورت یک آرم برای زبان عمل می کند مثل آرم روی کتاب زبان برنامه نویسی awk )awk وقتی که به طور کلی با حروف کوچک نوشته می شودبا رجوع به برنامه UNIX وPlan 9 که سایر برنامه های نوشته شده در awk را اجرا می کنند. Awk یک مثال از یک زبان برنامه نویسی است که بطور وسیعی از نوع داده رشته استفاده می کند ،آرایه های شرکت پذیر (آرایه هایی هستند که اندیس دهی با رشته های اصلی شده اند)و عبارت های منظم.قدرت ،اختصار،ومحدودیت های زبان awk وsed scripts الهام بخش Larry Wall در نوشتن Perl بود.بخاطر حاشیه نویسی انبوه آنها ، همه این زبانها اغلب برای نوشتن برنامه های حاشیه ای استفاده می شدند.

Awk یکی از ابتدایی ترین ابزارهایی است که در Unix ورژن 7 ظاهر شدو به عنوان راهی برای اضافه کردن ویژگیهای محاسباتی به خط لوله Unix محبوبیت زیادی به دست آورد.یک ورژن از زبان awk یک ویژگی استاندارد تقریبا هر سیستم عامل جدید شبیه یونیکس که امروزه موجود است می باشد . awk ذکر کننده در مشخصه مجرد یونیکس به عنوان ابزار اجباری سیستم عامل یونیکس می باشد .علاوه بر این برنامه واسط Bourne shell ،awk تنها زبان دیگر اسکریپتی موجود در محیط استاندارد یونیکس می باشد پیاده سازی awk تقریبا به عنوان یک نرم افزار نصب شده برای تمامی سیستم عامل های دیگر وجود دارد.

ساختار برنامه های Awk

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







{ pattern { action





که الگوها نمونه یک عبارت هستند و فعالیتها یک سری از دستورها هستند.هر خط ورودی با تمام الگوهای در گردش آزمایش می شود و فعالیت برای هر عبارتی که درست باشد اجرا می شود.ممکن است هم الگو و هم فعالیت حذف شده باشند.پیش فرض الگو به تطبیق دادن هر خط از ورودی است و پیش فرض فعالیت چاپ خط ورودی می باشد.
به علاوه یک عبارت ساده awk الگو شروع یا پایان می تواند باعث شود که فعالیت قبل یا بعد از همه خطهای ورودی که خوانده شده است اجرا شود.یا الگو1 یا الگو 2 که تطبیق می دهند محدوده خطوط ورودی شروع می شوند با خطی که منطبق بر الگو 1 و شامل خطی که منطبق بر الگو 2 می باشد قبل از اینکه دوباره تلاش کند با تطبیق الگو 1 روی خطوط آینده. به علاوه حسابگر منطقی و عملگر منطقی عبارات Awk شامل عملوند ~ می باشند.که منطبق می کند عبارات منظم با رشته به طوریکه نحوی قندی /regexp/ بدون استفاده از عملگر~ با خط جاری ورودی منطبق می کند.

دستورات Awk

دستورات awk عبارتهایی هستن که جایگزین می شوند به عنوان فعالیت در مثالهای بالا .دستورهای awk می توانند شامل فراخوانی تابع،انتساب به متغییرها ،محاسبات یا هر ترکیبی آز آنها که بشود.awk دارای پشتیبانی داخلی برای خیلی از توابع است awk امکانات بیشتری را توسط چاشنی های گوناگون فراهم نموده است.همچنین بعضی از کتابخانه ها پشتیبانی می کنند شمول کتابخانه های متصل شده پویا را که همچنین می توانند توابع بیشتری را فراهم کنند.برای اختصار در میان گذاشتن {} از این مثالها حذف خواهد شد. فرمان چاپ برای متن خروجی استفاده می شود .متن خروجی همیشه با یک رشته از پیش تعریف شده پایان داده می شود که فراخوانی می کند خروجی ضبط شده جدا کننده (ORS) که پیش فرض مقدار آن یک خط جدید است.ساده ترین شکل این دستور به این صورت است:
:


print

نشان دهنده محتویات سطر جاری در awk می باشد .خطها به زمینه ها شکسته می شوند و اینها می توانند به طور جداگانه نمایش داده شوند:




print $1

اولین زمینه از خط جاری را نشان می دهد:




print $1, $3

اولین و سومین زمینه از سطر جاری را نشان می دهد ومجزا شده اند به وسیله رشته از قبل تعریف شده فراخوانده خروجی زمینه جداسازی (OFS) که پیش فرض مقدار یک کاراکتر فاصله خالی است. اگرچه ممکن است این زمینه ها ($X) جهتی را شبیه به متغییرها تعریف کنند (علامت $ نشان دهنده متغییرها در perl می باشد) آنها واقعا به زمینه های سطر جاری مراجعه می کنند.مورد ویژه $0 مراجعه می کند به خط کامل در حقیقت دستور "print و "print $0" با یکدیگر در طراحی مساوی هستند .دستور چاپ می تواند همچنین محاسبات و فراخوانی تابع را نشان دهد.






print 3+2 (print foobar(3 (print foobar(variable (print sin(3-2




خروجی ممکن است که به فایل فرستاده شود:




"print "expression" > "file name

یا در یک لوله :



"print "expression" | "command

متغییرها و نحو

نام متغییرها می تواند هرکدام از کاراکترهای [A-Za-z0-9_], را مورد استفاده قرار دهند.به استثنای کلمات کلیدی زبان .عملگرهای + - / جمع و تفریق و ضرب و تقسیم را به ترتیب نمایش می دهند. برای الحاق دو رشته آنها را به سادگی در کنار یکدیگر قرار می دهند.این اختیری است که استفاده کنید از فاصله در بین رشته ای که شامل ثابت می باشد. ولی شما نمی توانید نام دو متغییر را بدون فاصله در کنار یکدیگر قرار دهید.رشته های ثابت با "" محدود می شوند .عبارات نیاز به سمیکولن در انتها ندارند .در انتها توضیحات می توانند با استفاده از # به عنوان اولین کاراکتر در خط به برنامه اضافه شوند.

تابع تعریف شده کاربر

کاربر تابع را در فرمتی شبیه به c تعریف می کند.تعریف تابع شامل کلید اصلی تابع نام تابع نام آرگومان ها و بدنه تابع اینجا یک مثال از تابع آورده شده است:






} (function add_three (number, temp temp = number + 3 return temp {




این عبارت می تواند به صورت زیر احضار شود :



print add_three(36) # Outputs 39تابع می تواند متغییرهایی در ناحیه محلی داشته باشد .نام آنها در انتهای لیست آرگومانها اضافه می شود.بناباین هنگام فراخوانی تابع مقدار برای آنها باید حذف شود.این قرارداد است که کمی فضای خالی قبل از متغییرهای محلی در لیست آرگومانها اضافه کرد.به این ترتیب نشان داده می شود که پارامترها کجا تمام می شوند و متغییرهای محلی شروع می شوند.

مثالهای کاربردی

Hello world در اینجا یک برنامه hello world نوشته شده در awk موجود است:




{"!BEGIN { print "Hello, worl

توجه داشته باشید که شما به یک عبارت صریح exit نیاز ندارید.تنها الگو BEGIN می باشد در هیچ خط دستور آرگومانها پردازش نمی شوند. چاپ خطهای بزرگتر از 80 کاراکتر تمام خطوط طویل تر از 80 کاراکتر را چاپ کن توجه داشته باشید که فعالیت پیش فرض چاپ خط جاری است.




length($0) > 80

چاپ شمارنده کلمات شمارنده کلمات در ورودی و چاپ خط ،کلمه و کاراکتر ها





{ w += NF c += length + 1 } { END { print NR, w, c


به عنوان مثال هیچ الگویی برای خط اول برنامه وجود ندارد.هر خطی از خروجی منطبق با پیش فرض بنابرای فعالیت کاهش برای هرخط اجرا می شود.توجه کنید که w += NF کوتاهتر برای w = w + NF. جمع کردن کلمات آخر




s += $NF } { END { print s + 0

S توسط ارزش عددی $NF توسعه داده شده که حرف آخر روی خط به عنوان زمینه جداکننده به وسیله awk تعریف شده به وسیله فضای خالی پیش فرض می باشد.NF شماره زمینه ها در خط جاری می باشد . e.g. 4 از $4 ارزش زمینه 4 است . $NF ارزش آخرین زمینه در این خط صرف نظر از این که این خط دارای چه تعداد زمینه می باشد .یا اگر نسبت به خطوط اطراف بیشتر یا کمتر زمینه دارد . $ در حقیقت یک عملگر یگانی است که دارای بالاترین اولویت عملگرها می باشد.(اگر خط هیچ زمینه ای نداشته باشد سپس NF 0, $0 تمام خط می باشد که در این مورد ممکن است بطور مجزا خالی از فضای سفید است.و بناباین ارزش عددی 0 را داردبرای اختصار {} در این مثالها حذف شده اند. در انتهای ورودی الگوی منطبق با END است بنابراین s چاپ می شود.به هر حال تا زمانیکه هیچ خط ورودی وجود نداشته باشد.در این حالت هیچ مقداری به s انتساب داده نمی شود این به طور پیش فرض یک رشته خالی است.اضافه کردن 0 به متغییرها یک اصطلاح Awk برای ناگزیر کردن از یک عدد به یک رشته ( تسلسل رشته خالی ناگزیر می کند از عدد به یک رشته eg )تو.جه داشته باشید .هیچ عملگری به الحاق رشته ها وجود ندارد.آنها فقط نزدیک جایگذاری می شوند .با ناگزیر بودن برنامه صفر را در ورودی خالی چاپ می کند .بدون آن یک خط خالی چاپ شده است.

انطباق محدوده ورودی در خطها

$ yes Wikipedia | awk 'NR % 4 == 1, NR % 4 == 3 { printf "%6d %s\n", NR, $0 }' | sed 7q
$





1 Wikipedia 2 Wikipedia 3 Wikipedia 5 Wikipedia 6 Wikipedia 7 Wikipedia 9 Wikipedia cut here--$/, 0--^/









چاپ کردن خطوط ورودی از خط اول منطبق بر عبارت با قاعده ^--cut here--$ که این یک خط شامل فقط یک عبارت "---cut here---" تا به انتها است. محاسبه تکرار کلمه برای تکرار کلمه از آرایه شرکت پذیر استفاده می شود




{"+[BEGIN { FS="[^a-zA-Z ( ++for (i=1; i<=NF; i} ++[(words[tolower($i { (END { for (i in words [print i, words[i {

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



( for (i in wordsایجاد حلقه برای حرکت در میان کلمات آرایه .تنظیم کردن i برای هر زیر نویس از آرایه ای نسبت به بسیاری از زبانا متفاوت است که حلقه در میان کلمات آرایه حرکت کند.این به این معنا است که چاپ کردن کلمه با هر شمارنده ای به ساده ترین راه ممکن است. Tolower یک جمع در یک حقیقت Awk ساخته شده قبل از منتشر شدن کتاب است .

انطباق الگو از خط دستور

این برنامه به چندین راه می تواند معرفی شود.اولین راه استفاده از Bourne shell برای ایجاد shell script که هر چیزی را انجام می دهد.این کوتاه شده این متد است.




cat grepinawk $ pattern=$1 shift $'{ awk '/'$pattern'/ { print FILENAME ":" $0 $

الگو $ در دستور awk توسط گیومه محافظت نمی شود.یک الگو به خودی خود در راه عادی چک می کند تا ببند با تمام خطهای ($0) منطبق است .نام فایل شامل نام فایل جاری است.awk عملگر جداگانه ای برای الحاق ندارد.دو رشته مجار با هم متصل می شوند. $0 بدون تغییر ورودی به خطوط اصلی تغییر پیدا می کند .آنها راه های متناوب برای نوشتن این هستند .این shell script دسترسی دارد به محیط به صورت مستقیم از داخل awk.




cat grepinawk $ pattern=$1 shift $'{awk '$0 ~ ENVIRON["pattern"] { print FILENAME ":" $0 $

این shell script که برای دورزدن استفاده می شود.یک آرایه در ورژن جدیدتر از یک awk درست بعد از این که کتاب منتشر شد معرفی می شود. subscript of ENVIRON برای احاطه کردن نام یک محیط متغییری می باشد نتیجه آن مقدار متغییر می باشد .و این شبیه تابع getenv در کتابخانه های متنوع استاندارد و POSIX می باشد . shell script محیط متغییری الگو شامل آرگومان اول را درست می کند.سپس آرگومان را می اندازد و Awk الگو را در هر فایلی جستجو می کند.~ چک می کند که عملوند سمت چپ با عملوند سمت راست منطبق باشد!~ به صورت برعکس.توجه کنید که عبارت با قاعده فقط یک رشته است و می تواند به عنوان یک متغییر ذخیره شود .راه دیگر استفاده از انتساب متغییرها ی دستور-خط می باشد در این مورد آرگومان awk می تواند به عنوان انتساب به متغییر ها داده شود.



cat grepinawk $
pattern=$1 shift $"awk '$0 ~ pattern { print FILENAME ":" $0 }' "pattern=$pattern $

در انتها نوشته می شود در awk اصل بدون کمک گرفتن از shell یا بدون دانستن زیاد در مورد اجرای awk script .(به عنوان انتساب در خط فرمان انجام می شود .)ولی به اندازه یک بیت درازا دارد.





BEGIN [pattern = ARGV[1 for (i = 1; i < ARGC; i++) # remove first argument [ARGV[i] = ARGV[i + 1 ARGC-- if (ARGC == 1) { # the pattern was the only thing, so force read from standard (input (used by book ARGC = 2 "-"= [ARGV[1 { { { $0 ~ pattern { print FILENAME ":" $0


خیلی ضروری برای استخراج آرگومان اول نمی باشد ،ولی اغلب برای جلوگیری از ترجمه شدن به عنوان نام فایل بعد از BEGIN بلوک بسته می شودARGC شماره آرگومانه می باشد که اغلب بزرگتر از 1 می باشند.به عنوان مثال ARGV[0] نام دستوری است که اجرا می کند بیشتر اوقات رشته "awk".اغلب توجه کنید که ARGV[ARGC] یک رشته خالی است"".# ابتدای یک توضیح است که تا پایان خط ادامه دارد.توجه کنید به بلوک if awk, قبل از این که اجرا کند دستور را چک می کند که ببیند از ورودی استاندارد خوانده شده است.این بدان معنا است که:



'awk 'progکارها فقط به خاطر این حقیقت که هیچ نام فایلی وجود نداردقبل از اجرای برنامه چک می شود.اگر شما به طور واضح تنظیم کنیدARGC به 1 بنابراین هیچ آرگومانی وجود ندارد.awkبه طور ساده و مختصر خواهد شد به خاطر اینکه فکر می کند هیچ نام فایلی ورودی دیگری وجود ندارد.بنابراین شما نیاز دارید که به طور واضح بگویید با یک نام فایل ویژه از یک ورودی استاندارد می خوانید

Self-contained AWK scripts

به عنوان مثال با خیلی از زبانهای برنامه نویسی دیگر خود شمولی AWK script می تواند با سازنده برای استفاده کردن از so-called " shebang" syntax به عنوان مثال دستور UNIX فراخوانی می کند hello.awk که چاپ می کند رشته "Hello, world!" که جزوی از ساختمانی است که وسیله اسم فایل ساخته می شود hello.awkکه شامل خط زیر می باشد.



usr/bin/awk -f/#! {"!BEGIN { print "Hello, world

-f

به awk می گوید یک آرگومان که فایل را دنبال می کند تا برنامه awk از آن بخواند ، که به وسیله shell وقتی که اجرا می شود جایگزین می شود.

ورژن ها و پیاده سازی AWK

AWK به طور کلی در سال 1977 نوشته شد و با ورژن 7 Unix توزیع شد. در سال 1985 نویسنده های آن به وسیله اضافه کردن توابع user-defined شروع به گسترش زبان کردند.در کتاب AWK Programming Language زبان توضیح داده شد و در سال 1988 منتشر و پیاده سازی شد وبا UNIX System V عرضه شد.برای پرهیز از اشتباه شدن با ورژن های قدیمی ناسازگار بعضی وقتها این ورژن به عنوان "new awk" یا nawk شناخته می شد.این پیاده سازی تحت لیسانس free software license در 1996 عرضه شد وهمچنان توسط Brian Kernighan نگهداری می شود . BWK awk رجوع می کند به ورژن Brian W. Kernighan .که دوبله می کند "One True AWK" بخاطر استفاده کردن از اصطلاح در وابسته سازی با کتاب که به طور کلی زبان را توصیف می کند. و حقیقت این است که Kernighan یکی از نویسندگان اصلی awk است .

FreeBSD به این ورژن مراجعه می کند به عنوان مثال one-true-awk.این ورژن اغلب ویژگی هایش در این کتاب نبود.از قبیل tolower وENVIRON که در بالا توضیح داده شده است. gawk (GNU awk) یک نرم افزار آزاد دیگر است که پیاده سازی شد و تنها پیاده سازی است که تلاش جدی در انجام داده i18n دارد.و اغلب به کاربر اجازه می دهد که تابعیت برنامه خود را با کتابخانه های اشتراکی نوشته شده توسط کاربر توسعه دهد.که قبل از پیاده سازی اصلی نوشته شد که به صورت آزاد موجود بود.و هنوز به طور گسترده استفاده می شود.خیلی از نسخه های Linux با این ورژن اخیرgawk آمدند وgawk به طور وسیعی به عنوان de-facto پیاده سازی استاندارد در دنیای Linux شناخته شد. gawk ورژن 3 شامل awk در FreeBSD تا پیش از ورژن 5 بود.ورژن های بعدی FreeBSD از BWK awk برای جلوگیری از GPL استفاده کردند.محدود کردن بیشتر (در این جهت که GPL لیسانس کد نمی تواند باعث اختصاصی شدن یک نرم افزار شود.)لیسانس از BSD لیسانس. xgawk یک پروژه SourceForge که برا ساس gawk است.که gawk را با کتابخانه های قابل بارگذاری پویا گسترش داده است. mawk یک پیاده سازی AWK مرجع است که به وسیله Mike Brennan و براساس مفسر بایت کد می باشد .

ورژن قدیمی Unix از قبیل UNIX/32V شامل awkcc که تبدیل کننده AWK به C بود. Kernighan برنامه ای برای تبدیل awk به C++ نوشت ولی این حالت شناخته شده نیست. awka (کسی که با انتها در نوشتن در بالای برنامه mawk مواجه شد .)که یک مترجم دیگر از awk به C می باشد .وقتی که کامپایل می شود شامل نویسنده libawka.a می باشد نتیجه اجرایی به طور اهم براساس تست مقایسه نویسنده با سایر ورژن های awk, perl یا tcl می باشد. scripts کوچک می توانند به برنامه های 160-170 kB تبدیل شوند. Thompson AWK یا TAWK یک کامپایلر AWKبرای Solaris , DOS, OS/2, و Windows که توسط Thompson Automation Software قبلا فروخته شد.(که فعالیتهایش را متوقف می کند).
Jawk یک SourceForge پروژه است که AWK را در Java پیاده سازی می کند. ویژگیهایی به زبان اضافه شد تا دسترسی به ویژگیهای Java در داخل AWK را فراهم کند. BusyBox شامل پرونده های پراکنده که ظاهر می شود تا کامل کند ،نوشته شده به وسیله Dmitry Zakharov .این یک پیاده سازی کوتاه و مناسب برای سیستم های جاسازی شده می باشد

Borna66
05-25-2011, 09:11 PM
Basic :

زبان بیسیک از سری زبان های است که توسط شرکت مایکروسافت تهیه گردید و قابلیت زیادی داشت ولی به هر حال قدرت رقابت با محضول شرکت بورلند یعنی پاسکال را نداشت، چرا که بورلند پاسکال دارای یک مترجم یا کامپایلر را داشت که این امکان را برای کاربر به وجود می آورد که بتواند بدون نیاز به خود زبان برنامه نویسی برنامه را اجرا کند و دیگر مزیت این کامپایلر این است که زمانی که شما دستورات را به طور کامل تایپ کردید کامپایلر یکجا برنامه را به زبان ماشین (۰و۱) تبدیل می کند و سرعت برنامه نیز بالاتر می رود حال آنکه بیسیک که یک مفسر محسوب می شود کدها را بهصورت خط به خط به ماشین تبدیل می کند

نسخه های تکمیلی بیسیک:

کوییک بیسیک کیوبیسیک ویژوال بیسیک را می توان نام برد که قابلیت شی گرا یی دارند وهمینطور دارای کامپایلر نیز هستند.

Borna66
05-25-2011, 09:13 PM
پاسکال Passcal


پیش زمینه :

زبان برنامه نویسی رایانه ای پاسکال یکی از زبان های مشهور برنامه نویسی سطح بالای متداول است.
پاسکال به عنوان زبان ساده شده زبان ALgOL طراحی شد و مقاصد آموزشی داشت. این زبان توسط نیکلاوس ورث (Niklaus Wirth)پروفسور دانشگاه پلی تکنیک زوریخ/سوییس در اوایل سال های ۱۹۷۰ توسعه یافته و نام آن از نام بلز پاسکال، ریاضی دان فرانسوی، الهام گرفته شده است.
وقتی پاسکال اختراع شد زبان های برنامه نویسی بسیار زیادی وجود داشت ولی تنها چند تا از آنها بسیار استفاده می شدند که عباترتند از cobol,assembler,fortrant ایده اصلی زبان جدید نظم،مدیریت داده ها و نیاز به تعریف داده ها بود،این زبان از ابتدا به گونه ای طراحی شده بود که یک زبان آموزشی باشد.
استاندارد این زبان برنامه نویسی در سال ۱۹۸۳ نوشته شده است و دو سازمان IEEE و ANSI آن را تائید کرده اند. هم اکنون این زبان بیش تر به عنوان زبان برنامه نویسی ی آموزشی برای مبتدیان در دانشگاه ها تدریس می شود. سادگی و تجرید خوب این زبان امکان برنامه نویسی راحت بدون نیاز به آگاهی از ساختارهای پیچیدهٔ زیرین سیستم عامل را می دهد.

از خصوصیات این زبان می توان به سادگی فراگیری آن اشاره کرد. پاسکال نیز مانند بسیاری از زبان های برنامه نویسی دیگر دارای کامپایلرهای زیادی است که از معروف ترین آنها می توان به کامپایلر توربو پاسکال (Turbo Pascal) که متعلق به شرکت بورلند (Borland) است اشاره کرد. شرکت بورلند از پاسکال شی گرا به عنوان زبان برنامه نویسی محیط توسعه نرم افزار خود به نام دلفی استفاده کرده است.
توربو پاسکال کامپایلر مشهور پاسکال، که توربو پاسکال نام داشت در سال1983معرفی شد، توربو پاسکال همیشه در بین زبان های برنامه نویسی از فروش بسیار بالایی برخوردار بود.
توربو پاسکال مفهوم جدیدی را به نامIntegrated Development Environment ویا IDE را معرفی کرد، IDE یعنی محیط برنامه نویسی مجتمع،در واقع شما در این محیط می توانید کد را ویرایش کنید (در یک ویرایشگر هماهنگ با wordstar)، کامپایلر را آغاز کنید، خطاها را ببینید و به خط هایی که حاوی آن خطا هاست بروید،البته این مسئله هم اکنون بسیار بی معنی به نظر می آید،اما در گذشته لازم بود که شما از ويرایشگر بیرون بروید و به DOS برگردید و سپس کامپایلر را به صورت خط فرمانی آغاز کنید، سپس شماره خطاهای خط را یادداشت کنید، دوباره ویرایشگر را باز کنید و به خط های حاوی خطا بروید و دوباره همه چیز را از اول انجام دهید.
به علاوه بورلند توربو پاسکال خود را فقط 49دلار می فروخت، در حالیکه مایکروسافت کامپایلر پاسکال خود راچند صد دلار به فروش می رساند، تداوم موفقیت چند ساله توربو پاسکال سبب شد که درآمدهای مایکروسافت از فروش کامپایلر پاسکال بسیار کاهش یابد. پاسکال دلفی بعد از 9نسخه از انتشار توربو پاسکال و بورلند پاسکال، که به تدریج زبان های بسیار گسترده ای شده بود، بورلند در سال 1995 دلفی را معرفی کرد که پاسکال را به یک محیط برنامه نویسی دیداری(VISUAL) تبدیل کرده بود. زبان شیئ گرایی پاسکال که ما در دلفی از آن سود می جوییم در سال 1995 همراه با محیط برنامه نوسیس دیداری(VISUAL)دلفی اختراع نشد این زبان توسعه یافته زبان پاسکال شیئ گرا بود که قبلاً در محصول بورلند پاسکال از آن استفاده شده بود، اما بورلند پاسکال آن را را اختراع نکرد او تنها به گسترش وعمومی شدن آن کمک کرد.
پاسکال یک زبان برنامه نویسی امری و ساخت یافته تأثیر گذار می باشد که در سال 1968 طراحی شد و در سال 1970 توسط آقای Niklaus Wirth به عنوان یک زبان کارآمد و کوچک به منظور پیش برد و توسعه مهارت های برنامه نویسی با استفاده از برنامه نویسی ساخت یافته و ساختمان داده ها منتشر شد.
یک نسخه برگرفته که با عنوان Object Pascal شناخته می شود برای برنامه نویسی شی گرا طراحی شد.

تاریخچه :

پاسکال بر پایه یک زبان برنامه نویسی Algol می باشد و به افتخار ریاضی دان و فیلسوف فرانسوی Blaise Pascal نام گذاری شد. آقای Wirth متعاقباٌ Modula-2 و Obern که شبیه پاسکال بودند را توسعه داد. قبل از آن و برای تهیه مقدمات پاسکال، ایشان زبان Euler که از Algol-W پیروی می کرد را توسعه دادند.
در ابتدا پاسکال بسیار وسیع و جامع بود، اما تنها به منظور یاددادن برنامه نویسی ساخت یافته به دانشجویان نبود. نسلهای متمادی از دانشجویان بر روی پاسکال به عنوان یک زبان مقدماتی در دوره های لیسانس کار کردند. همچنین نسخه های متفاوتی از پاسکال مکرراً برای هر چیزی از پروژه های تحقیقاتی گرفته تا بازی های رایانه ای و سیستم های جاسازی شده استفاده شد. هم اکنون کامپایلر های جدید تر پاسکال موجود می باشند که که به طور وسیع و گسترده استفاده می شوند.
پاسکال نخستین زبان سطح بالا بود که برای توسعه و تکامل در Apple Lisa استفاده شد و در سال های اولیه Mac، قسمت هایی از سیستم عامل اصلی مکینتاش، از منابع پاسکال توسط دست به زبان اسمبلی 68000 Motorola ترجمه شد. حروفچینی محبوب سیستم TeX توسط Donald E.Knuth در WEB (سیستم برنامه نویسی آموزش دیده اصلی) نوشته شد، که بر پایه DEC PDP-10 Pascal می باشد، آن هم در هنگامی که یک برنامه کاربردی مانند Total Commander در Delphi (پاسکال شی گرا) نوشته شد.

چکیده :

صد آقای Wirth خلق یک زبان کار آمد بود (در هر دو مورد سرعت کامپایل و کد ساخته شده) که بر پایه به اصطلاح برنامه نویسی ساخت یافته (مفهومی که به تازگی محبوب شده است) می باشد. اصول و ریشه های پاسکال در زبان الگول 60 می باشد، اما علاوه بر آن مفاهیم و مکانیزم هایی را مافوق اعداد و آرایه های الگول معرفی کرد که برنامه نویسان را قادر به تعریف انواع داده (ساختمان) پیچیده خودشان می کرد و همچنین ساخت ساختمان داده های بازگشتی و پویا مانند لیست ها، درخت ها و گرافها را آسانتر می کرد.
امکانات مهم که برای این امور اضافه شده بود، رکوردها، شمارش ها، زیر حوزه ها، متغیر های اختصاص داده شده پویا همراه اشاره گر های وابسته و مجموعه ها می باشد. برای تحقق و معنی دار کردن این امر، پاسکال یک سیستم تایپ دهی قوی روی تمام اشیا دارد، به این معنی که یک نوع داده نمی تواند بدون تبدیل صریح، به عنوان نوع دیگر تفسیر و یا تبدیل شود. امروزه در بسیاری از زبان های برنامه نویسی مکانیزم های مشابهی به صورت استاندارد می باشند. زبان های دیگر که از توسعه پاسکال تأثیر گرفتند، کوبول، سیمولا 67 و Algol W خود آقای Wirth می باشند.
پاسکال مانند بسیاری از زبان های اسکریپتی امروزه ( اما بر خلاف زبان های خانواده C ) به تعریف پروسه های تودرتو تا هر عمقی و همچنین اکثر انواع تعریف ها و اعلان ها درون پروسه ها و توابع اجازه می دهد. این امر یک نحو خیلی ساده و منسجم را امکان پذیر می سازدکه یک برنامه کامل از نظر نحوی، خیلی نزدیک به یک تابع و یا پروسه تنهاست (البته به استثنای خود کلمه کلیدی).

ساختارهای زبان :

پاسکال در شکل اصلی خودش به طور خالص یک زبان رویه ای است و دارای آرایش سنتی الگول است که شبیه ساختارهای کنترل به همراه کلمات رزروشده همچون if,then,else,while,for و ... می باشد. با این حال پاسکال بسیاری امکانات ساخت یافته داده ای و انتزاعی را داراست که در الگول 60 اصلی موجود نبودند. مانند تعاریف نوع ها، رکوردها، اشاره گرها، شمارش ها و مجموعه ها. یک همچنین ساختار هایی تا یک اندازه از Simula 67 ،Algol 68، Algol W خود آقای Wirth و پیشنهادات C.A.R. Hoare الهام گرفته شده و یا به ارث برده شدند.

Hello World

برنامه های پاسکال توسط کلمه کلیدی Program به همراه لیستی از فایل های خارجی به عنوان پارامترها شروع می شوند. سپس بلوک عبارت اصلی که توسط کلمات کلیدی Begin و End بسته بندی شده است را دنبال می کنند. علامت semicolon (http://pnu-club.com/imported/2011/05/41.gif عبارات را از هم جدا می کند و نقطه آخر برنامه تمام برنامه را خاتمه می دهد. در پاسکال، بزرگ و کوچکی حروف مطرح نیست. بعضی کامپایلرها مثل توربو پاسکال در میان آنها کلمه کلیدی Program را اختیاری در نظر می گیرند.
در اینجا یک مثال از کد برای یک برنامه خیلی ساده آورده شده است.



Program HelloWorld(output);
begin writeLn('Hello, World!')

end.

انواع داده :

ک تایپ در پاسکال و در عموم زبان های برنامه نویسی محبوب دیگر، یک متغیر را به گونه ای در نظر می گیرد که درآن، حوزه ای از مقادیر قابل قبول تعریف می شود که متغیر قادر به ذخیره آن می باشد و همچنین مجموعه ای از عملگرها را لحاظ می کند که برروی آن متغیر با آن نوع مجاز است. انواع داده ها و توضیحی مختصر در مورد آنها در زیر آورده شده است.
نوع داده حوزه قابل ذخیره توسط متغیر integer تمام اعداد از32768- تا 32768 byte اعداد صحیح از0 تا 255 real 1E-38 تا 1E+38 اعداد اعشاری از boolean تنها مقادیر درست و نادرست را نگه می دارد. char هر کاراکتر درمجموعه کد اسکی

ساختارهای داده :

انواع داده ای ساده پاسکال عبارتند از real,integer,character,Boolean,enumeration که enumeration یک نوع داده جدید می باشد که توسط پاسکال معرفی شد.



var r: Real;
i: Integer;
c: Char;
b: Boolean;
e: (apple, pear, banana, orange, lemon);


زیرحوزه های هر نوع داده ترتیبی وصفی ( هر نوع ساده به غیر از real ) را می توان تغییر داد و ساخت.






var x: 1..10; y: 'a'..'z';

z: pear..orange;



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





(set type) var set1: set of 1..10;

set2: set of 'a'..'z';

set3: set of pear..orange;



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





if i in [5..10] then ...



بسیار سریع تر است از





if (i>4) and (i<11) then ...


تایپ ها می توانند از دیگر تایپ ها با استفاده از اعلان تایپ تعریف شوند:





type x = Integer;

y = x; ...



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





type a = Array [1..10] of Integer;

b = record x: Integer;

y: Char end;

c = File of a;



همان طور که در مثال بالا نشان داده شده است فایل های پاسکال سلسله ای از اجزا هستند. هر فایل یک متغیر بافر دارد که با f^ مشخص می شود. رویه ها (procedure) متغیر بافر را برای خواندن(get) و نوشتن(put) به المان بعدی حرکت می دهند. خواندن به این صورت معرفی می شود که read(f,x) همانند x:=f^ ; get(f) می باشد. نوشتن به این صورت معرفی می شود که write(f,x) مانند f^:=x ; put(f) است. نوع داده متن به عنوان فایلی از کاراکترها از پیش تعریف شده است. هنگامی که متغیر بافر برای رسیدگی به کاراکتر بعدی می تواند مورد استفاده قرار گیرد، از آن استفاده به عمل خواهد آمد (بررسی یک رقم قبل از خواندن یک مقدار صحیح). این مفهوم منجر به اشکالات جدی برای برنامه های محاوره ای با پیاده سازی های جدید شد، اما بعدها توسط مفهوم “lazy I/O” حل شد.

اشاره گرها

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




type a = ^b;
b = record a: Integer;
b: Char;
c: a end;
var pointertob: a;



در اینجا متغیر اشاره گر به b، یک اشاره گر به نوع داده b که یک رکورد است، می باشد. اشاره گرها قبل از اینکه اعلان شوند، می توانند استفاده شوند. این یک اعلان رو به جلو است، یک استثنا برای این قانون که اشیا قبل از استفاده باید تعریف شوند. برای ساخت یک رکورد جدید و اختصاص دادن مقدار 10 و کاراکتر A به قسمت های a و b در رکورد و برای مقداردهی اولیه اشاره گرc به تهی، دستورات باید به صورت زیر باشند.





new(pointer_to_b);

pointertob^.a := 10;
pointertob^.b := 'A';
pointertob^.c := nil;
...

این امر می تواند با استفاده از عبارت with به صورت زیر نوشته شود.




new(pointer_to_b);
with pointertob^ do begin a := 10; b := 'A';

c := nil end;

...توجه داشته باشید که درون حوزه عبارت with کامپایلر می داند که a و b به زیر حوزه های اشاره گر به رکورد pointertob ارجاع می دهد و نه به رکورد b و یا نوع داده اشاره گر a .
لیست های پیوندی، پشته ها و صف ها با داخل کردن یک نوع اشاره گر( c) به درون رکورد، قابل ساخت می باشند. (مفاهیم nil و null را در برنامه نویسی کامپیوتری مشاهده کنید)

ساختارهای کنترل

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






while a <> b do writeln('Waiting');
if a > b then
writeln('Condition met')
else
writeln('Condition not met');
for i := 1 to 10 do writeln('Iteration: ', i:1);
repeat a := a + 1 until a = 10;
case i of 0: write('zero');
1: write('one');
2: write('two')
end;



پردازه ها و توابع

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


program mine(output); var i : integer; procedure print(var j: integer); function next(k: integer): integer; begin next :ه ا= k + 1 end; begin writeln('The total is: ', j); j := next(j) end; begin i := 1; while i <= 10 do print(i) end.




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

Borna66
05-25-2011, 09:22 PM
پردازه ها و توابع می توانند تا هر عمقی به صورت تودرتو باشند و ساختار برنامه به صورت منطقی، بیرونی ترین بلوک در نظر گرفته می شود. هر پردازه یا تابع می تواند اعلان های خودش برای برچسب های goto، ثوابت، تایپ ها، متغیرها و دیگر پردازه ها و توابع را داشته باشد که همگی باید در آن دسته قرار گیرند. این ملزومات ترتیبی، در اصل به قصد اجازه به کامپایل یک طرفه کارآمد بود. با این حال در بعضی نسخه ها، ملزومات الزامی ترتیبی قسمت اعلان ها، مورد نیاز نمی باشد.

کامپایلرها و مفسر ها

کامپایلرها و مفسر های گوناگون پاسکال برای استفاده عمومی همگان مهیا است:

•Delphi محصول شرکت CodeGear (Borland پیشین) می باشدکه این شرکت پرچمدار توسعه با شتاب برنامه های کاربردی (RAD)(Rapid Application Development) است. از زبان پاسکال شی گرا استفاده می کند(نام گذاری زبان برنامه نویسی Delphi توسط Borland )، زاده شده از پاسکال می باشد و به منظور خلق برنامه های کاربردی برای بستر windows تهیه شده است. نسخه های اخیر 2005 تا 2007 کامپایل به بستر .Net را نیز پشتیبانی می کنند. یک نسخه از(Turbo Delphi Explorer) برای دریافت رایگان مهیا می باشد.

•Free Pascal (Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page (http://www.freepascal.org/)) یک کامپایلر چند بستره می باشد که در پاسکال نوشته شده است (خود میزبان می باشد). هدف از آن فراهم کردن یک کامپایلر نیرومند و راحت بود که هم قادر به کامپایل برنامه های کاربردی قدیمی باشد و نیز ابزاری برای توسعه امکانات جدید. این کامپایلر زیر نظر GNU GPL توزیع شده است. با صرف نظر از روش های سازگاری برای Turbo Pascal، Delphi و MacPascal، این کامپایلردارای حالت های نحوی شی گرا و ساخت یافته خودش به همراه پشتیبانی امکانات توسعه یافته همانند سربارگذاری عملگرها می باشد. او همچنین بسیاری از platform ها و سیستم عامل ها را پشتیبانی می کند.

•Lazarus(lazarus.freepascal.org) یک IDE پیوند زده شده با platform بصری شبیه Delphi می باشد که برای توسعه با شتاب برنامه های کاربردی(RAD) تهیه شده است. مبتنی بر freepascal می باشد، برای platform های بسیاری شامل Linux، FreeBSD، Mac OS X و Windows آماده است. • Dev-Pascal یک محیط برنامه نویسی پاسکال است که در Borland Delphi طراحی شد و هر دوی Free Pascal و GNU Pascal را به صورت پیش فرض پشتیبانی می کند. او بر خلاف همزادش C++ سالهاست که دستاورد مهمی نداشته است.

•Oxygene (قبل تر با نام Chrome شناخته می شد) کامپایلر نسل بعد پاسکال شی گرا برای .NET و platform های تنها می باشد. او توسط RemObject Software ساخته و فروخته شد.

•Kylix یکی از اولاد Delphi به همراه پشتیبانی برای سیستم عامل لینوکس و نیز یک کتابخانه شی ارتقا یافته بود. کامپایلر و محیط برنامه نویسی برای استفاده غیره تجاری هم اکنون موجود می باشند. این محصول توسط بورلند پشتیبانی نمی شود.

•GNU Pascal Compiler(GPC) این کامپایلر پاسکال، مجموعه کامپایلرهای GNU است (GCC) GNU Compiler Collection. خود کامپایلر در C، وکتابخانه زمان اجرا عمدتاًدر پاسکال نوشته شده است. بصورت مجانی تحت لیسانس نشر عمومی GNU توزیع شده است. بر روی بسیاری از platform ها و سیستم عامل ها اجرا می شود. او زبان های استاندارد ANSI/ISO و بخشی از زبان های Borland/Turbo Pascal را پشتیبانی می کند. یکی از دردناک ترین محذوفات، غیاب %100 نوع رشته سازگار با TP است. در این کامپایلر پشتیبانی Delphi و زبان های متنوع دیگر به کلی محدود شده است به استثنای Mac Pascal که پشتیبانی برای آن به سرعت در حال رشد است.

•Virtual Pascal توسط Vitaly Mirianov در سال 1995 به عنوان کامپایلر درونی OS/2 و سازگار با نحو بورلند پاسکال ساخته شد. پس از آن به صورت تجاری توسط fprint و اضافه کردن پشتیبانی Win32 توسعه یافت و در سال 2000 یک برنامه رایگان شد. امروزه برای Win32 و OS/2 و Linux دارای توانایی کامپایل است و با بورلند پاسکال و دلفی بسیار سازگار است. توسعه این کامپایلر در 4 آوریل 2005 لغو شد.

•کامپایلر P4 که پایه و اساسی برای بسیاری کامپایلرهای پیاده سازی پاسکال در پاسکال می باشد، شامل UCSD p-System است. او یک زیر مجموعه از پاسکال کامل را پیاده سازی می کند. •کامپایلر P5 یک ISO 7185 (پاسکال کامل) برگرفته از P4 می باشد.

•Turbo Pascal یک کامپایلر برتر پاسکال برای کامپیوتر های شخصی در سال های 80 و اوایل 90 می باشد. به علت توانایی توسعه قوی اش و بویژه زمان کامپایل کوتاهش، دارای محبوبیت می باشد. توربو پاسکال به صورت فشرده نوشته شده است و می تواند تماماً در حافظه و بدون دسترسی به دیسک، کامپایل، اجرا و اشکالزدایی شود. در آن موقع فلاپی دیسک های کند در بین برنامه نویسان رواج داشت که این نیز سبب بزرگنمایی مزیت توربوپاسکال شد. هم اکنون نسخه های قدیمی توربو پاسکال (بالاتر از 5.5) برای دریافت مجانی از سایت بورلند مهیا می باشند.
•Turbo51(turbo51.com) یک کامپایلر مجانی پاسکال برای خانواده 8051 از میکروکنترلرها می باشد (از نحو توربو پاسکال 7.5 استفاده می کند).

•Dr. Pascal یک مفسر است که پاسکال استاندارد را اجرا می کند. نکته قابل توجه، حالت اجرای مرئی آن می باشد، که در این حالت، یک برنامه در حال اجرا، و متغیر های آن برنامه و امکان بررسی خطای زمان اجرا را به صورتی وسیع و گسترده نشان می دهد. برنامه را اجرا می کند، اما اعداد باینری اجرایی را تولید نمی کند. این مفسر، در MS-DOS و Windows (در پنجره DOS ) و در Macintosh های قدیمی اجرا می شود.

•کامپایلر پاسکال توسعه داده شده Dr Pascal: این کامپایلر بر روی DOS وWindows 3.1, 95, 98, NT تست شده است.

•IP Pascal زبان Pascaline (نامگذاری شده بعد از Pascal’s calculator) را پیاده می کند که یک پاسکال توسعه یافته وسیع می باشد و براساس ISO 7185 سازگار با پاسکال اصلی تهیه شده است. این زبان، پیمانه ها را به همراه کنترل های فضای نام نشان می دهد که مشتمل بر پیمانه های وظایف موازی به همراه پرچم های راهنما، اشیا، آرایه های پویا با هرتعداد بعد که در زمان اجرا تخصیص داده می شوند، سربارگذاری ها، لغو کردن ها و بسیاری امکانات دیگر است. IP Pascal یک کتابخانه قابل نقل و انتقال در درون خود دارد که به صورت سفارشی برای زبان پاسکال ساخته شده است. به عنوان مثال یک برنامه کاربردی دارای خروجی استاندارد متنی از پاسکال اصلی سال 1970 را برای کار کردن در یک پنجره و حتی در ساخت های گرافیکی اضافه شده، می توان مجدداً کامپایل کرد.
•Pocket Stodio یک کامپایلر زیر مجموعه ای پاسکال می باشد که با هدف قرار دادن سیستم عامل Palm به منظور توسعه با شتاب برنامه های کاربردی/ MC68xxx طراحی و ساخته شد. برای این امر از بعضی امکانات خودش، برای کمک به واسط ها، توسطAPI های Palm OS استفاده می کرد.

•MidletPascal – یک کامپایلر پاسکال و یک IDE که کدهای بیتی سریع و کوچک جاوا را تولید می کند و مخصوصاً به منظور ساخت نرم افزار برای موبایل طراحی شده است.

•Vector Pascal یک زبان است که در مجموعه دستور العمل SIMD همانند MMX وAMD 3d کنونی، در نظر گرفته شد که تمام پردازنده های Intel و AMD را به خوبی موتور Play Station 2 پشتیبانی کند.

•Morfic Pascal که توسعه برنامه های کاربردی Web تماماً نوشته شده در پاسکال شی گرا را امکان پذیر می سازد (برای هردو قسمت کارگزار و مرورگر)
•Web Pascal (http://www.codeide.com/) یک محیط نرم افزاری و کامپایلر پاسکال online می باشد.

•WDSibyl یک محیط توسعه بصری و کامپایلر پاسکال برای Win32 و OS/2 است.

•PP Compiler ، یک کامپایلر برای سیستم عامل های Palm است که مستقیماً برروی کامپیوتر هایی به اندازه کف دست اجرا می شود.

Borna66
05-25-2011, 09:23 PM
استانداردها

در سال 1983، زبان در استاندارد بین المللی ISO/ICE 7185 همانند استانداردهای ویژه کشورهای محلی، دارای استاندارد بود ودر برگیرنده استاندارد آمریکایی ANSI/IEEE770X3.97-1983 و ISO7185:1993 بود. این دو استاندارد فقط در اینکه استاندارد ISO یک بسط “level 1” برای آرا یه های صریح داشت و ANSI اجازه امکان این توسعه را به برنامه اصلی (نسخه آقای Wirth) نمی داد، متفاوت بودند. در سال 1989 استاندارد ISO7185 برای تصحیح خطاهای متنوع وابهاماتی که در سند اصلی موجود بود، بازنگری شد و منجر به ISO 7185:1990 شد.

در 1990 یک پاسکال استاندارد توسعه یافته به عنوان ISO/ICE 10206 ساخته شد. در سال 1993 استاندارد ANSI توسط خود سازمان ANSI ، با “pointer” به استاندارد ISO 7185:1990 ارتقا یافت. دراین استاندارد جدید، اتمام و انتهای وضعیت، به طور محسوسی متفاوت می باشد.

قرار شد که ISO 7185 یک شرح روشن کننده و ابهام زدا برای زبان آقای Wirth در سال 1974 باشد، به همان صورتی که توسط دستورالعمل های راهنما و گزارش (Jenson & Wirth) شرح داده شده است. اما یک نکته قابل تأمل وجود دارد و آن اضافه نمودن پارامتر های آرایه همسان به عنوان level 1 برای این استاندارد و level 0 برای پاسکال بدون آرایه های همسان می باشد.

توجه کنید که خود Nikulas Wirth به زبان 1974 به عنوان استاندارد ارجاع داد، مثلاً برای تفاوت گذاشتن میان آن و امکانات مخصوص ماشین برای کامپایلر CDC6000. این زبان سال 1974 برای پاسکال حرفه ای به صورت سند در آمد و قسمت دوم کتابچه راهنمای استفاده کنندگان پاسکال و گزارشات مربوط به آن می باشد.

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

بدین روی، عموماً درک این موضوع مهم می باشد که آیا یک پیاده سازی ویژه زبان، همانند زبان پاسکال اصلی می باشد یا یک نسخه برلند از آن همانند زبان پاسکال اصلی است.

با آمدن UCSD Pascal نسخه های IBM-PC زبان، از نسخه های قبل متفاوت شدند. این نسخه یک پیاده سازی شفاهی است که توسعه ها و امکانات زیادی، بهمراه کاستی ها و تغییرات فراوانی را برای زبان بیان کرد. بسیاری از امکانات زبان UCSD در نسخه های بورلند، همچنان باقی مانده اند.

دسته بندی ها

نسخه Niklaus Wirth’s Zurich زبان پاسکال در دو قالب اساسی به بیرون از ETH انتشار یافت، یکی منبع کامپایلر CDC6000 و دیگری کیت قابل حمل که سیستم Pascal-P نامیده می شد.
کامپایلر Pascal-P امکانات متنوعی از زبان کامل را محدود کرد و مانع آنها شد. مثلاً پردازه ها و توابع که به عنوان پارامتر استفاده می شدند، رکورد های گوناگون همسان، بسته بندی، مرتب کردن، goto های درون پردازه ای و دیگر امکانات کامپایلر کامل کنار گذاشته شدند.
UCSD پاسکال زیر نظر پروفسور Kenneth Bowles بر پایه بسته Pascal-P2 بود، و در نتیجه بسیاری از محدودیت های زبان Pascal-P را نیز دارا بود. بعدها پاسکال UCSD به عنوان Apple Pascalنام گذاری شد و در نسخه های متعددی ادامه پیدا کرد. اگر چه UCSD پاسکال، زیر مجموعه پاسکال را در بسته Pascal-P با برگرداندن استانداردهای پاسکال گسترش داد، اما هنوز به صورت یک مجموعه استاندارد کامل برای پاسکال نبود.

توربو پاسکال برلند، توسط Anders Hejsberg در زبان اسمبلی و مستقل از کامپایلر های UCSD و زوریخ نوشته شد، با این حال او بسیاری از زیر مجموعه های مشابه و الحاقات کامپایلر UCSD را پذیرفته بود. احتمالاً این امر به این علت است که سیستم UCSD، عمومی ترین سیستم پاسکال بود که برای توسعه کاربردها برروی سیستم های ریزپردازنده ای دارای منابع محدود در آن زمان مهیا بود.

لیست استانداردهای مربوط

•ISO 8651-2:1988 سیستم های پردازش اطلاعات—گرافیک های کامپیوتری— قیدهای زبانی سیستم با هسته گرافیکی (GKS)(Graphical Kernel System) –

جهت گیری ها

پاسکال در جامعه رایانه واکنش های متعددی را برانگیخت که هم به صورت موافق بودند و هم به صورت انتقادی.

انتقادات

اگرچه پاسکال بسیار محبوب است (هرچند در سال های 1980 و اوایل 1990 خیلی بیشتر از حالا)، نسخه های ابتدایی پاسکال به علت نامناسب بودن به خاطر استفاده مشکل در کاربردی غیر از تدریس، به طور گسترده مورد انتقاد قرار گرفتند.

Brian Kernighan که زبان برنامه نویسی C را محبوب کرد، در زودترین زمان ممکن در سال 1981، انتقادات قابل توجه خود را در مقاله خودش با عنوان "چرا پاسکال زبان برنامه نویسی محبوب من نیست"، مطرح کرد. از سوی دیگر بسیاری از عمده تلاشهای توسعه در سالهای 1980، همچون آنهایی که برای Apple Lisa و Macintosh بودند، بشدت وابسته به پاسکال بودند (اشاره به این نکته که در آن هنگام رابط C برای API سیستم عامل Macintosh، مجبور به معامله با انواع داده ای پاسکال بود).

در دهه های پس از آن، پاسکال به رشد و گسترش خود ادامه داد و بیشتر ایرادات Kernighan به پیاده سازی های فعلی وارد نیستند. متأسفانه همان طور که او در مقاله اش پیش بینی کرده بود، بیشتر الحاقات برای تصحیح این ایرادات، در کامپایلرهای گوناگون ناسازگار بودند. در دهه اخیر، اگر چه عمده تغییرات در دو گروه عمده متمایل به ISO و متمایل به Borland خلاصه می شوند، با این حال، وضعیتی بهتر از پیش بینی Kernighan حاصل شده است.

هرچند Kernighan کمبود نوع های scape در پاسکال (هیچ scape وجود ندارد از مقاله چرا پاسکال زبان برنامه نویسی محبوب من نیست) و استفاده خارج از کنترل اشاره گرها و نوع های scape را برملا ساخت، با این حال این ها نکات انتقادی شدید و بسیار جدی بودند و زبان های java و C# و دیگر زبانها با توجه به این انتقاد وارده بر پاسکال، یک تغییر و برگشت هشیارانه را ترسیم کردند و نشان دادند، که این زبان ها، اشاره گرهای مدیریت شده “managed pointers” نامیده شدند که در واقع توسط آقایWirth با خلق پاسکال پیش بینی شده بودند.

بر پایه این تجربیات پاسکال (و قبلتر با Algol )، آقای Wirth زبان های متعدد و بیشتری را توسعه و بسط داد همانند modula، modula 2 و obern. این زبان ها که بعضی از ایرادات و اشکالات پاسکال را دارا می باشند، به قصد رواج در میان استفاده کنندگان گوناگون و به اهدافی دیگر طراحی شده بودند، اما هیچ یک نه تأثیری شگرف به وسعت پاسکال بر روی علم کامپیوتر و استفاده کنندگان آن گذاشتند و نه تاکنون در موفقیت تجاری مشابهی همانند موفقیت پاسکال دیده شدند.


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

یک برنامه به زبان پاسکال از قسمت های مختلفی تشکیل می شود . کوچک ترین واحدهای معنی دار در زبان پاسکال توکن ( Token ) نامیده می شود که عبارت اند از :

1 - حروف : حروف الفبای بزرگ ( از A تا Z ) و حروف الفبای کوچک ( a تا z )
2 - ارقام مبنای 10 : ارقام 0 تا 9
3 - ارقام مبنای 16 : ارقام 0 تا 9 و حروف A تا F و یا a تا f
4 - کاراکترهای تکی : + ، - ، / ، ، = و . . .
5 - جفت کاراکترها : مانند <> ، => ، =< ، = و . . .
6 - شناسه ( Identifier ) : از شناسه ها برای نام گذاری استفاده می شود . شناسه ترکیبی از حروف ، ارقام و کاراکتر زیر خط (-) است که می تواند دارای طول دلخواهی باشد اما پاسکال فقط 63 کاراکتر اول را در نظر خواهد گرفت . شناسه حتما باید با یک حرف یا علام زیر خط (-) آغاز شود .

شناسه های به دو دسته تقسیم می شوند :

الف ) شناسه های استاندارد : این شناسه ها از قبل در پاسکال تعریف شده اند برای نمونه می توان به Write و Read اشاره نمود .
ب ) شناسه های غیر استاندارد : این شناسه ها به وسیله کاربر به طور مجزا تعریف می شوند به همین دلیل به آن ها User defined گفته می شود .

لازم به ذکر است که پاسکال در تعریف شناسه ها تفاوتی میان حروف بزرگ و کوچک قائل نمی شود بنابراین شناسه های counter و COUNTER با یکدیگر معادل اند .

7 - برچسب ( label ) : از برچسب برای مشخص نمودن خطوط خاصی از برنامه استفاده می شود . با استفاده از دستور goto می توان کنترل برنامه را به خط مشخصی از برنامه منتقل نمود . برچسب ها می توانند عدد صحیح در محدوده 0 تا 9999 و یا یک شناسه باشد .

8 - اعداد : اعداد می توانند حقیقی یا صحیح ، مثبت یا منفی باشند . هرکدام به چند نوع تقسیم می شوند . باید توجه داشت که اعداد صحیح می توانند از نوع هگزادسیمال نیز باشند که در این صورت باید اولا با علامت $ شروع شوند و ثانیا طول آن نباید از هشت رقم هگزادسیمال بیشتر باشد بنابراین محدوده قابل قبول برای اعداد صحیح هگزادسیمال از 00000000$ تا FFFFFFFF$ است و در ضمن نباید شامل علامت + یا – باشند .

9 - ثابت های رشته ای ( string constants ) : ثابت رشته ای ، عبارت از تعدادی کاراکتر است که درون دو علامت آپوستروف ( ' ) قرار می گیرند . استفاده از کاراکترهای کنترلی ( کاراکترهایی که دارای کد ASCII تا 30 می باشند ) در یک ثابت رشته ای مجاز است اما استفاده از کاراکترهای آپوستروف ( ' ) و carriage Return ( <cr> ) غیرمجاز است .

همچنین در صورتی که از علامت # به همراه یک عدد مثبت بین 0 تا 255 استفاده شود باعث جایگزینی کاراکتر متناظر با عدد مربوط در جدول کدهای ASCII خواهد شد . کلمات رزرو شده ( Reserved words ) : به مجموعه ای از کاراکترها اطلاق می شود که برای پاسکال دارای معنای خاصی می باشند و هرگز نمی توان از آن ها به عنوان شناسه غیراستاندارد استفاده نمود .

ساختار کلی برنامه در زبان پاسکال

اجزای اصلی یک برنامه به زبان پاسکال عبارت اند از :

عنوان برنامه ( program Heading )
قسمت اطلاعات (Data section )
قسمت دستورالعمل ها ( code section )

1 - عنوان برنامه شامل دو قسمت زیر است
الف ) نام برنامه ( program Name )
ب ) فرمان های کامپایلر ( compiler Directives )
این قسمت که به عنوان اولین بخش از ساختمان یک برنامه در نظر گرفته می شود محل قرار گرفتن نام برنامه به همراه پارامترهای ورودی و خروجی و همچنین فرمان های کامپایلر که کنترل عمل کامپایل شدن برنامه را برعهده دارند می باشد . قسمت های الف و ب هر دو اختیاری بوده ، وجود آن ها باعث روشن شدن هر چه بیشتر وظیفه برنامه و شرایط ترجمه آن به زبان ماشین می باشد .

2 - قسمت اطلاعات ( Data section )
این قسمت خود شامل 4 قسمت دیگر می باشد که عبارت اند از :
الف ) اعلان ثابت ها Constant Declaration
ب ) اعلان انواع اطلاعات
ج ) اعلان متغیرها Variable Declatration
د ) اعلان برچسب ها Label Declatration

3 - در این قسمت دستورات به ترتیب اجرا مرحله به مرحله گنجانیده می شوند . این قطعه ، همواره شامل بلوک اصلی برنامه ( Main program Block ) بوده و می تواند در صورت لزوم شامل پروسیجرها و توابع نیز باشند . در بلوک اصلی برنامه که خود با کلمه رزرو شده begin شروع و با end ختم می گردد . دستورات عملیاتی مانند نسبت دادن مقادیر معلوم به متغیرها ، فراخوانی پروسیجرها و توابع اجرای حلقه های مختلف و غیره انجام می شود . این قسمت خود شامل سه قسمت دیگر می باشد که عبارت اند از :
الف ) پروسیجرها ( procedures )
ب ) توابع ( function )
ج ) بلوک اصلی برنامه

Borna66
05-25-2011, 09:24 PM
زبان برنامه نویسی پایتون :

آخرین نسخه پایدار : 3.1.2 و 2.6.5
سیستم عامل : چند سکویی
گونه : زبان برنامه نویسی
اجازه نامه : پروانه بنیاد نرم افزاری پایتون
وب گاه http://www.python.org (http://www.python.org/)


پیتون یا پایتون یک زبان برنامه نویسی همه منظوره، سطح بالا، شیءگرا و تفسیری است که توسط گیدو ون روسوم (Guido van Rossum) در سال ۱۹۹۱ طراحی شد.

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

پایتون مدل های مختلف برنامه نویسی (از جمله شیء گرا و برنامه نویسی دستوری و تابع محور) را پشتیبانی می کند و برای مشخص کردن نوع متغییر ها از یک سامانهٔ پویا استفاده می کند.

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

پایتون پروژه ای متن باز توسعه یافته است و توسط بنیاد نرم افزار پایتون مدیریت می گردد. نسخهٔ کنونی (مارس ۲۰۰۸) این زبان ۲.۶ است.همچنین نسخهٔ آزمایشی ۳.۰ نیز موجود است

تاریخچه

پایتون اواخر سال ۱۹۸۰ (میلادی) توسط گیدو ون روسوم در موسسه ملی تحقیقات ریاضی و رایانه ( CVVI ) در شهر هلند ایجاد شد. هدف گیدو ایجاد جانشینی برای زبان برنامه نویسی «ای بی سی» بود که با قابلیت پردازش استثنا را داشته باشد. گیدو طراح اصلی پایتون است و نقش مداوم او در تصمیم گیری پیرامون اهداف پایتون ، باعث شد که انجمن پایتون به او لقب دیکتاتور خیراندیش زندگی (به انگلیسی: Benevolent Dictator For Life) را بدهد.

نسخه های اولیه

در سال ۱۹۹۱ ون روسوم کدی با برچسب نسخهء۰.۹.۰ را منتشر کرد. البته در این مرحله از پیشرفت کلاس هایی با خاصیت ارث بری ، پردازش استثنا ، توابع و نوع داده list , dict , str وجود داشت. همچنین در این نسخه ابتدایی یک سیستم ماژول با اقتباس از ماژول-3 وجود داشت. که ون روسوم این ماژول را به عنوان «یکی از واحد های عمده برنامه نویسی پایتون» توصیف کرد. مدل استثناء پایتون نیز شباهت هایی به ماژول-3 داشت ، به علاوه شرط else . در سال ۱۹۹۴ اولین مجمع مباحثه پیرامون پایتون شکل گرفت که مرحله برجسته ای در پیشرفت کاربری پایتون بود.

نسخه ۱.۰

پایتون در ژانویه ۱۹۹۴ به ورژن ۱.۰ رسید. خصوصیات عمده جدید این نسخه شامل ابزار های برنامه نویسی تابعی lambda , map , , reduce بود. ورژن پایتون ۱.۲ در سال ۱۹۹۵ ، زمانیکه گیدو در CVVI بود ٬ بدست آمد. گیدو به فعالیت های خود روی پایتون در موسسه ملی تحقیقات و ابتکارات (CNRI) در رستون ادامه داد و در همانجا چندین نسخه جدید انتشار یافت. در نسخه ۱.۴ به پایتون چندین ویژگی جدید اضافه شد. از ویژگی های جالب توجه در میان این اضافات میتوان بهالهام گرفتن از آرگومان های کلیدی ماژول-3 (که خود از آرگومان های کلیدی لیسپ الهام گرفته بود) و همچنین پیشتیبانی اعداد مختلط اشاره کرد. در مدت فعالیت ون روسوم در CNRI ، او پروژه «برنامه نویسی کامپیوتر برای هر کس» (CP4E) را ایجاد کرد تا برنامه نویسی را در دسترس افراد بیشتری که اطلاعات پایه ای برای برنامه نویسی (برای مثال توانایی در زبان انگلیسی و مهارتهای اولیهء ریاضی) را دارند، قرار دهد. زبان برنامه نویسی پایتون به دلیل تمرکزش بر روی پاکسازی فرم دستوراتش، نقش مرکزی را ایفا کرد. این پروژه توسط دارپا سرمایه گذاری شد واز سال ۲۰۰۷ غیر فعال شد.

باز بودن

در سال ۲۰۰۰ تیم توسعه دهنده پایتون به BeOpen.com منتقل شد و بدین صورت تیم کتابخانه باز پایتون شکل گرفت. به پیشنهاد CNRI ورژن ۱.۶ساخته شد ، بدین ترتیب برنامه های تولید شده برای ۱.۶و ۲.۰اشتراک های قابل توجهی داشتند. فقط پایتون ۲.۰ توسط BeOpen.com طراحی شده بود. بعد از تولید پایتون ۲.۰ توسط BeOpen.com ، گیدو و دیگر توسعه دهندگان کتابخانه پایتون به ایجاد دیجیتال روی آوردند. تولید پایتون ۱.۶ شامل جواز جدید CNRI بود که به طور قابل توجهی طولانی تر از جواز CWI ( که برای تولیدات قبلی استفاده شده بود) بود. موسسه مستقل از نرم افزار توضیح داد که انتخاب شرط قانون با GNU GPL ناسازگار بود., BeOpen CNRI و FSF تغییراتی را در جواز پایتون مستقل از نرم افزار ایجاد کردند که با GPL سازگار باشد. پایتون ۱.۶.۱ عمدتاً مشابه پایتون ۱.۶ است فقط با کمی اشکال ، و با جواز سازگار با GPL .

نسخه ۲.۰

پایتون ۲.۰ لیستی از ویژگی هایی را که از زبان های برنامه نویسی تابعی ستل و هاسکل اقتباس شده بود ، معرفی کرد. نحو پایتون برای این ساختار ( جدا از برتری هاسکل برای کاراکتر های نقطه گذاری و کلمات الفبا ) بسیار مشابه هاسکل بود. پایتون ۲.۰ همچنین یک سیستم بازیافت حافظه با قابلیت جمع آوری منابع معرفی کرد. پایتون ۲.۱ به پایتون ۱.۶.۱ و ۲.۰ نزدیک بود. جواز آن به جواز مؤسسه نرم افزار پایتون تغییر نام یافت. همه کد ها ، اسناد و مشخصات اضافه شده را از زمان تولید الفبای پایتون ۲.۱ توسط مؤسسه نرم افزار پایتون ( PFS ) دارا شد. یک سازمان غیر انتفاعی در سال ۲۰۰۱ تشکیل شد که از مؤسسه نرم افزار آپاچی مدل گرفته بود. تولیدات شامل تغییراتی در خصوصیات زبان در پوشش حوزه های تو در تو بود ، مشابه دیگر زبان های حوزه ای ایستا. ( این خصوصیات دوباره از بین رفتند و به پایتون 2.2 منتقل نشدند.) یک تغییر بزرگ در پایتون ۲.۲ یکسان سازی انواع داده ای پایتون و کلاس ها به یک سلسله مراتب بود. این یکسان سازی اشیاء پایتون را کاملاً شیء گرا کرد.

میراث جاوا


انتخاب نحو و ضمایم کتابخانه استاندارد پایتون شدیداً وابسته به بعضی موارد در جاوا بود : بسته logging در ورژن 2.3 ، تجزیه کننده SAX در ورژن 2.0 و ساختمان های نحو که در ورژن 2.4 اضافه شد.

توسعه خصوصیات

یک طرح افزایش ( PEP ) در پایتون یکنواخت کردن اسنادی است که اطلاعات عمومی ای را که پایتون را شرح می دهند تولید می کنند ؛ شامل پیشنهادات ، توصیف ها و توضیح ها برای خصوصیات زبان . PEP در نظر داشت همانند روش های اولیه ، برای پیشنهاد خصوصیات جدید و نیز برای مستند سازی طرح های اساسی ، هر عامل بزرگ در پایتون را توضیح دهد. طرح های برجسته توسط van Rossum تجدید نظر شده و توضیح داده شدند.

پایتون 3000

پایتون 3.0 (که پایتون 3000 ویا Py3k نیز خوانده می شود) به منظور شکستن سازگاری عقبرو (backward compatibility) یا به عبارتی قطع سازگاری با گذشته پایتون 2 و بهبود خطاها و رخنه ها در نسخه ی 2 و همچنین حذف روشهای قدیمی طراحی شد. به عبارتی دیگر لازم نیست که پایتون 3 بتواند کدی که با پایتون 2 نوشته شده را تفسیر کند که البته این مشکل توسط نرم افزار 2to3 حل می شود.
[ویرایش] فلسفه

پایتون 3.0 با همان فلسفه ورژن های قبل ، در حال توسعه یافتن است ، بنابراین هر منبعی در فلسفه پایتون ، در پایتون 3.0 به خوبی ظاهر خواهد شد. اگر چه ، همانطور که پایتون روش های جدید در برنامه ریزی را جمع آوری کرده ، پایتون 3.0 تأکید زیادی بر از بین بردن ساختار ها و ماژول های تکراری دارد: " باید یک – و ترجیحاًً فقط یک – روش بدیهی برای انجام آن وجود داشته باشد." با این وجود پایتون 3.0 به ساختار زبان چند نمونه ای ادامه خواهد داد. کد نویس ها همچنان اختیارات شیء گرایی ، برنامه نویسی ساخت یافته ، برنامه نویسی تابعی و دیگر نمونه ها را دارند ، اما در انتخاب های وسیع ، جزئیات در پایتون 3.0 آشکار تر از پایتون سری 2.x هستند.

سازگاری و همزمانی

اولین کاندید پایتون 3.0 در 17سپتامبر ۲۰۰۸منتشر شد. پایتون سری 2.x و 3.x به طور موازی با هم وجود خواهند داشت ، جایی که سری 2.x سازگاری بیشتری دارد ، به جای سری 3.x مورد استفاده قرار خواهد گرفت. PEP 3000 اطلاعات بیشتری را در مورد فهرست نشریات دارا ست. پایتون 3.0 سازگاری قبل را نقض خواهد کرد. الزامی ندارد که کد هایی که با پایتون 2.x اجرا می شوند ، برای پایتون 3.0 بدون تغییر اجرا شوند. چون تغییرات اساسی بین این دو ورژن وجود دارد مثل اختلاف در حالت پرینت ( بنابراین هر استفاده از پرینت به عنوان توضیح باعث شکست برنامه می شود.) نوع پویای پایتون با طرح های تغییر معنای روش های خاص دیکشنری ترکیب می شود ، به عنوان مثال ، انتقال مکانیکی بی نقص از پایتون 2.x به پایتون 3.0 را بسیار دشوار می کند. اگرچه ابزاری به نام " 2to3 " بسیاری از این وظایف انتقال را انجام می دهد ، اما باید توجه داشت که استفاده از توضیحات یا اخطار ها با ابهام همراه است. البته در یک مرحله از الفبا ، 2to3 انتقال را حقیقتاً کامل انجام می دهد. PEP 3000 پیشنهاد می کند که یک منبع نگه داشته شود (برای سری 2.x) ، و نسخه ای بر مبنای پایتون 3.0 با استفاده از 2to3 تولید شود. کد های نتیجه شده نباید تصحیح شوند ، مگر اینکه کدی طولانی تر از محدوده سری 2.x باشد. پایتون 2.6 شامل خصوصیات سازگاری مستقیم است ، به طوریکه یک روش اخطار ( warning ) به صورت خودکار به مسائل انتقال هشدار می دهد. هشدار ها باید برای تشخیص خطا گزارش داده شوند ، مشابه خصوصیات ورژن های قبلی پایتون. ( برای اطلاعات بیشتر به PEP 361 رجوع کنید. )

خصوصیات

فهرست برخی از تغییرات عمده پایتون 3.0 :

تغییر پرینت چون یک تابع غیر قابل انتقال است نه یک توضیح. این باعث می شود که تغییر یک ماژول برای استفاده از یک تابع پرینت متفاوت ، آسان باشد و بنابراین ایجاد نحو منظم تر می شود. در پایتون 2.6 این امکان با تایپ کردن from – future – import print – function فراهم شد.

اضافه شدن حمایت از یادآوری تابع انتخابی که می تواند برای معرفی تایپ خصوصی یا اهداف دیگر استفاده شود.

یکسان کردن تایپ str/Unicode ، به نمایندگی از یک متن ، و معرفی یک تایپ byte تغییر ناپذیر ؛ با یک تایپ مطابق با bytearray تغییر پذیر ، که هر دو آرایه از بایت را ارائه می کنند.

از بین بردن خصوصیات سازگاری معکوس ، شامل کلاس های به فرم قبل ، قسمت کردن اعداد صحیح ، استثناء های رشته ای ، و گزارش های نسبتاً نا آشکار.

کاربرد

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

جاسازی

پایتون با موفقیت در تعدادی از تولیدات نرم افزاری مثل زبان فایل آغاز گر تعبیه شده است.پایتون معمولاً در بسته های انیمیشن 3D استفاده می شود ، مانند Houdini , Maya , Softimage XSI , TrueSpace , Poser , Modo , Nuke , Blender . GIMP , Krita , Inkcape , Scribus , Paint Shop Pro ESRI هم اکنون در حال ترقی دادن پایتون به عنوان بهترین انتخاب برای نوشتن فایل آغازگر در ArcGIS است. همچنین در بازی ها استفاده می شود ، مانند Civilization IV و Mount&Blade به عنوان زبان کنترل برای نمایش و عکس العمل حوادث.

Borna66
05-25-2011, 09:26 PM
مقبولیت

در بسیاری از سیستم های عملیاتی ، پایتون یک جزء استاندارد است ؛ چون با بیشتر بخش های لینوکس انتقال داده می شود، با NetBSD و OpenBSD وRed Hat Linux .Mac OS X و Fedora هر دو از نصب کنده پایتونی استفاده می کنند. لینوکس Gentoo از پایتون در سیستم مدیریت بسته ، حمل و ابزار های دستیابی خود استفاده می کند. Pardus از آن برای مدیریت و در طول راه اندازی سیستم استفاده می کند.

صرف و نحو

پایتون در نظر دارد که زبانی بسیار قابل خواندن باشد. بنابراین به سمت یک طرح بندی ویژوال بدون پارازیت می رود ، و اغلب از کلمات کلیدی انگلیسی استفاده می کند ، در صورتیکه دیگر زبان ها از نقطه گذاری استفاده می کنند. پایتون نسبت به زبان های ساخت یافته سنتی ، مثل C و پاسکال ، نیاز به تکیه کلام های کمتر و همچنین استثناء های نحوی و موارد خاص کمتری دارد.

ایجاد فضای خالی

پایتون از فضاهای خالی بیشتر از آکولاد یا کلمات کلیدی برای تعیین بلوک های حالت استفاده می کند ( ویژگی ای که به نام قانون off-side نیز شناخته می شود.)
[ویرایش] شرط ها و روند کنترل

شرط های پایتون شامل:

شرط if ، که یک بلوک کد ، تا else و elif را اجرا می کند. (یک اختصار از else-if )

شرط for ، که روی یک شیء تکرار شدنی تکرار می شود ، به هر متغیر محلی مقدار داده می شود برای استفاده توسط بلوک مربوطه.

شرط class ، که یک بلوک کد را اجرا می کند و فضاهای محلی آن را به یک کلاس ملحق می کند ، برای استفاده در برنامه نویسی شیء گرا.

شرط def ، که یک تابع را تعریف می کند.

شرط with ، که یک بلوک کد را به یک مدیر متن ضمیمه می کند. ( به عنوان مثال ، اندوختن یک قفل قبل از اجرای بلوک کد و آزاد کردن قفل بعد از اجرا.)

هر شرطی برای خود قواعد معنایی خاصی دارد: به عنوان مثال ، شرط def ، بر خلاف دیگر شرط ها بلوک خود را فوراً اجرا نمی کند.

سی پایتون استمرار را پشتیبانی نمی کند ، و مطابق نظر Guido van Rossum هرگز نخواهد کرد. در ورژن های قبلی مولد تکرار کند بود چون اطلاعات تنها در یک جهت از مولد عبور می کردند.

روش ها

روش ها در اشیاء پایتون ، ملحق کردن توابع به اشیاء کلاس است ؛ با نحو (instance.method(argument برای روش ها و توابع نرمال ،و(Class.method (instance,argument . روش های پایتون ، یک پارامتر self آشکار برای دستیابی به داده های instance دارند ، در برابر پارامتر self غیر آشکار در برخی زبان های برنامه نویسی شیء گرا ( مانند جاوا ، C++ ، یا روبی )

نوع دهی

پایتون از اشیاء تایپ شده و در مقابل نام متغیر های غیر تایپ استفاده می کند. محدودیت تایپ در زمان کامپایل چک نمی شود ؛ بنابراین عمل گر های روی یک شیء ممکن است شکست بخورند ، به این مفهوم که شیء داده شده از یک تایپ مناسب نیست. با اینکه اجباری در تایپ دهی ایستا نیست ، پایتون شدیداً تایپ دهی شده ، و عمل گر های نامناسب را نهی می کند. ( مثل مقدار دهی یک رشته با یک عدد )

str
یک رشته غیر قابل تغییر از کاراکتر ها

کد:
'Wikipedia' "Wikipedia"
listtuple
تغییر پذیر ، می تواند تایپ های مختلف را دارا باشد.
کد:
[4.0, 'string', True]
list
تغییر ناپذیر ، می تواند تایپ های مختلف را دارا باشد.
کد:

(4.0, 'string', True)set, frozenset
نامرتب ، هیچ نسخه دومی را دارا نیست.
کد:

set([4.0, 'string', True]) {4.0, 'string', True} frozenset([4.0, 'string', True])dict
گروهی از کلید ها با جفت عددی
کد:

{'key1': 1.0, 'key2': False}int
یک عدد با دقت ثابت

(وقتی ذخیره کردن یک عدد صحیح سر ریز داشته باشد ، به یک دقت نامحدود Long بسط خواهد یافت.)

کد:

42float
یک عدد حقیقی
کد:
3.1415927
complex
یک عدد مختلط با عدد حقیقی و قسمت موهومی
کد:

3+2jbool
عدد درستی
کد:
True False
پایتون همچنین به برنامه نویس ها اجازه می دهد که تایپ دلخواه خود را تعریف کنند. این کار با استفاده از کلاس ها امکان پذیر است ، و اغلب برای شیء گرایی در برنامه نویسی استفاده می شود. نمونه های جدید از کلاس ها با صدا زدن کلاس ساخته می شوند ، و کلاس ها خودشان نمونه هایی از کلاس type هستند ( خودش یک نمونه از خودش است).

پیاده سازی

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

پایتون بدون پشته ، انشعابی از سی پایتون است که ریز برنامه ها را اجرا می کند ؛ و از پشته حافظه استفاده نمی کند. سی پایتون از GIL استفاده می کند تا وقتی برنامه پایتون بدون پشته ، وابسته به OS است و می تواند به صورت همزمان اجرا شود ، در هر لحظه فقط به یک زیر برنامه اجازه اجرا داده شود. پایتون برای استفاده در میکرو کنترلر ها یا وظایف محدود دیگر پایگاه های مرجع ، متناسب تر است. پیش بینی می شود که پایتون بدون پشته بتواند تقریباً روی همان پایگاهی که سی پایتون اجرا می شود ، اجرا شود.

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

پای پای یک پیاده سازی تجربی از پایتون است که می تواند چندین تایپ از کد بایت را تولید نماید.

چندین برنامه در بسته مفسر پایتون با برنامه های کاربردی ( یا آغازگر ) وجود دارد که مستقلاً اجرا می شوند مانند یونیکس ، لینوکس ، ویندوز ، AmigaOS 4 یا Mac OS X . بسیاری از کتابخانه های سه قسمتی (و حتی بعضی از یک قسمتی ها) فقط روی ویندوز ، لینوکس ، BSD و Mac OS X موجود هستند.

در نوکیا 2005 یک مفسر پایتون برای موبایل های سری 60 با نام PyS60 تولید شد که شامل بسیاری از ماژول ها از سی پایتون بود ، و همچنین برخی ماژول های اضافه شده برای یکپارچه شدن با سیستم عامل. این پروژه به منظور اجرا روی همه پایگاه های مختلف S60 ، به روز نگاه داشته می شود.

همچنین مفسری به نام پایتون سی ای برای ابزار ویندوز CE ( شامل بسته PC ) وجود دارد. که در آن ابزار هایی برای اجرای آسان و توسعه GUI اضافه شده است. اطلاعات بیشتر را می توانید روی وب گاه PythonCE بیابید.

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

تفسیر معنایی

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

برنامه های واسط دیگر ، امکانات تحت آن را در مفسر بیسیک افزایش می دهند ، شامل IDLE و I Python . وقتی عموماً از برنامه واسط پایتون پیروی می شود ، خصوصیاتی مشابه تکمیل خودکار ، نگه داشتن زمان اجرای برنامه ، و نشان دادن صرف پیاده سازی می شود.

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

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

کتابخانه استاندارد

پایتون یک کتابخانه استاندارد بزرگ دارد ، که از آن به عنوان یکی از بزرگ ترین توانایی های پایتون یاد می شود ، مشروط به اینکه ابزار های از پیش نوشته شده ، با بسیاری از وظایف سازگار باشد. ماژول های کتابخانه استاندارد می توانند به شیوه ماژول های نوشته شده در سی یا پایتون آرگومان دهی شوند. اخیراً کتابخانه های C++ به یک کتابخانه به نام Boost.Python رشد یافته است ، برای ایجاد قابلیت همکاری بین C++ و پایتون. به دلیل تنوع گسترده در ابزار های تولید شده توسط کتابخانه استاندارد ، این کتابخانه با توانایی استفاده یک زبان سطح پایین ترکیب شده ، مثل C و C++ ، که البته به عنوان واسط بین کتابخانه های دیگر است ، پایتون می تواند یک واسط قوی بین زبان ها و ابزار ها باشد.

واژه تراشی

یک واژه تراشی رایج در انجمن پایتون ، در pythonic است ، که می تواند محدوده وسیع معنایی وابسته به استیل برنامه داشته باشد. در مقابل یک کد unpythonic تلاش می کند تا یک کد ++C را در پایتون بنویسد.

برنامه های نوشته شده با پایتون :

بیتتورنت (BitTorrent): نرم افزاری برای جستجوی فایل های به اشتراک گذاشته شده(p۲p) و ...

بلندر ( Blender): یک نرم افزار ۳ بعدی و اپن سورس بسیار معروف

چندلر (Chandler): مدیر اطلاعات شخصی شامل تقویم ، میل ، کارهای روزلنه ، یادداشت ها و ...

Civilization IV: یک گیم کامپیوتری بر مبنای پایتون که از boost.python استفاده می کند

میلمن (Mailman): یکی از معروفترین نرم افزارهای مرتبط با ایمیل

کمبیلوKombilo: مدیر پایگاه داده و مرورگرگیم های go

موین موین (MoinMoin): یکی از قدرتمندترین و معروفتریم ویکی های موجود

پلون (Plone): یک ابزار مدیریتی محتوایی اپن سورس ، قدرتمند و کاربر پسند

پورتاژ (Portage): قلب توزیع جنتو . یک مدیر بستهای سیستم لینوکس

زوپ (zope): یک پلاتفورم شی گرای مبتنی بر وب . زوپ شامل یک سرور نرم افزار به همراه پایگاه داده شی گرا و یک رابط مدیریتی درونی مبتنی بر وب می باشد

اس پی ای (SPE): یک IDE رایگان، اپن سورس برای سیستم عامل های ویندوز، لینوکس، مک که از wxGlade(طراحی رابط کاربر),PyChecker (دکتر کد) (Blender(۳D پشتیبانی می کند.

یام (Yum): یک برنامه مدیریت بسته متن باز برای توزیع های سازگار با آرپی ام.

Borna66
05-25-2011, 09:27 PM
زبان برنامه نویسی پرل :

زبان برنامه نویسی پرل در سال ۱۹۸۷ توسط لری وال ساخته شد. پرل از قابلیت های زبان برنامه نویسی سی، دست نوشته شل، أک، لیسپ و دیگر زبان های دیگر وام گرفته است.

پیشینه

پرل در سال ۱۹۸۷ توسط لری وال منتشر شد. زبان پرل بطور وسیعی ساختار خود را از زبان C و بسیاری از خصوصیات خود را مدیون زبانهای AWK , LISP , SED , SH می باشد. در حال حاضر می توان پرل را در بیش از ۴۰ سیستم عامل بکار گرفت، و کتابخانه CPAN بیش از ۱۱۰۰۰ ماژول را با کد منبع در اختیارتان می گذارد. در سال ۱۹۸۸ لری وال زبان برنامه نویسی به همگان معرفی کرد که می توانست به جای awk و sed به کار رود.در واقع پرل زبان مفسر داری است که برای کار بر روی فایل های متنی مناسب است. نسخه شماره ۲ برنامه در همان سال و چند ماه بعد از آن ارایه شد که شبیه نسخه های فعلی پرل بود.و پیشرفت های بسیار خوبی داشت...تا جاییکه زبان پرل را برابر با زبان قدرتمند C می دانستند.و بیراه هم نبود چون ساختار زبان پرل شبیه زبان C می باشد.

قابلیت ها

یکی از کاربردهای مهم زبان برنامه نویسی PERL در نوشتن اکسپلوییت ها و کدهای تخریب است. این زبان برنامه نویسی پیشینه ای قدیمی در UNIX دارد. اما عمر آن در ویندوز به ۷ سال هم نمی رسید. به طوری که زبان پرل را زبانی جدا نشدنی از Unix میدانند و به همین دلیل است که در LINUX هایی مثل red hat , … نیز که اساس آنها UNIX است نیز این زبان برنامه نویسی هنوز که هنوز است در آنها جایگاه خاصی دارد.

کاربرد پرل

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

پرل به عنوان یک زبان چسبنده (Glue Language)

پرل به عنوان یک زبان چسبنده می تواند در زبان های دیگر مورد استفاده قرار گیرد. به طور مثال می توانید در برنامه های.NET از پرل برای پردازش متن و یا هر چیز دیگری استفاده کنید. این قابلیت تنها به.NET محدود نمی شود و پرل را می توان در زبان های دیگر برنامه نویسی بدون در نظر گرفتن پلتفرم ان استفاده کرد.

پرل به عنوان یک زبان (Cross Platform)

جالب است بدانید نرم افزاری که شما تحت سیستم عامل LINUX و یا MAC نوشته اید روی سیستم عامل WINDOWS و UNIX هم اجرا می شود. قابلیت (Cross Platform) به شما امکان توسعه نرم افزارتان را بر روی هر سیستم عاملی فراهم می کند.

پرل و CGI

با پا به عرصه گذاشتن CGI به صفحات وب زبان پرل به خاطر قدرت بالا در پردازش متن و تطبیق الگو (Regular Expressions)، در جمله زبانهایی قرار گرفت که بطور وسیعی برای نوشتن CGI بکار گرفته می شود.

پرل و شبکه

به خاطر قدرت بسیار پرل درزمینه برنامه نویسی سیستم های شبکه بسیاری از متخصصین شبکه و هکرها از این قافله عقب نمانده و امروزه شاهد این هستیم که بسیاری از برنامه های مدیریت شبکه، سیستم های Spidering و Exploit ها به زبان پرل نوشته می شود.

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

نمونه برنامه :

کد:

#!/usr/bin/perl print «Hello, world!\n»;

Borna66
05-25-2011, 09:28 PM
زبان برنامه نویسی پی اچ پی PHP

آخرین نسخه پایدار : 5.2.9
سیستم عامل : لینوکس، مایکروسافت ویندوز، مک اواس
گونه : زبان برنامه نویسی
اجازه نامه : اجازه نامه پی اچ پی
وب گاه : www.php.net (http://www.php.net/)

پی اچ پی (PHP) یکی از پر طرفدارترین زبان های پردازه نویسی (اسکریپتینگ) متن باز (Open Source) است که بیشتر برای طراحی برنامه های سمت سرور در وب گاه های پویا (Dynamic) مورد استفاده قرار می گیرد. PHP مخفف PHP: Hypertext Preprocessor (پیش پردازنده فرامتن) می باشد. پی اچ پی در سال ۱۹۹۴ ایجاد شد. رسموس لردورف (Rasmus Lerdorf) ایجاد کننده اولیه آن بوده است ولی در طی زمان این زبان برنامه سازی، توسط سایر کارشناسان و برنامه نویسان تکمیل گردیده و به شکل کنونی آن درآمده است.

پی اچ پی از زبان های پردازه نویسی تحت وب است. ساختار این زبان بسیار شبیه زبان سی (C) و زبان برنامه نویسی پرل (Perl) می باشد. شکل پذیری فوق العاده آن و نیز همگونی با اغلب بانک های اطلاعاتی از قبیل MySql قدرت آن را افزایش داده است.

مشهورترین نرم افزارهای(بسته های) ایجاد شده با پی اچ پی عبارت اند از phpBB ، SMF ، Mambo ، Joomla ، PHPNuke ، mybb و مدیاویکی (MediaWiki) (که این وب گاه با آن طراحی شده). پی اچ پی می تواند جایگزینی برای زبان های ASP.NET و JSP و Perl باشد. همچنین یکی از بهترین نمونه های برنامه نویسی php در سطح وسیع سایت فیس بوک است.

سادگی استفاده از پی اچ پی و شباهت آن به زبان سی و پرل (و از نسخه ۵ آن به جاوا) باعث شده که اغلب برنامه نویسان با تجربه در کوتاه ترین زمان ممکن برنامه های کاملی را ایجاد کنند.

پی اچ پی تنها یک زبان پردازه نویسی نیست و با استفاده از PHP-GTK می توان برای طراحی برنامه های با ظاهر گرافیکی (GUI) و همچنین طراحی برنامه های خط فرمان شبیه پرل یا پایتون (Python) از آن استفاده کرد.

پی اچ پی امکان استفاده از انواع مختلفی از پایگاه های داده را از جمله MySQL، اوراکل، IBM DB۲ ،Microsoft SQL Server ،PostgreSQL و SQLite با دستورهایی ساده فراهم می سازد.

پی اچ پی روی بیشتر سیستم عامل های معروف از جمله لینوکس، یونیکس، ویندوز و Mac OSX و با اغلب کارگزارهای وب (Web Server) معروف، قابل اجراست.

پیشینه

پی اچ پی در آغاز جایگاه شخصی داشت.در ابتدای سال ۱۹۹۴ عموما ماند زبان برنامه نویسی سی به صورت باینری توسط برنامه نویسان دانمارکی/گرینلندی به نام رسموس لردورف نوشته شد.لردروف در اصل این ابزار را ایجاد کرد تا یک مجموعه کوچکی از پردازه (اسکریپت) را جایگزین کند.

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

قابلیت ساخت ساده و پویا برای کاربردهای وب .لردروف پی اچ پی رو در ۱۹۹۵ رها کرد تا کد آنرا بهبود ببخشد و اشکالات انرا برطرف کند.این واگذاری به نسخه دوم پی اچ پی منجر شد و هم اکنون استفاده می شود. پی اچ پی متشکل از شبیه سازی و دستکاری کردن متغیرها توانایی جاسازی HTML بود.ترکیب آن مانند پرل اما محدود تر ٬ساده تر و پایدار تر بود.

زیو سوراسکی و اندی گاتمنز دو توسعه دهنده در فناوری IIT اسرائیلی بودند که پارسر را در سال ۱۹۹۷ دوباره نوشتند و اساس پی اچ پی ۳ را تشکیل دادند با تغییر دادن نام زبان به پی اچ پی بازگشتی : پیش پردازنده مافوق متن. گروه توسعه یافته رسما پی اچ پی /اف آی ۲ را در نوامبر ۱۹۹۷ بعد از دو ماه تجربه و آزمایش منتشر کرد.

پس از آن آزمایش عمومی پی اچ پی ۳ آغاز شد و زبان رسمی در ژوئن ۱۹۹۸ تشکیل شد.سوراسکی و گاتمنز گروهی را برای باز نویسی پی اچ پی تشکیل دادند و ماشین Zend را در ۱۹۹۹ تولید کردند.آنها همچنین تکنولوژی آن را در اسرائیل تاسیس کردند. در۲۲ ماه مه۲۰۰۰ پی اچ پی ۴ که توسط ماشین Zend رو به کار آمده بود منتشر شد.در۱۳ ژوئیه ۲۰۰۴ پی اچ پی ۵ که توسط ماشین ۲Zend نیرو گرفته بود منتشر شد.

پی اچ پی ۵ دارای ویژگی هایی مانند پشتیبانی از زبان شی گرا (برای پایگاه داده) و وسعت بسیار زیاد کارایی آن بود. پی اچ پی ای که اخیرا توسط گروه پی اچ پی منتشر شده نسخه ۴ ان است. در آگوست ۲۰۰۸ این نسخه به ۴٫۴.۹ توسعه یافت. در سال ۲۰۰۸ پی اچ پی ۵ تنه نسخه استوا و ثابت در دست توسعه بود .پی اچ پی ۶ در کنار پی اچ پی ۵ در دست توسعه است. تغییرات عمده آن شامل از بین بردن متغیرهای رجیستری است. پی اچ پی کاملا از یونیکد یا رشته های چند بایتی حمایت نکرد.یونیکد در پی اچ پی ۶ پشتیبانی خواهد شد. این نسخه در هر دو محیط ۳۲ و ۶۴ بیتی اجرا خواهد شد.

پیشینه انتشار

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


کاربرد

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

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

میزان بهینه سازی

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

چون یک مرحله اضافه به زمان اجرا می افزاید. ساختار الگوگونه PHP می تواند قبل از زمان اجرا توسط مترجم هایی درست شبیه زبانهای برنامه نویسی همچون C ترجمه شود.( زبان برنامه سازی PHP برنامه دار است تا جائیکه برای تمدید کردن آن استفاده شود.) کد می تواند کیفیت کد کامپایل شده را با کم کردن اندازه آن و ایجاد کردن تغییراتی که بتواند زمان اجرا را کاهش دهد و کارایی را بهبود ببخشد بالا ببرد و بهینه نماید.

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

ایمنی: میزان ناامنی نرم افزار نوشتاری PHP که توسط نرم افزار های رایج دیگر در معرض آسیب پذیری است به این صورت می باشد: ۱۲ درصد در سال۲۰۰۳ ۲۰ در صد در سال ۲۰۰۴ ۲۸ در صد در سال ۲۰۰۵ ۴۳ در صد در سال ۲۰۰۶ ۳۶ در صد در سال۲۰۰۷ و ۳۳ در صد در بخشی از سال ۲۰۰۸ بیشتر از یک سوم آسیب پذیری نرم افزار PHP به تازگی صورت گرفته .اغلب آسیب ها با پیروی نکردن از قوانین برنامه نویسی ایجاد می شود و این آسیب ها مرتبط با نسخه قدیمی PHP است. یکی از مهمترین این نا امنی ها متغیر های رجیستری هستند که از سال ۲۰۰۲در PHP نسخه ۴٫۲ بدون استفاده شده اند.

ترکیب

یک برنامهٔ PHP می تواند قسمتی از یک برنامهٔ HTML باشد.PHP کد را بدون تعیین حدود کردن تجزیه می کند.هر چیزی خارج از این محدوده به طور مستقیم به خروجی فرستاده می شود و توسط PHP تعیین نمی شوند.حدود رایج و مشترک <? و php?> است که به ترتیب بسته کردن و باز کردن می باشد.

علائم کوتاه می تواند برای شروع کد به کار روند: =?> یا ?> و علامتی که برای پایان کد به کار می رود:<? این علائم به طور رایج استفاده می شود.اما علائمی مانند <% و =% > یا %> کمتر مورد استفاده قرا می گیرند. به همین خاطر استفاده ازعلائم کوتاه و ASP کم شده است. هدف از این ها جدا کردن PHP و HTML می باشد. متغیر هایی که قبل از آن ها علامت $ به کار می رود لازم نیست مشخص شوند .

بر خلاف نامها و توابع کلاس نام متغیر ها به کوچک و بزرگ بودن حروف حساس است.PHP در حالت زبان form free با خط جدید و فاصله سرو کار دارد( به جز در رشته ها) و جمله ها با سمی کالن تمام می شوند.PHP دارای سه نوع روش برای توضیحات می باشد.از/ / و // برای توضیحات استفاده می شود.همچنین از # برای توضیحات کوتاه استفاده می شود. PHP در واژگان مانند زبانهای سطح بالا همچون C است.if شرطی- حلقه های while و for و توابع بازگشتی شبیه به زبان C و ++C است.

Borna66
05-25-2011, 09:29 PM
شیوه کار برنامه

یک برنامهٔ پی اچ پی می تواند قسمتی از یک برنامهٔ اچ تی ام ال (HTML) باشد. مثلاً در برنامهٔ زیر تنها

کد PHP:

<?php echo"Hello world!" ?>

به زبان پی اچ پی است و بقیهٔ برنامه به زبان HTML نوشته شده است. برای جداسازی برنامهٔ پی اچ پی و برنامهٔ اچ تی ام ال باید قسمت پی اچ پی را بین php?> و <? قرار داد. لازم به ذکر است که بجای تگ آغاز که همانا php?> است، می توان از حالت خلاصه شده آن که به صورت ?> است استفاده نمود، منتها این کار استاندارد نبوده و بستگی به تنظیمات هنگام نصب php دارد. بنابر این توصیه می شود که از همان حالت کامل استفاده شود.




<code>
<pre>
<html>
<head>
<title>Nomoone</title>
</head>
<body>
<?php echo "Hello world!"; ?>
</body>
</html>
</pre>
</code>
با صدا زدن صفحه ای با متن بالا از سرور به وسیله مرورگر در صفحه "Salam PHP" را می بینیم.

نوع داده

PHP همه متغیرها را در یک محدوده مستقل ذخیره می کند .این محدوده به طور نمونه ۳۲ بیت اعداد علامتدار است. اعداد بدون علامت در حالتهای معینی به مقادیر علامتدار تبدیل می شوند: این رفتار در زبانهای برنامه نویسی متفاوت است.متغیرهای صحیح می توانند به صورت دهدهی(مثبت یا منفی) ٬هشت هشتی و شانزده شانزدهی مشخص شوند.

اعداد واقعی نیز در محدوده معینی ذخیره می شوند.آنها می توانند به دو صورت اعشاری و علمی استفاده شوند.PHP دارای نوع محلی به نام بولین می باشد که شبیه به بولین در زبان جاوا و ++C است.در نوع داده بولین مقدار غیر صفر به عنوان درست و مقدار صفر به عنوان نادرست استفاده می شود.همانطور که در پرل و ++C نیز همین طور است.

نوع داده null برای متغیرهایی که هیچ مقداری ندارند استفاده می شود.متغیرهایی با نوع مرجع به منابع خارجی اشاره می کنند.اینها نوعا توسط توابع ایجاد می شوند و تنها می توانند با همان تابع مورد استفاده قرار گیرند.مانند پوشه ها و عکسها و پایگاه داده.PHP آرایه ها و رشته ها را هم حمایت می کند.
کتابخانه استانداردPHP(SPL) به منظور حل مسائل استاندارد و دسترسی به داده های موثر و کلاس ها به کار می رود.

۵٫۲ و قدیمی تر :

توابع بهترین توابع نیستند و تنها می توانند با نامشان صدا زده شوند.توابع تعریف شده توسط کاربر می توانند بیرون از نمونه اولیه ایجاد شوند.توابع می توانند در درون بلوک ها تعریف شوند.توابع فراخوانی شده باید از پرانتز استفاده کنند.به جز آرگومان zero توابع سازنده کلاس با اپراتور new فراخوانده می شوند.در اینجا پرانتزها اختیاری هستند. PHP توابع بی نام را که توسط دستور function_ creat ایجاد می شوند را هم پشتیبانی می کند.اگر چه درست نیستند چون توابع بی نام از اسم بر خوردار نیستند و توابع تنها میتئانند توسط نامشان صدا زده شوند. ۵٫۳ وجدیدتر:

PHP از توابع درجه اول و توابع بی نام حمایت می کند که توسط ساختار زیر پشتیبانی می شوند:

کد PHP:

function getAdder($x)
{
Return function ($y) use ($x) {
return $x + $y;
};
}

در اینجا تابع( )getAdder یک پارامتر x$ ایجاد می کند که آرگومان y$ اضافی را می گیرد و آنرا به صدا زننده بر می گرداند.

اشیا

برنامه نویسی شی گرا به 4PHP اضافه شد. اشیا در5 PHP به طور کامل دوباره نوشته می شود.در نسخه قبلی PHP اشیا مانند تایپ های اولیه به کار برده می شوند.اشکال این روش این بود که وقتی یک متغیر تعریف می شود تمام اشیا کپی می شوند.در روش جدید اشیا با handle بازگشت داده می شوند نه با مقدار.5PHP متغیر های عضو خصوصی و حفاظت شده تعریف می کند.همچنین یک روش استاندارد برای معرفی سازنده و مخرب همانند زبان برنامه سازی ++C تعریف می کند.

interfrace های خاصی وجود دارد که به اشیا اجازه می دهد بر روی زمان اجرا اثر بگذارد.اگر توسعه دهنده یک کپی از یک شی با استفاده از کلمه محفوظ clone ایجاد کند ماشین zendآنرا بررسی خواهد کرد که آیا روشی برای آن تعریف شده یا نه.اگر نشده بود یک clone پیش فرض را صدا خواهد زد که ویژگی های آن شی را کپی می کند.اگر تعریف شده بود برای ویژگی های لازم اشیا ایجاد شده معتبر است.برای سادگی ماشین تابعی را تولید می کند که مشخصات شی مرجع را وارد می کند که برنامه نویس می تواند با یک مقدار مشابه شی مرجع آغاز به کار کند و تنها ویژگی هایی را که نیاز دارد تغییر دهد.

روش نصب پی اچ پی

شما برای کار با پی اچ پی نیاز به یک سرور مجازی دارید که می توانید از IIS یا Apache استفاده کنید که ما آپاچی را توصیه می کنیم. همچنین به یک پایگاه داده نیاز دارید که برای این کار mysql بهترین گزینه است.

شما می توانید با نصب Wampserver به راحتی همه این گزینه ها را یکجا داشته باشید. Wampserver یک نرم افزار رایگان است که با نصب آپاچی، پی اپ پی، مای اسکیو ال و پی اچ پی مای ادمین شما را از نصب تک تک این برنامه ها آسوده می کند. Wampserver را می توانید از اینجا (http://www.wampserver.com/en/download.php) دانلود کنید.

آسانی

به گفته بیشتر برنامه نویسان وب، پی اچ پی یک زبان تحت وب ساده به شمار می رود، زیرا نیاز به یادگیری هیچ پیش نیازی نیست، همچنین پی اچ پی، به زبان های دیگری وابسته نیست.اغلب دستورات آن مشابه زبانهای محاوره ای بوده و یادگیری آن ساده است. از ساختارهای دستوری پیچیده اثری در HTML دیده نمی شود.

Borna66
05-25-2011, 09:31 PM
زبان Tcl (مخفف Tool Control Language - زبان کنترل ابزار) :

زبان Tcl (مخفف Tool Control Language - زبان کنترل ابزار) حاصل تحقیقات John Ousterhout روی ابزارهای رایانه­ ای طراحی مدارهای الکتریکی در دانشگاه برکلی است.

در این تحقیقات، Ousterhout و دانشجویانش مجبور بودند برای هریک از این ابزارها یک زبان کنترل جداگانه طراحی کنند، اما به دلیل توجه بیشتر به خود ابزار (و نه زبان)، ابزارها عموما دارای زبان­های کنترل ضعیفی بودند.

در پاییز سال ۱۹۸۷، در آزمایشگاه شرکت DEC، این ایده به ذهن Ousterhout رسید که یک زبان فرمان قابل جاسازی(Emdeddable Command Language) طراحی کند. یک زبان مفسری (Interpreted) خوب که بتواند به عنوان یک بسته کتابخانه ای در برنامه ­های گوناگون استفاده شود. هدف این بود که مفسر زبان مجموعه ای از امکانات اولیه را (مانند متغیرها و ساختارهای کنترلی) فراهم آورد و هر یک از ابزارهای استفاده کننده از آن بتوانند ویژگی­های مورد نظر خود را به آن اضافه کنند.

Ousterhout در سال ۱۹۸۸ پس از بازگشت از آزمایشگاه DEC، کار بر روی Tcl را شروع کرد و نخستین نسخه آن را در یک متن پرداز (Text Editor) گرافیکی به کار گرفت. در ابتدا این کار فقط جنبه تحقیقاتی داشت و Ousterhout گمان نمی­کرد دیگران هم به استقاده از آن علاقه مند باشند.

فلسفه زبان

نیاز به امکان جاسازی (Embeddability) قابلیت ویژه زبان Tcl است و به گفته Ousterhout باعث می­شود که اهداف زیر برای زبان در نظر گرفته شود:

۱.زبان باید گسترش پذیر(extensible) باشد: افزودن امکانات جدید به زبان توسط سایر افراد باید به آسانی امکان پذیر باشد و امکانات اضافه شده باید چنان باشند که انگار جزئی از خود زبان هستند(طبیعی باشند، نه این که با استفاده از اعمال پیچیده­ای به مقصود برسند).

۲.زبان باید ساده و عمومی باشد، تا بتواند به آسانی با برنامه­های گوناگون کار کند و امکاناتی را که این برنامه­ها می­توانند به زبان اضافه کنند محدود نکند.

۳.زبان باید امکانات خوبی برای ادغام داشته باشد، زیرا امکانات مهم­تر زبان آن­هایی است که توسط برنامه استفاده کننده به زبان افزوده شده است و کار اصلی زبان ادغام (integration) و پیوند دادن آن­ها با یکدیگر است.

نوآوری ها

مهم­ترین نوآوری­های Tcl عبارتند از قابلیت جاسازی و آسانی تولید واسط کاربر گرافیکی. با ایجاد قابلیت جاسازی، مشکل بسیاری از افرادی که نیاز به یک زبان دارند، اما نمی­خواهند یک زبان کامل را از ابتدا طراحی کنند حل شده است. به دلیل آسانی جاسازی Tcl در سایر برنامه­ ها، استفاده از آن در اوایل دهه ۹۰ به سرعت رشد کرد.

قابلیت دیگر Tcl، مجموعه ابزار Tk است که به عنوان گسترشی بر Tcl تولید شد و امکان ایجاد واسط کاربر گرافیکی با استفاده از ادغام مؤلفه(component)ها را به وسیله Tcl فراهم آورد. این قابلیت نیز به امکان استفاده از Tcl برای تولید برنامه­ های بزرگ­تر و با واسط کاربر مناسب افزود و در کسترش استفاده از آن سهم به سزایی داشت.

کاربردها

برخی از کاربردهای Tcl به شرح زیر است

کاربردهای وب : از آن­جا که Tcl یک زبان رشته-محور است برای برنامه­ های وبی مفید است. از نمونه برنامه­ های وبی استفاده کننده از Tcl می­توان به AOLserver و TclHttpd اشاره کرد. به علاوه کتابخانه­ های CGI برای Tcl موجود است که امکان استفاده از آن به عنوان یک زبان برنامه­ نویسی وب را فراهم می­کند.

برنامه­ های با واسط کاربر گرافیکی (GUI Desktop Applications): ابزار Tk برای ایجاد برنامه­ های گرافیکی بسیار قدرتمند است. به علاوه این ابزار چند-سکویی (multi-platform) است و بر روی [[لینوکس|Windows , [[Linux و Mac OS X قابل استفاده و اجراست.

آزمایش و خودکارسازی : Tcl خود دارای یک چارچوب تست به نام tcltest است. به علاوه شرکت­هایی مانند Oracle, Sybase و Cisco میلیون­ها خط کد Tcl برای تست محصولات خود دارند.

پایگاه­های داده: Tcl دارای گسترش­هایی برای کار با پایگاه­های داده گوناگون مانند MySQL, Sybase, PostgreSQL, Oracle و Berkeley DB می­باشد. هم­چنین بسته­های wrapper ای وجود دارند که یک واسط واحد برای چند نوع پایگاه داده فراهم می­کنند.

توسعه نهفته (Embedded Development) : استفاده از Tcl به علت قابلیت ادغام بالای آن، هم در محصولات سخت­افزاری مانند محصولات Cisco و هم در محصولات نرم­ افزاری مانند نرم­ افزارهای طراحی به کمک رایانه (CAD) و خودکارسازی طراحی الکترونیکی (EDA) رایج است. ابزار شبیه سازی Modelsim یکی از ابزارهایی است که با زبان Tcl کار می­کند.

علاوه بر کابردهای فوق، کاربردهای دیگر تحقیقاتی از Tcl نیز مشاهده شده است. به عنوان مثال در سیستم­های رباتیک از زبان Tcl استفاده شده است. هم­چنین این زبان در توسعه سریع نرم­ افزار (Rapid Application Development) نیز استفاده شده است

بررسی زبان شناختی(ساختار و نحو زبان)

برنامه­ های Tcl تشکیل شده­ اند از دستورهایی که با semicolon یا با رفتن به خط جدید (newline) از هم جدا شده­ اند. هر دستور از تعدادی کلمه تشکیل شده­ است که با فاصله از هم جدا شده اند. همهٔ دستورات Tcl مقدار برمی­گردانند. اگر برگرداندن مقدار برای دستوری معنا نداشته باشد، یک رشته­ ی تهی برمی­گرداند.

متغیرها

در Tcl نیازی به تعریف متغیر نیست. هر متغیری در اولین دفعه استفاده آن، تعریف می­شود. هم­چنین متغیرها در Tcl دارای نوع نیستند. هر متغیری می تواند هر مقداری بگیرد. البته می­توان با استفاده از دستور variable اقدام به تعریف متغیر در یک namespace کرد . با استفاده از دستور set می توان مقادیر را در متغیر ها ذخیره و از آنها بازیابی نمود. برای ذخیره :

کد:

set x ۳۲ </souce> برای خواندن مقدار : <source lang="tcl"> set x
برای استفاده از مقادیر یک متغیر از روش «جایگذاری متغیر» به شکل زیر استفاده می­شود:
کد:

expr $x+۳
این دستور مقدار x+۳ را برمی­گرداند. هنگامی که یک علامت دلار در عبارت ظاهر می­شود، Tcl حروف و اعداد پس از آن را به عنوان نام متغیر تعبیر می کند و مقدار آن متغیر را به جای نام آن می­گذارد

جایگذاری متغیر را می­توان برای همه کلمه­های یک دستور Tcl، مستقل از این که آن کلمه یک نام دستور و یا یک آرگومان است، به کار برد. مثلا عبارات زیر معادل عبارات قبلی است :
کد:

set a expr set x ۳۲ $a $x+۳
ساختارهای کنترلی

Tcl مجموعه کاملی از دستورات کنترلی شامل دستورات اجرای شرطی، دستورات حلقه و دستورات زیربرنامه­ ای را دارد. دستورهای کنترلی Tcl دستوراتی عادی هستند که به عنوان آرگومان، اسکریپت­های Tcl می­گیرند[۱].به عنوان مثال دستور proc که برای تعریف زیربرنامه به کار می­رود، سه آرگومان می­گیرد : نام زیربرنامه، لیست نام پارامترهای آن، و بدنه زیربرنامه که یک اسکریپت Tcl است:
کد:

proc power {base p} { set result 1 while {$p > ۰} { set result [expr $result $base] set p [expr $p - ۱] } return $result }
مشابها دستور while که در بالا مشاهده می­شود، یک دستور Tcl است که دو آرگومان می­گیرد : یک عبارت که همان عبارت شرط است و یک بدنه که یک اسکریپت Tcl است.

از این زیربرنامه می­توان به شکل زیر استفاده کرد :

کد:

power 2 6 power ۱٫۱۵ ۵

Borna66
05-25-2011, 09:34 PM
دستورها و عبارت ها

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

command arg1 arg2 arg۳ …...

دستورهای Tcl به سه دسته تقسیم می­شوند

۱.دستورهای توکار (built-in commands) : این دستورهای به وسیله مفسر Tcl فراهم می­شوند و در همه برنامه­ های Tcl قابل استفاده اند. دستورهای proc,while,set و return که در مثال­های بالا آمده اند نمونه­ هایی از این دستورات هستند.

۲.دستورهایی که به وسیله امکان گسترش (Extension mechanism) زبانTcl به آن اضافه می­شوند. می­توان به وسیله توابعی که کتابخانه Tcl فراهم می­کند، نام یک دستور و زیربرنامه اجرا کننده­ ی آن (به زبان C و ++C) را به مفسر Tcl اطلاع داد. پس از این کار هر کجا که آن نام در اسکریپت Tcl ظاهر شود، مفسر همان تابع معرفی شده (به زبان C) را برای اجرای دستور فراخوانی می­کند. دستورات توکار Tcl نیز به همین روش پیاده­ سازی شده­ اند.

۳.زیربرنامه­های تعریف شده به وسیله دستور proc: به طور کلی از extension برای پیاده­ سازی دستورهای سطح پایین و از proc برای پیاده­سازی دستورهای سطح بالا که نوشتن آن­ها به Tcl آسان­تر است استفاده می­شود.

چنانکه گفته شد عبارات در Tcl به وسیله اجرای دستور ارزیابی می­شوند. به عبارت دیگر مفسر Tcl خود عبارات را ارزیابی نمی­کند، بلکه تنها عمل دسته­ بندی آرگومان­ها، جایگذاری مقادیر و فراخوانی دستور را انجام می­دهد. به همین دلیل در Tcl از دستور expr برای ارزیابی عبارات ریاضی استفاده می­شود

دستور expr با آرگومان­های خود به شکل عبارت ریاضی برخورد می­کند.این دستور با عبارات ریاضی، شامل اعداد صحیح، اعشاری و مقادیر منطقی (boolean) سر و کار دارد. قواعد حاکم بر عبارات expr همان است که بر عبارات در زبانC حاکم است. به علاوه دستور expr برخی توابع اولیه ریاضی را نیز پشتیبانی می­کند. به عنوان مثال :

s کد:

et len [expr [string length foobar ] ]
که مقدار طول رشته foobar را (که برابر با۶ است) محاسبه می کند و :

کد:

set pi [expr {۲ asin(۱٫۰)}]
که مقدار عدد pi را محاسبه می­کند.

زبان Tcl مقادیر درون علامت نقل قول ( ” ” ) را ارزیابی و به جای عبارات درون آن مقادیر لازم را قرار می­دهد. به قراردادن یک عبارت در آکولاد ( { } ) می­توان از این کار جلوگیری کرد :

کد:

set name Ali ”My name is $name” {“My name is $name”}
دستور دوم مقدار My name is Ali را برمی گرداند در حالی که دستور سوم مقدار My name is $name را برمی­گرداند.

رشته ها

رشته­ ها واحد اساسی داده در Tcl هستند و به همین دلیل است که دستورات زیادی برای کار با آن­ها وجود دارد.

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

bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, totitle, toupper, trim, trimleft, trimright, wordend, wordstart
Tcl امکاناتی را برای کار با اندیس­ها در رشته­ها فراهم می­کند. کاراکترها در رشته از ۰ شمرده می­شوند. به عنوان مثال دستور زیر کاراکترهای سوم تا آخر رشته با نام name را برمی­گرداند. مثلا اگر name حاوی مقدار ahmadi باشد:

کد:

string range $name 3 end
مقدار adi را برمی­گرداند.

برخی از اندیس­های قابل استفاده در این دستورات عبارتند از:

کد:

first, last, wordstart, wordend
هم­چنین دستور string امکاناتی را برای بررسی تطابق یک رشته با یک رشته دیگر و نیز تعلق یک رشته به یک کلاس خاص (مثلا عدد بودن محتویات یک رشته) فراهم می­کند.

Tcl هم­چنین دستوراتی مانند append, scan, format, binary را برای عملیات پیشرفته روی رشته­ها فراهم می­کند.

توضیحات (Comments)

در زبان Tcl از علامت # برای مشخص کردن توضیحات برنامه استفاده می­شود. هر توضیح یک خط را اشغال می­کند. برای توضیحات چند خطی می­توان از قراردادن \ در پایان هر یک از خطوط استفاده کرد. در زیر مثال­هایی از توضیحات Tcl مشاهده می­شود.
کد:

# This is a simpel line of comment #This is a line of comment \ and here is the rest of the line above
لیست ها

یکی از قابلیت­ها در زبان Tcl، امکان کار با لیست­هاست. برخی از دستورهای کار با لیست­ها عبارتند از

list, lindex, llength, lrange, lappend, linsert, lsearch, lreplace, …

لیست­ها در Tcl دارای دو کاربرد عمده هستند

۱.استفاده در دستور کنترلی foreach

2.ساخت پویای اجزای یک دستور Tcl برای اجرای آن در آینده به وسیله دستور eval

البته لیست­ها وسیله مناسبی برای ساخت داده­ساختارهای پیچیده در Tcl نیستند و برای چنین کاری استفاده از آرایه­ها مناسب­تر است . یک نمونه از کاربرد دستورهای لیست در Tcl در زیر آمده است
کد:

٪ set c۱ {Bob Carol} Bob Carol ٪ set c۲
[list Ted Alice] Ted Alice ٪ set Party۱
[list $c۱ $c۲] {Bob Carol} {Ted Alice} ٪ set Party۲ [concat $c۱ $c۲] Bob Carol Ted Alice ٪ linsert $Party1 1 Richard {Bob Carol} Richard {Ted Alice} ٪
آرایه ها

آرایه یک متغیر Tcl با اندیس­های رشته­ ای است. می­توان به اندیس به چشم کلید و به آرایه به دید مجموعه­ ای از عناصر که به وسیله کیلد قابل شناسایی هستند نگریست. از این نظر، می­توان گفت آرایه­های Tcl مانند Hashها در زبان Perl هستند . قابلیت انعطاف آرایه­ها آن ها را به ابزاری مهم برای برنامه نویسی در Tcl تبدیل می کند. یکی از استفاده­های مهم آرایه­ها در Tcl ایجاد داده­ساختارهای پیچیده است که در زبان­هایی مثل C و Pascal به وسیله مفاهیمی مانند struct و record تعریف می­شوند

در زیر نمونه­ای از کاربرد آرایه­ها در Tcl دیده می­شود

کد:

٪ set People(friend) Tom Tom ٪ set People(spouse) Marcia Marcia ٪ set People(boss) Jack Jack ٪ array names People friend boss spouse ٪ set Person $People(friend) Tom ٪ array get People friend Tom boss Jack spouse Marcia ٪ set People(friend) \ [concat $People(friend) Bob] Tom Bob ٪ set Person $People(friend) Tom Bob ٪
زیربرنامه ها و محدوده ها

چنانکه گفته شد زیربرنامه­ها امکان کپسوله­سازی (encapsulation) دستورات در قالب یک دستور را فراهم می­کنند. زیربرنامه­ها هم­چنین یک محدوده(scope) محلی برای متغیرها ایجاد می­کنند

در آغاز، Tcl دارای یک محدوده سراسری (global) برای متغیرها، محدوده های محلی درون زیربرنامه­ها و یک محدوده سراسری برای زیربرنامه­ها بود. از Tcl ۸٫۰ به بعد محدوده-نام ها به Tcl اضافه شد که محدوده جدیدی برای زیربرنامه­ها و متغیرهای سراسری به وجود می­آورد.نکته دیگر آن­که زیربرنامه­ها و متغیرها دارای محدوده-نام­های جدا هستند بنابراین می­توان بدون ایجاد مشکل، متغیر و زیربرنامه هم­نام داشت.

متغیرهای تعریف شده در هر زیربرنامه، تنها در همان زیربرنامه قابل دسترسی و استقاده هستند. به علاوه متغیرهای سراسری در حالت عادی در برنامه­ها قابل استفاده نیستند و برای استفاده از آن­ها باید به شکل صریح (explicit) و با استفاده از دستور global آن­ها را به سیستم معرفی کرد. هم­چنین متغیرهای تعریف شده در بلوک­های بالاتر نیز به حالت عادی در بلوک درونی­تر قابل استفاده نیستند و باید به وسیله دستور upvar آن­ها را به سیستم معرفی کرد.

نمونه­هایی دیگر از تعریف زیربرنامه­ها، به همراه شیوه استفاده از دستور upvar در زیر آمده است:
کد:

proc RandomInit { seed } { global randomSeed set randomSeed $seed } proc Random {} { global randomSeed set randomSeed [expr ($randomSeed ۹۳۰۱ + ۴۹۲۹۷) ٪ ۲۳۳۲۸۰] return [expr $randomSeed/double(۲۳۳۲۸۰)] } proc RandomRange { range } { expr int([Random] $range) }
که حاصل اجرای آن به این صورت است :
کد:
RandomInit [pid] => ۵۰۴۹ Random => ۰٫۵۱۷۶۸۶۸۹۹۸۶۳ Random => ۰٫۲۱۷۱۷۶۷۸۳۲۶۵ RandomRange ۱۰۰ => ۱۷
به عنوان نمونه­ای از استقاده از دستور upvar می­توان به پیاده­سازی پشته با استفاده از لیست اشاره کرد:
کد:

proc Push { stack value } { upvar $stack list lappend list $value } proc Pop { stack } { upvar $stack list set value [lindex $list end] set list [lrange $list ۰ [expr [llength $list]-۲]] return $value }
که در آن stack$ حاوی نام متغیر لیست دارای اطلاعات stack است که در بیرون از محدوده زیربرنامه قرار دارد و به عنوان پارامتر به برنامه فرستاده و تبدیل به یک متغیر قابل استفاده در زیربرنامه شده است.

Borna66
05-25-2011, 09:34 PM
زبان برنامه نویسی جاوا

جاوا (به انگلیسی: Java) یک زبان برنامه نویسی شئ گراست که شرکت سان مایکروسیستمز آن را ابداع کرده است. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسان تری دارد و از قابلیت های سطح پایین کمتری پشتیبانی می کند. یکی از قابلیت های اصلی جاوا این است که مدیریت حافظه را بطور خودکار انجام می دهد. ضریب اطمینان عملکرد برنامه های نوشته شده به این زبان بالا است و وابسته به سیستم عامل خاصی نیست، به عبارت دیگر می توان آن را روی هر رایانه با هر نوع سیستم عاملی اجرا کرد. برنامه های جاوا به صورت کدهای بیتی همگردانی (کامپایل) می شوند. که مانند کد ماشین هستند و به ویژه وابسته به سیستم عامل خاصی نمی باشند

تاریخچه

در مقایسه با زبان های دیگر، همچون ++C یا بیسیک یا فورترن، جاوا زبان نسبتاً جدیدتری است. شرکت سان مایکروسیستمز در سال ۱۹۹۱ یک پروژه تحقیقاتی به نام گرین (Green) را آغاز کرد. هدف این پروژه ایجاد زبانی جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط (Oak) نامید. اما بعدها به دلیل برخی مشکلات حقوقی از میان لیستی از کلمات تصادفی نام آن به جاوا تغییر کرد.

پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال ۱۹۹۳ باعث نمایش توانایی های وافر جاوا در این عرصه گشت. اینگونه بود که شرکت سان مایکروسیستمز در مه ۱۹۹۵ جاوا را رسماً به بازار عرضه کرد.

جاوا یک زبان برنامه نویسی است که در ابتدا توسط شرکت sun Microsystems ایجاد شده است و در سال 1995 به عنوان مولفه اصلی java platform منتشر شد.این زبان قسمت های بسیاری از گرامر خود را از C و ++C گرفته اما دارای مدل شی گرایی ساده ای است و امکانات سطح پایین کمی دارد. کاربرد جاوا در کامپایل به صورت بایت کد است که قابلیت اجرا روی تمامی ماشین های شبیه سازی جاوا را داشته باشد صرف نظر از معماری و خصوصیات آن کامپیوتر.

اجرای اصلی کامپایلرهای جاوا، ماشین های پیاده سازی و کتابخانه های آن توسط این شرکت از سال 1995 منتشر شد. در 2007 may این شرکت، نرم افزار رایگان این زبان را فراهم کرد. دیگران هم کاربردهای دیگری از این زبان را منتشر کردند مثل کامپایلر [[]GNU]] برای جاوا.

Games Gosling پروژه زبان برنامه نویسی جاوا را در 1991 june آغاز کرد. این زبان در ابتدا Oak، سپس Green و در آخر هم جاوا نامیده شد. gosling قصد داشت یک ماشین مجازی و یک ماشینی به کار برد که شبیه C و ++C باشد. این شرکت نسخهٔ اول جاوا را تحت عنوان Java1.0 در سال 1995 منتشر ساخت. جستجوگرهای اصلی وب، به هم پیوستند تا به طور مطمئن java applet را بدون صفحات وب اجرا کنند و به این صورت جاوا خیلی زود معروف و محبوب شد. با پیدایش java2، نسخهٔ جدید توانست ترکیب های جدیدی را برای نوع های مختلف پلت فرم ها ایجاد کند. به عنوان مثال J2EE، باهدف کاربرد برای تشکیلات اقتصادی، و نسخهٔ J2ME برای موبایل منتشر شد.

در سال 2006 با هدف بازاریابی، این شرکت نسخهٔ جدید J2 را با نام های JavaEE ،JavaME و JavaSE منتشر کرد. در سال 1997 شرکت سان میکروسیستمز،ISO/IEC JTC1 standards body و Ecma International را به فرمول جاوا تغییر داد.

شرکت sun بسیاری از کاربردهای جاوایش را بدون هیچ هزینه ای فراهم آورد. شرکت sun با فروش مجوز برای بعضی از کاربردهای خاصش مثل Java Enterprise System درآمدی را بدست آورد. اولین تمایزی که بین SDK و JRE داد شامل فقدان کامپایلر برای JRE و سرفایل ها بود. در 13 نوامبر 2006 شرکت sun نرم افزار جاوا را به صورت رایگان و با مجوز عمومی برای همه منتشر کرد. جاوا یک پلتفرم نرم افزاری است.

اهداف اولیه

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

برنامه های جاوا و اپلت ها

جاوا برای نوشتن انواع برنامه های کاربردی مناسب است. با جاوا می توان انواع برنامه های زیر را نوشت:
برنامه های تحت وب
برنامه نویسی سیستم های کوچک مانند موبایل، پاکت پی سی و ...
برنامه های کاربردی بزرگ (Enterprise)
برنامه های رومیزی (Desktop)
و غیره.

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

سیستم عامل: هر چقدر زبانهای .net قوی باشند تنها بر روی پلت فرم ویندوز اجرا می شوند و برخی ویندوز را سیستم عامل غیر قابل اعتمادی در برنامه نویسی Enterprise می دانند. ولی جاوا از این نظر انتخابی خوب است.
قابلیت حمل: جاوا بر روی پلتفرم های گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.

جاوا بیشتر از یک زبان است: جاوا فقط یک زبان نیست و انجمن هایی متشکل از بزرگان صنایع و برنامه نویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند.

خط مشی جاوا

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

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

فایدهٔ اصلی استفاده از بایت کد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامه های ترجمه شده تقریباً همیشه کندتر از برنامه های کامپایل شدهٔ محلی اجرا می شوند. این شکاف می تواند با چند تکنیک خوش بینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیک ها JIT است که بایت کد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان می کند. در نتیجه برنامه خیلی سریع تر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا می شود. بیشتر VM های پیشرفته، به صورت کامپایل مجدد پویا، در آنالیز VM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینه سازی قسمت های برنامه، استفاده می شوند.

کامپایل مجدد پویا می تواند کامپایل ایستا را بهینه سازی کند. زیرا می تواند قسمت hot spot برنامه و گاهی حلقه های داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامه های جاوا اجازه می دهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.

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

کارایی جاوا نسبت به نسخه های اولیه بیشتر شد. در تعدادی از تست ها نشان داده شد که کارایی کامپایلرJIT کاملاََ مشابه کامپایلر محلی شد.عملکرد کامپایلرها لزوماَ کارایی کدهای کامپایل شده را نشان نمی دهند.یکی از پیشرفت های بی نظیر در در زمان اجرای ماشین این بود که خطا ها ماشین را دچار اشکال نمی کردند.علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثنا رخ می دهد،اطلاعات اشکال زدایی که در حافظه وجود دارد ،ثبت می کنند.

پیاده سازی

شرکت سان میکروسیستم مجوز رسمی برای پلت فرم استاندارد جاوا را به Microsoft Windows, Linux , و Solaris. داده است. همچنین محیط های دیگری برای دیگر پلت فرم ها فراهم آورده است. علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیاده سازی ها سازگار باشد.

به علت اختلاف قانونی که با ماکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیاده سازی ماکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگی های خاصی را برای خودش اضافه کرده است. شرکت سان در سال 1997 پیگیری قانونی کرد و در سال 2001 در توافقی 20 میلیون دلاری برنده شد.

اداره خودکار حافظه

جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شی استفاده می کند. برنامه نویس زمانی که اشیا به وجود می آیند، این حافظه را تعیین می کند. و در زمان اجرا نیز، زمانی که این اشیا در استفادهٔ زیاد طولانی نباشند، برنامه نویس مسئول بازگرداندن این حافظه است.

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

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

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

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

جاوا از نوع اشاره گر ریاضی C و ++C پشتیبانی نمی کند. در جایی که آدرس اشیا و اعداد صحیح می توانند به جای هم استفاده شوند. همانند ++C و بعضی زبان های شی گرای دیگر، متغیرهای نوع های اولیهٔ جاوا شی گرا نبودند. مقدار نوع های اولیه، مستقیماً در فیلدها ذخیره می شوند. در فیلدها (برای اشیا) و در پشته (برای توابع)، بیشتر از heap استفاده می شود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شی گرای خالص به حساب نمی آید.

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

Borna66
05-25-2011, 09:36 PM
نمونه هایی از برنامه های جاوا

در زیر نمونه ای از برنامه ای که در جاوا نوشته شده است آورده شده است. البته برای کامپایل کردن این برنامه بایستی JDK بر روی سیستم مورد نظر نصب شده باشد.

کد:


public class Test{ public static void main(String[] args) { System.out.println("HelloWorld!"); } }
برای اجرای برنامه بالا، ابتدا باید یک فایل به نام Test.java ساخته شود و سپس کامپایل شود:

کد:

$ javac Test.java
سپس یک فایل خروجی به نام Test.class دریافت می شود. بعد با استفاده از دستور زیر برنامه قابل اجرا است:


کد:

$ java Test
مثال ها

برنامه Hello world به این صورت در زبان جاوا می تواند نوشته شود:

کد:


// HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
بر طبق قرارداد فایل هل بعد از کلاس های عمومی نام گذاری می شوند.سپس باید پسوند java را به این صورت اضافه کرد: Hello world.java .این فایل اول باید با استفاده از کامپایلر جاوا به بایت کد کامپایل شود.در نتیجه فایل Hello world.class ایجاد می شود.این فایل قابل اجرا است.فایل جاوا ممکن است فقط یک کلاس عمومی داشته باشد.اما می تواند شامل چندین کلاس با دستیابی عمومی کمتر باشد.

کلاسی که به صورت خصوصی تعریف می شود ممکن است در فایل .java ذخیره شود.کامپایلر برای هر کلاسی که در فایل اصلی تعریف می شود یک کلاس فایل تولید می کند.که نام این کلاس فایل همنام کلاس است با پسوند .class

کلمه کلیدی public (عمومی) برای قسمت هایی که می توانند از کد های کلاس های دیگر صدا زده بشوند،به کهر برده می شود. کلمهٔ کلیدی static (ایستا) در جلوی یک تابع ،یک تابع ایستا را که فقط وابسته به کلاس است و نه قابل استفاده برای نمونه هایی از کلاس،نشان می دهد.فقط تابع های ایستا می توانند توسط اشیا بدون مرجع صدا زده شوند.داده های ایستا به متغیر هایی که ایستا نیستند،نمی توانند دسترسی داشته باشند.

کلمهٔ کلیدی void (تهی) نشان می دهد که تابع main هیچ مقداری را بر نمی گرداند.اگر برنامهٔ جاوا بخواهد با خطا از برنامه خارج شود،باید system.exit() صدا زده شود. کلمهٔ main یک کلمهٔ کلیدی در زبان جاوا نیست.این نام واقعی تابعی است که جاوا برای فرستادن کنترل به برنامه ،صدا می زند.برنامه جاوا ممکن است شامل چندین کلاس باشد که هر کدام دارای تابع main هستند.

تابع main باید آرایه ای از اشیا رشته ای را بپذیرد.تابع main می تواند از آرگومان های متغیر به شکل public static void main(string…args) استفاده کند که به تابع main اجازه می دهد اعدادی دلخواه از اشیا رشته ای را فراخوانی کند. پارامترstring[]args آرایه ای از اشیا رشته ایست که شامل تمام آرگومان هایی که به کلاس فرستاده می شود،است.

چاپ کردن،قسمتی از کتابخانهٔ استاندارد جاوا است.کلاس سیستم یک فیلد استاتیک عمومی به نام out تعریف کرده است.شی out یک نمونه از کلاس printstream است و شامل تعداد زیادی تابع برای چاپ کردن اطلاعات در خروجی استاندارد است.همچنین شامل println(string) برای اضافه کردن یک خط جدید برای رشتهٔ فرستاده شده اضافه می کند.

توزیع های جاوا

منظور از توزیع جاوا پیاده سازی های مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانه های استاندارد زبان جاوا (JDK) وجود دارد. در حال حاضر چهار توزیع کنندهٔ عمده جاوا وجود دارند:

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

GNU Classpath: این توزیع از سوی موسسه نرم افزارهای آزاد منتشر شده و تقریبا تمامی کتابخانه استاندارد زبان جاوا در آن بدون بهره گیری از توزیع شرکت سان از اول پیاده سازی شده است. یک کامپایلر به نام GNU Compiler for Java نیز برای کامپایل کردن کدهای جاوا توسط این موسسه ایجاد شده است.

فلسفه انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است بطوریکه هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیط های احرایی برنامه های جاوا، این نام به نوعی تکنولوژی جاوا را برای خواننده القا می کند. کامپایلر GNU توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست.

لازم به ذکر است که در حال حاضر شرکت سان تقریبا تمامی کدهای JDK را تحت مجوز نرم افزارهای آزاد به صورت متن باز منتشر کرده است و قول انتشار قسمت بسیار کوچکی از این مجموعه را که به دلیل استفاده از کدهای شرکت های ثانویه نتوانسته به صورت متن باز منتشر نماید در آینده نزدیک با بازنویسی این کدها داده است.

مایکروسافت #J: این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه می باشد که توسط مایکروسافت و در چارچوب .net ارائه شده است. انتظار اینکه در سیستم عاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
AspectJ: این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی می باشد که امکان برنامه نویسی Aspect Oriented را به جاوا می افزاید. این برنامه توسط بنیاد برنامه نویسی جلوه گرا و به صورت کدباز ارائه شده است.

کلاس های خاص

[[]Applet]] (برنامه های کاربردی کوچک)

اپلت جاواها برنامه هایی هستند که برای کاربردهایی نظیر نمایش صفحات وب در جستجوگر وب، ایجاد شده اند. واژهٔ import باعث می شود کامپایلر جاوا کلاس های javaapplet.Applet وjava.awt.Graphics را به کامپایل برنامه اضافه کند. کلاس Hello کلاس Applet را توسعه می دهد. کلاس اپلت چارچوبی برای کاربردهای گروهی برای نمایش و کنترل چرخهٔ زندگی اپلت، درست می کند. کلاس اپلت یک تابع پنجره ای مجرد است

که برنامه های کوچکی با قابلیت نشان دادن واسط گرافیکی برای کاربر را فراهم می کند. کلاس Hello تابع موروثی print(Graphics) را از سوپر کلاس container باطل می کند، برای اینکه کدی که اپلت را نمایش می دهد، فراهم کند. تابع paint شی های گرافیکی را که شامل زمینه های گرافیکی هستند را می فرستد تا برای نمایش اپلت ها استفاده شوند. تابع paint برای نمایش "Hello world!" تابع drawstring(string,int,int) را صدا می زند.

Servlet

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

// Hello.java import java.io. ; import javax.servlet. ; public class Hello extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); final PrintWriter pw = response.getWriter(); pw.println("Hello, world!"); pw.close(); } }
واژهٔ import کامپایلر جاوا را هدایت می کند که تمام کلاس های عمومی و واسط ها را از بسته های java.io وjava.servlet را در کامپایل وارد کند.

کلاس Hello کلاس Genericservlet را توسعه می دهد. کلاس Genericservlet واسطی برای سرور فراهم می کند تا درخواست را به servlet بفرستد و چرخهٔ زندگی servlet را کنترل کند.
صفحهٔ سرور جاوا

صفحهٔ سرور جاوا قسمتی از سرور javaEE است که پاسخ تولید می کند.نوعاَ صفحات HTML به درخواست های HTTP از مشتری.JSP ها کد جاوا در صفحهٔ HTML را با استفاده از حائل <%and%> اضافه می کنند.JSP به javaservlet کامپایل می شود.

کاربرد swing (تاب خوردن)

Swing کتابخانهٔ واسط گرافیکی کاربر است برای پلت فرم javaSE. ابزاری مشابه پنجره، GTK و motif توسط شرکت sun فراهم شده اند. این مثال کاربرد swing یک پنجرهٔ واحد همراه با Hello world را ایجاد می کند.
کد:


// Hello.java (Java SE 5) import java.awt.BorderLayout; import javax.swing. ; public class Hello extends JFrame { public Hello() { super("hello"); setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE); setLayout(new BorderLayout()); add(new JLabel("Hello, world!")); pack(); } public static void main(String[] args) { new Hello().setVisible(true); } }

اولین جملهٔ import کامپایلر جاوا را هدایت می کندتا کلاس Borderlayout را از بستهٔ java.awt در جاوا به کامپایل اضافه کند. و import دوم همهٔ کلاس های عمومی و واسط آن ها را از بستهٔ javax.swing اضافه می کند. کلاس Hello کلاس Jframe را توسعه می دهد.کلاس Jframe یک پنجره با میلهٔ عنوان و کنترل بستن است.

زمانی که برنامه آغاز می شود،تابع main با JVM صدا زده می شود.این یک نمونهٔ جدید از کلاس Hello را ایجاد کرده و با صدا زدن تابع setvisible(boolean) با مقدار true نمایش داده می شود.
Generic

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

کتابخانه های کلاس

کتابخانه های جاوا که به صورت بایت کد از کد اصلی کامپایل شده اند،برای پشتیبانی از بعضی از کاربرد های جاوا،توسطJRE منتشر شده است. مثال هایی از این کتابخانه ها عبارتند از:

کتابخانه های مرکزی که شامل:

کتابخانه هایی که برای ساختار داده کاربرد دارند.مثل لیست ها،درخت ها،مجموعه ها،مترجم ها.
کتابخانهٔ پرداز XML (تجزیه،تغییر شکل،اعتبار)
کتابخانه های موضعی و بین المللی
کتابخانه های انتگرال گیری که امکان تایپ کردن توسط سیستم های بیرونی را می دهند.
JDBC برای دستیابی به داده ها
JNDI برای مراجعه و کشف کردن
CORBA & RMI برای توسعهٔ کاربرد توزیع کردن
کتابخانه های واسط کاربر
AWT (توابع پنجره ای مجرد)که قسمت هایی از GUI را فراهم می کنند.
کتابخانه های swing که در AWT ساخته شده اند اما کاربرد هایی از AWT widgetry را فراهم می کنند.
APL ها برای ضبط صدا،پردازش و بازنواختی
کاربردهای وابستهٔ پلت فرم ماشین های مجازی جاوا
Plugins که توانایی اجرا شدن در جستجوگر های وب را به اپلت می دهد.
java web start
دادن مجوز و مستند سازی


شرکت سان میکروسیستم، 4 نوع ویرایش از کاربردهای مختلف جاوا را ارائه داده است:
Java card for smartcard
JavaME
JavaSE
JavaEE

Borna66
05-25-2011, 09:37 PM
زبان برنامه نویسی جاوا اسکریپت

در ابتدا با جاوا اشتباه نگیرید


جاوااسکریپت زبانی است که توسط NetScape تولید شده است. این زبان، زبان برنامه نویسی اسکریپت مبتی بر اشیاء است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شده است.علیرغم اشتباه عمومی, زبان جاوا اسکریت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(C++) و جاوا شباهت دارد؛ که این امر برای سهولت یادگیری در نظر گرفته شده است. از همینرو دستورهای متداول مانند if, for, try..catch و ... در این زبان هم یافت می گردند.

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

کاربرد گسترده این زبان در سایتها و صفحات اینترنی می باشد و به کمک این زبان می توان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویا نمایی در سمت کاربر, از این زبان استفاده می شود.

تاریخچه

جاوا اسکریپت را در ابتدا شخصی به نام Brendan Eich در شرکت Netscape با نام Mocha طراحی نمود. این نام بعدا به LiveScript و نهایتا به جاوا اسکریپت تغییر یافت. این تغییر نام تقریبا با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوا اسکریپت در نسخه 2.0B3 این مرورگر در دسامبر 1995 معرفی و عرضه شد.

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

به دلیل موفقیت عمدهٔ جاوا اسکریپت در نقش زبان نویسه ای سمت کارخواه (client side scripting language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را Jscript نامید. این زبان در نسخه 3.0 از مرورگر Internet Explorer و در آگوست 1996 داده شد. تفاوت های این دو زبان به حدی جزیی است که اغلب Jscript و جاوا اسکریپت به جای هم به کار می روند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت Jscript با استاندارد ECMA مطرح می کند.

Netscape جاوا اسکریپت را به سازمان Ecma International برای استاندارد سازی ارسال کرده است و نتیجه نسخهٔ استاندارد شده ای به نام ECMA Script است.

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

امکانات زبانی

امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMA Script می باشند.

زبان امری و ساخت یافته

جاوا اسکریپت از تمامی نحو ساختاری زبان C پشتیبانی می کند. مانند گزاره (if و switch و حلقه های while و ...) یک مورد استثنا تعیین حوزهٔ متغییر هاست: تعریف حوزه در حد block در جاوا اسکریپت وجود ندارد. هر چند جاوا اسکریپت 1.7 با کلمهٔ کلیدی let این نوع حوزه دهی را امکان پذیر می سازد. مانند c در جاوا اسکریپت بین عبارت و گزاره تفاوت وجود دارد.

پویایی
تایپ دهی پویا

مانند اکثر زبان های نویسه ای تایپ به مقدارها منسوب می گردد و نه به متغییرها. برای مثال متغییر x ممکن است به یک عدد وابسته سازی شود، و بعدا به یک رشته. جاوا اسکریپت برای تعیین تایپ شی راه های مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد.


تایپ دهی ضعیف

زبان جاوا اسکریپت از نظر تایپ دهی ضعیف به شمار می آید و در آن نتیجهٔ عملیاتی مانند 5 + “37”، عبارت “537” خواهد بود. (عدد را با رشته جمع کرده است)

اشیا به دید آرایه های انتسابی

جاوا اسکیرپت تقریبا تماما بر اساس اشیا است. اشیا، آرایه های انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیا، کلیدهای آرایه انتسابی هستند و درواقع obj.x = 10 با obj[“x”] = 10 هم ارز هستند و شیوه نگارش با نقطه صرفا یک سهولت نحوی است. ویژگی ها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین می توان روی ویژگی های یک شی با ساختار for … in پیمایش کرد.

ارزیابی در زمان اجرا جاوااسکریپا یک تابع eval دارد که قادر است گزاره های تولید شده در یک رشته در زمان اجرا را، اجرا کند.

تابعی بودن

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

توابع داخلی و بستارها

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

«ساختار شماتیک» محوری

جاوا اسکریپت به جای رده ها برای تعریف ویژگی های اشیا، که شامل متد ها و وراثت است از «ساختار شماتیک» استفاده می کند (prototype). امکان شبیه سازی بسیاری از امکانات رده-محور با ساختار های شماتیک جاوا اسکریپت امکان پذیر است.

توابع در نقش سازندهٔ اشیا

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

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

امکانات دیگر

جاوا اسکریپت برای تامین اشیا و متدها که با آن ها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسه ها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML ) . (البته این یک ویژگی زبانی نیست اما در عمل اغلب این طور پیاده سازی شده است)

تعداد متغییر پارامتر (variadic)

تعداد نامعینی پارامتر را می توان به یک تابع ارسال نمود. تابع می تواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments به آن ها دسترسی داشته باشد.
Literalهای آرایه و شی

مانند بسیاری از زبان های نویسه ای آرایه ها و اشیا (که در زبان های دیگر همان آرایه های انتسابی هستند) را می توان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب داده ای JSON هم هست.

عبارات منظم

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

نظام تایپ دهی

انواع زیر جزو انواع داده های قابل دسترس در زبان جاوا اسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفا داخلی است و برای پیاده سازی است.

تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشده است

نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null

نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را می پذیرد.

نوع رشته: در بر گیرندهٔ تمام رشته های متناهی از 0 یا بیشتر عنصر 16 بیتی بدون علامت است. این عناصر با اندیس های نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر 0 است.

زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته می شود (مستقل از این که شیوهٔ واقعی نگه داری رشته چه باشد). تمام عملیات بر روی رشته ها آن ها را به عنوان اعداد صحیح بدون علامت در نظر می گیرند و تضمین کنندهٔ تولید رشته به حالت normalize شده نیست و تضمین های خاص زمانی هم ندارد. علت این تصمیم گیری سادگی در پیاده سازی ذکر شده است.

نوع عدد: نوع عدد در جاوا اسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).

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



تبدیلات خودکار

این زبان دارای تبدیلات خود کار بین این انواع داده ای است.


زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی ! و && و || استفاده شود، تبدیل به نوع دودویی را انجام می دهد. مقادیر 0 و 0- وNaN به false و سایر مقادیر عددی به true نگاشت می گردد. همچنین رشتهٔ تهی false و سایر رشته ها true در نظر گرفته می شود. انواع شی و تابع true و undefined و null هم false در نظر گرفته می شود.

زمانی که یکی از عملوند های عملگر + رشته باشد، تبدیل به رشته صورت می گیرد، مانند 5 + “37” که می شود “537”

عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد می گردد مانند 3 – “57” که مقدار عددی 34- را به دست می دهد.

مثال

برنامه های ورودی و خروجی در مرورگر وب:

کد:

<script type="text/javascript"> alert ("Hello world"); var x = prompt("Enter Name:", "Default name"); alert ( "Hello, " + x ) </script> برای استفاده ساده از عناصر HTML و DOM: <script type="text/javascript"> document.write("Hello world"); function handle() { document.write("You entered: " + document.getElementById("myinput").value ); } </script> <form> <input type="text" id="myinput"/> <input type="button" onclick="handle()" value="Click here" /> </form>
برنامه sort:

کد:

<script type="text/javascript"> var myarray = [1,5,8,2,3,0,2,9,11]; var i = 0; var j = 0; for (i = 0; i < myarray.length ; ++i ) { for (j = 0; j < myarray.length; ++j) { if (myarray[i] < myarray[j]) { var tmp = myarray[i]; myarray[i] = myarray[j]; myarray[j] = tmp; } } } for (i = 0; i < myarray.length; ++i) { document.write (myarray[i] + " " ); } </script>

Borna66
05-25-2011, 09:39 PM
زبان برنامه نویسی دلفی :

دِلفی (به انگلیسی: Delphi) یا به تعبیری ویژوآل پاسکال – یک زبان برنامه نویسی است و بستری برای توسعهٔ نرم افزار که شرکت بورلند آن را تولید کرده است و بعدها توسط امبارکادرو خریداری شد. این زبان، در بدو انتشار خود در سال ۱۹۹۵، به عنوان یکی از نخستین ابزارهایی مطرح شد که از توسعهٔ نرم افزار بر مبنای متدولوژی راد(RAD: Rapid application development) یعنی تولید و توسعهٔ سریع برنامه های کاربردی پشتیبانی می کردند.

این نرم افزار بر مبنای پاسکال شی گرا بوده و از این زبان مشتق شده است. البته بورلند نسخه ای از دلفی و سی پلاس پلاس بیلدر را برای لینوکس به نام کایلیکس (Kylix) ارائه کرد که مورد استقبال توسعه دهندگان نرم افزارهای لینوکس قرار نگرفت. نرم افزارهای دلفی در ابتدا به صورت مستقیم از کتابخانه های ویندوز و کتابخانهٔ مخصوص خود به نام VCL استفاده می کرد، اما پس از نسخه ۶ دلفی، امکانات استفاده از دات نت هم به آن اضافه شد. در حال حاضر می توان دلفی را یکی از رایج ترین زبان های ممکن در ایران دانست.

زبانِ دلفی که پیشتر بنام پاسکال شیءگرا (Object-Pascal) خوانده می شد و برای طراحی نرم افزاهای تحت ویندوز به کار می رفت، امروزه چنان توسعه یافته است که برای تولید نرم افزارهای تحت سیستم عاملِ لینوکس و دات نت نیز به کار می آید. بیشترین کاربرد دلفی در طراحی برنامه های رومیزی و پایگاه داده ها است، اما به عنوان یک ابزارِ «چند- منظوره»، برای طراحی انواع گوناگونی از پروژه های نرم افزاری نیز مورد استفاده قرار می گیرد.

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

دلفی یک محیط نرم افزاری توسعه یافته برای برنامه های مخصوص ویندوز مایکروسافت است. این محیط همیشه پشتیبانی شده است برای توسعهٔ برنامه های کاربردی پنجره ای محلی توسط زبان برنامه نویسی دلفی ، به علاوه توسعهٔ Opject Pascal. دلفی ۲۰۰۷، نسخه۱۱، همچنین توسعهٔ در C++ برای پایگاه های ویندوز مایکروسافت ۳۲بیتی، و در دلفی و C# برای پایگاه های Microsoft.NET را پشتیبانی می کند.

دلفی ۲۰۰۹، نسخهٔ ۱۲ ، یعنی آخرین نسخهٔ آن که در آگوست سال ۲۰۰۸ منتشر شد، حمایت از Unicode برای VCL و IDE را به خوبی ویژگی های کامپایلر جدید (روش های عمومی و تخلصی) به برنامه اضافه کرد و IDE همراه اولین نسخه از مدیریت منابع و مدیریت بازرسی و نگهداری پروژه به خوبی پیکر بندی های ساخت تعریف شدهٔ کاربر آسان کرد.

دلفی در اصل برای توسعهٔ برنامه های روی میزی و پایگاه های داده ای سازمانی استفاده می شود، اما ابزار توسعهٔ نرم افزاری با هدف کلی تری که مناسب با اکثر پروژه های نرم افزاری است ، می باشد. به همراه کتابخانه های ضمیمه شدهٔ بیشتر، امکان بهتری برای پروژه های تحت شبکه فراهم شده است. دلفی در نسخه های مختلف با ویژگی های متفاوتی گسترش یافته است: شخصی(فعلاً در دسترس نیست)، حرفه ای، سازمانی(قبلاً کارگزار و کاربری) و معماری.

ویژگی های اختصاصی

دلفی و Kylix از زبان برنامه نویسی دلفی مبتنی بر پاسکال استفاده می کنند، و کد منبع دلفی را به کد محلی x۸۶ یا کد مدیریت شدهٔ .NET کامپایل می کند. آن ها شامل VCL/CLX (کتابخانهٔ مؤلفه دیداری) هستند، که رابط های مستقل COM(ریزفیلم های خروجی کامپیوتر) همراه اجرای کلاس های فرض شده با مرجع ، و تعداد زیادی از اجزاء بیگانه را حمایت می کنند.

پیاده سازی های رابط به قسمت هایی از قابلیت های کلاس ها واگذار می شود. گردانندهای پیام بوسیلهٔ علامت زدن شیوه ای از کلاس با عدد ثابت پیام برای اجرا پیاده سازی می شوند. تأکید مهم بر روی اتصال پایگاه داده قرار دارد، و این موجب شده دلفی در مورد پایگاه داده دچار اشتباه شود، (فقط) نرم افزار نهایی طراحی کننده، مجموعهٔ پایگاه داده ای غنی خود را عرضه کرده است.

مزیت ها

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

ویژگی های شیئ گرایی زبان فقط چند ریختی بر مبنای کلاس- و رابط – که باعث می شود برنامه با وضوح بیشتری درظاهر یک برنامه نوشته شده به چند زبان نوشته شود، اجازه و استفاده چند ارثی داده شده. کلاس های خودی، اولین اشیاء کلاس هستند.

اشیاء در حقیقت به اشیاء رجوع می کنند(شبیه جاوا) که دلفی به طور ضمنی ارجاع می دهد، بنابراین به اختصاص دادن حافظه برای اشاره گرها به اشیاء توسط خودمان یا تکنیک های مشابه آن در زبان های دیگر نیازی نیست. در آنجا مراجع اختصاصی که نوع رشته دارند وجود دارد.

(به خوبی رشته های نا متناهی) ترجیحاً نسبت به توابع، رشته ها بوسیله علامت + می توانند ملحق شوند. برای آن دسته از انواع رشته ای اختصاص داده شده، مدیریت حافظه توسط خودمان لازم نیست، بلکه مدیر حافظه این را مدیریت می کند. مدیر حافظهٔ پیشرفته که توسط Borland Developer Studio ۲۰۰۶ معرفی شده است، توابعی را برای اختصاص دادن حافظه فراهم می کنند.

زبان برای پیشرفته سازی های بعدی مناسب است و از IDE جامع آمده است. دلفی با یک رابط گرافیکی بزرگ به اسم VCL ارتباط خوبی دارد، که شامل خیلی از کدهای منبع آن است. سوم-اجزا حزب (معمولا با منبع کامل قانون) موجود در بازار هم به منزله تقویت ide یا برای سایر کارهای دلفی مربوط به توسعه است.

IDE شامل واسط گرافیکی برای محلی سازی و ترجمهٔ برنامه های ایجادشده که می تواند به یک مترجم گسترش داده شود ، بدون هزینهٔ اضافی.(برخی از گسترش دهنده ها دستهٔ سوم محصولات را به خاطر عاملیتی که دارند ترجح می دهند.) رابط گرافیکی حالتی را پیش می آورد که نسخه های قدیمی به نسخه های جدید دلفی، تبدیل شوند.

کتابخان های دسته سوم می توانند از طریق فروشنده یا قابلیت های کامپایل دوباره برنامه را ارتقا داده شوند. VCL سازگار کنندهٔ قدیمی ای بود از تزریق وابستگی یا کنترل معکوس. VCL یک مدل با قابلیت استفاده دوباره ، خبره و توسعه پذیر با ارتقا دهنده هاست. با کمک کنندهٔ کلاس ، می توان عملکرد هستهٔ RTL و کلاس های VCL را بدون تغییر دادن منبع اصلی کد تغییر داد. بهینه سازی سریع وسادهٔ انتقال کامپایلری می تواند به برنامهٔ اجرایی تبدیل کند.CLX بیشتر پشتیبانی نشد چون Kylix از رده خارج شد.

عیب ها

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

این به کاربران امکان می دهد تا کدهای ارث برده شده بسازند بدون اینکه در توابع و رابط ها مشکلی پیش بیاید. اما بعضی از ارتقا دهندگان احساس می کنند ای توجه به سازگاری با قبل از تحول در دلفی جلو گیری کند، و باعث کهنگی و از رده خارج شدن تصمیمات طراحی در کتابخانه های استاندارد کلاس(VCL/RTL) شود. در حال حاضر توسعه های ۶۴ بیتی در دلفی موجود نیست، اما نسخه ای با نام Commodore که در اواسط ۲۰۰۹ به بازار خواهد آمد در حال برنامه ریزی است.

نام

دلفی در اصل پروژهٔ تحقیقاتی محرمانه ای بود در Borland که منجر به محصولی شد که AppBuilder نامیده می شد. کمی قبل از اولین انتشار AppBuilder از طرف Borland ، Novell AppBuilder منتشر شد، که Borland را در نیاز اسمی جدید رها کرد. بعد از تلاش زیادی، نام دلفی غلبه کرد.

توسعه دهنده Danny Thorpe کدنام دلفی را با مرجع Oracle at Delphi انتخاب کرد. یکی از اهداف اصلی دلفی تأمین اتصال پایگاه داده با برنامه نویس به عنوان یک ویژگی کلیدی بود و بستهٔ پایگاه داده ای رایج در آن زمان Oracle database بود. بنابراین«اگر می خواهید با Oracle صحبت کنید، به دلفی بروید.

» همینطور که توسعه ادامه یافت ، نام بر آنها رشد کرد و حمایت Borland نیزاز نام دلفی بیشتر شد. دورهٔ بعدی تولید کنندگان Anders Hejlsberg، معمار اصلی دلفی و Turbo pascal ، در سال ۱۹۹۶ تحت استخدام Microsoft در آمد، جایی که او یک مهرهٔ کلیدی بود در تولید قالب های گرافیکی Microsoft.NET و منجر به طراحی هر دوی Java با گرایش J++ و C# شد. Chuck Jazdzewski، کسیکه دانشمند رئیس و معمار در تکنولوژی دلفی Borland بود،در سال ۲۰۰۴ Borland را ترک کرد و به Microsoft پیوست. Danny Thorpe ، دانشمند رئیس در آن موقع در ۲۰۰۵ به Google پیوست و در ۲۰۰۶ به Microsoft پیوست.

دلفی برای PHP

دلفی بزای PHP یکIDE برای PHP است. این عملکرد صحیح RAD را فراهم می کند. این ویژگی های دلفی یا Visual basic از طرف طراح، اصلاح کنندهٔ خطا(بنا شده بر خدمات دهندهٔ شبکه)، شبیه هستند. این همچنین شامل کتابخانه VCL که به PHP منتقل شده است می باشد. برای حمایت از ویژگی های Web۲ شبیه AJAX، آن را به یک IDE منحصر به فرد تبدیل کرده است. این محصول در ۲۰ مارس ۲۰۰۷ معرفی شد و برQadram Qstudio بنا شده است، که CodGear الآن کاملاً و انحصاراً مالک آن است.

محصولاتی که توسط دلفی تولید شده است

در میان خیلی از محصولاتی که توسط دلفی تولید شده است داریم:

• محاسباتی: Intuit Lacerte

• محصولات CodeGear : CodeGear Delphi, CodeGear C++ Builder, Borland JBuilder versions 1 and ۲

• گسترش ومدیریت پایگاه داده: MySQL Tools (Administrator, Query Browser), TOAD

• نرم افزارهای مهندسی: Altium Designer/Protel (electronics design)

• نمایش دهنده عکس: FastStone Image Viewer, FuturixImager, Photofiltre

• پیام دهندهٔ اینترنت: Skype (VoIP and IM), QIP (IM), The Bat! (e-mail کاربر), PopTray (e-mail چک کننده), FeedDemon (feed viewer), XanaNews, Xnews (خوانندهٔ اخبار گروهی)

• تولید Music : FL Studio • توسعهٔ نرم افزار: Dev-C++ (IDE), DUnit (unit testing), Help & Manual (help system authoring), Inno Setup (installer engine)

• نویسندگی شبکه: Macromedia HomeSite (HTML ویرایش گر), TopStyle Pro (CSS ویرایش گر), Macromedia Captivate (screencast)

• جستجوگر شبکه (پوشش MSIE): Avant Browser, Netcaptor

• تسهیلات: Spybot - Search & Destroy, Ad-Aware (anti-spyware), jv16 PowerTools, Total Commander (file manager), Copernic Desktop Search, PowerArchiver, Beyond Compare(file comparison)], WordWeb
(dictionary/thesaurus
خیلی از کامپایلرهای Pascalشئ گرا وجود دارند که در اصل بوسیلهٔ Borland توسعه یافته اند، و همچنین محصولاتی که قالب های گرافیکی را مثل دلفی کاملاً فراهم کردند. بعضی از آنها کارهایی را انجام می دهند که دلفی نمی تواند، مثل حمایت از سیستم عامل های مختلف، و اجازه برای امتحان کد منبع کامپایلر. آنها بعضی مواقع عادت دارند

بخش های server از برنامه های دلفی را در سیستم عامل هایی به غیر سیستم عامل های Microsoft اجرا کنند. اکثراً حمایت Linux را در سال های قبل از Kylix داشتند.

• Bloodshed Dev-Pascal: ویرایش گر Windows ۳۲ بیتی خیلی از لحاظ گرافیکی آراسته شده(هر چند غیر RAD) به عنوان تنظیم کنندهٔ GNU Pascal و Free Pascal
• Lazarus: IDE RAD که از کامپایلر رایگان Pascal استفاده می کند.

Borna66
05-25-2011, 09:43 PM
زبان برنامه نویسی روبی

روبی (به انگلیسی: Ruby) یک زبان برنامه نویسی انعطافپذیر، پویا و شی گرا است. روبی ویژگی های نگارشی پرل و شی گرایی اسمال تاک را با هم در خود دارد. زبان روبی در سال های میانی دهه ۱۹۹۰ توسط یوکیهیرو ماتسوموتو در ژاپن اختراع شد. ویژگی های گوناگون زبان های پرل، لیسپ، اسمال تاک و آیفل الهام بخش ماتسوموتو در ساخت روبی بودند.

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

نسخه فعلی این زبان Ruby 1.9.1 است که به زبان سی و بصورت زبانی با مفسر تک گذره پیاده سازی شده است. تا سال ۲۰۱۰، گونه های مختلفی از زبان روبی توسعه یافته اند که از میان آنها می توان به جی روبی، روبینوس، مک روبی، آیرن روبی و هات روبی اشاره کرد.

تاریخچه

زبان روبی رسما در روز ۲۴ فوریه ۱۹۹۳ (۵ اسفند ۱۳۷۱) توسط یوکیهیرو ماتسوموتو معرفی شد. او دنبال ساخت زبانی بود که امکانات متعادلی برای برنامه نویسی تابعی و برنامه نویسی دستوری برای برنامه نویس فراهم آورد. ماتسوموتو درباره انگیزه اش برای ساخت روبی می گوید: «در جستجوی زبانی بودم که از پایتون شیء گراتر و از پرل قدرتمندتر باشد. برای همین تصمیم گرفتم خودم آن را بسازم».

نام «روبی»

یوکیهیرو ماتسوموتو و همکارش دو نام «روبی» و «کورال» را برای این زبان جدید برگزیده بودند. از آنجاییکه نام کورال پیش از آن برای یکی از زبان های برنامه نویسی بریتانیایی انتخاب شده بود، نام «روبی» به عنوان نام نهایی برگزیده شد. ماتسوموتو گفته که یکی از دلایل انتخاب نام «روبی» این بود که یاقوت (به انگلیسی: Ruby) نشان ماه تولد یکی از همکاران وی بوده است.

اولین انتشار

نخستین ویرایش روبی با عنوان روبی 0.95 در ۲۱ دسامبر ۱۹۹۵ (میلادی) (۳۰ آذر ۱۳۷۴) روی یکی از شبکه های تخصصی اینترنتی در ژاپن منتشر شد. پس از آن، سه ویرایش دیگر رویی در ظرف دو روز انتشار یافتند. در همین دوره نخستین لیست پست الکترونیک برای روبی در ژاپن براه افتاد.

روبی ۱.۰

نخستین نسخه اصلی روبی با عنوان روبی 1.0 در ۲۵ دسامبر ۱۹۹۶ (۵ دی ۱۳۷۵) منتشر شد. پس از انتشار روبی 1.3 در سال ۱۹۹۹، نخستین لیست پست الکترونیک به زبان انگلیسی آغاز بکار کرد. در سپتامبر سال ۲۰۰۰ نخستین کتاب راهنمای برنامه نویسی به زبان روبی به انگلیسی به چاپ رسید که به افزایش محبوبیت این زبان در کشورهای مختلف کمک کرد.

روبی آن ریلز

در سال ۲۰۰۵ با معرفی چارچوب جدیدی برای برنامه نویسی وب موسوم به روبی آن ریلز، محبوبیت زبان روبی به مراتب افزایش پیدا کرد. نام های «روبی» و «روبی آن ریلز» آنقدر با هم استفاده شده اند که برای بسیاری شاید تفاوت این دو روشن نباشد.

روبی ۱.۹.۱

جدیدترین نسخه پایدار روبی، نسخهٔ ۱.۹.۱ است که نسبت به نسخهٔ پیشین (۱.۸.۶) چند تغییر عمده در خود دارد. از جمله تغییرات مهم می توان به افزودن متغیرهای محلی در «بلوک»های روبی، و امکان تنظیم کدگذاری رشته ها بصورت مستقل از هم اشاره کرد.

فلسفه

سازنده زبان روبی یوکیهیرو ماتز ماتسوموتو می گوید روبی برای سازندگی بهتر برنامه نویس طراحی شده است که هدف User interface را به خوبی دنبال می کند.او نگران است که طراحی سیستم ها به جای کامپیوتر نیاز به توجه بر انسان ها داشته باشد.معمولا مردم‚مخصوصا مهندسان کامپیوتر بر روی ماشین تمرکز کند.آن ها فکر می کنند"با انجام این کار ماشین ها سریعتر می شوند‚ماشین ها در اجرا موثر تر می باشندو....

آن ها بر ماشین تمرکز می کنند‚اما در حقیقت ما نیاز داریم که به انسان ها توجه کنیم‚اینکه چگونه آنها به برنامه نویسی توجه دارندویا چگونه به اجرای برنامه های ماشین دقت می کنند.

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

اما کمترین غافلگیری هنوز خیلی به بیان زبان برنامه نویسی روبی نزدیک است. افراد ناشی شاید این را به این معنا تعبیر کنند که رفتار های روبی سعی در متصل کردن اشتراکات رفتار های دیگر زبان ها را دارد. در بحث ماه می ۲۰۰۵ در روزنامه "کامپ.لنگ.روبی " ماکسوموتو تلاش کرد که روبی را از مینیمم غافلگیری دور کند.توضیح اینکه هر شانس طراحی بعضی ها را متعجب می کند. او از استاندارد خود برای ارزیابی غافلگیری استفاده کرد.

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

هدف کمترین غافلگیری فقط برای شما نیست.این هدف به معنای کمترین غافلگیری ممکن برای بیان من می باشد.این به معنای کمترین غافلگیری بعد از آموزش کامل زبان است. برای مثال من قبل از اینکه روبی را طراحی کنم یک برنامه نویس سی++ بودم. من منحصرا دو، سه سال در سی++ برنامه نوشتم. و بعد از دو سال برنامه نویسی با آن ‚هنوز مرا متعجب می کرد.

معنی شناسی

روبی شی گراست: همه انواع داده شی هستند‚از جمله کلاس ها و خیلی از انواع داده ای که به طور معمول در بقیه زبان ها نیز هست مانند داده صحیح ‚دودویی ... تابع به صورت متد می باشد.روبی ارث بری را با فرستادن پویا و متد های یکتا پشتیبانی می کند(متعلق به‚تعریف شده برای‚یک نمونه تک به جای تعریف شدن در کلاس)

همچنین روبی از ارث بری چندگانه پشتیبانی می کند.نحو رویه ای پشتیبانی می شود‚اما همهی متد ها که خارج از حوزه یک شی خاص تعریف می شوندهمه آن در حقیقت متد های شی یک کلاس هستند.تا زمانی که این کلاس والد کلاس دیگر استتغییرات برای همه کلاس ها و شی ها ممکن است.روبی به عنوان یک زبان برنامه نویسی چند مدلی تشریح شده.در روبی اجازهی برنامه نویسی رویه ای داده شده وشی گرا و تابعی.

بر طبق سوالات متداول روبی" اگر تو به پرل علاقمند باشیتو روبی را هم دوست خواهی داشت ومی توانی از نحو آن استفاده کنی‚اگر اسمالتالک را دوست داری روبی را هم دوست خواهی داشت و می توانی از معنای آن لذت ببری و اگر طرفدار پیتون هستی تو ممکن است تفاوت عمده ای بین پیتون و روبی پیدا کنی یا که نه.

امکانات


کاملا شی گرا
داینامیک
نحو کوتاه و انعطاف پذیر
چهار سطح از حوزه دید متغیر شامل: global, class ,instance ,local
exception handling
پشتیبانی از iterators و closures (بر اساس تبادل بلوکهای کد)
پشتیبانی محلی از regular expressions (شبیه پرل) در سطح زبان
operator overloading
جمع آوری زباله خودکار
قابلیت حمل بالا
در همه سیستم عامل اصلی پیاده سازی
پردازش استثنا
سربار اپراتور
پشتیبانی شراکتی از multi-threading در تمام پلتفرمهای با استفاده از green threads
پشتیبانی کامل از یونیکد و رمزنگاریهای شخصیت چند گانه (از نسخه 1.9)
کتابخانه*های اشتراکی/DLL در اکثر پلتفرمها
introspection, reflection و meta-programming
اتصال بومی APIها در C
پوسته تعاملی روبی (REPL)
بسته مدیریت متمرکز از طریق RubyGems
کتابخانه استاندارد بزرگ
پشتیبانی از dependency injection
continuations و generators



تعامل

توزیع استاندارد روبی دارای یک مفسر تعاملی خط فرمان بنام irb است که می تواند برای آزمایش سریع کد بکار رود. یک نشست با این برنامه تعاملی بصورت زیر است:

کد:


$ irb irb(main):001:0> puts "Hello, World" Hello, World => nil irb(main):002:0> 1+2 =>

همچنین وجود ماژول readline به کاربر امکان استفاده از shell های مختلف را با پشتیبانی از تاریخچه تغییرات می دهد.

کد:


Readline.readline(, true) # param true means ~ "enable history"

سینتکس

سینتکس روبی بسیار شبیه سینتکس پرل و پایتون است. اعلان کلاسها و متدها توسط کلمات کلیدی انجام می شود. در مقایسه با پرل متغیرها الزاما با یک علامت خاص شروع نمی شوند.

(وقتی از چنین علائمی استفاده شود علامت حوزه دید متغیر را تغییر می دهد.) بارزترین تفاوت روبی از سی و پرل آنست که کلمات کلیدی (بجای براکت) برای تعریف بلوکهای کد استفاده می شوند.

سطر جدید به عنوان پایان یک جمله بکار برده می شود در عین حال که برای اینکار می توان از یک سمی کالون (http://pnu-club.com/imported/2011/05/41.gif نیز استفاده کرد. تورفتگیها معنی خاصی ندارند (برعکس پایتون). نمونه هایی از سینتکس روبی را می توانید در بخش مثالها ببینید.

چیزهای غافلگیر کننده

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

نامهایی که با حرف بزرگ شروع می شوند به عنوان ثابت (constant) در نظر گرفته می شوند، بنابراین متغیرهای محلی بایستی با حروف کوچک آغاز شوند.

به منظور وضوح مقادیر اعشاری (float) ، بایستی با یک صفر بعد از نقطه مشخص شوند (99.0) یا اینکه از یک تبدیل صریح (99.to_f) استفاده شود. تنها اضافه کردن یک نقطه بعد از عدد (.99) کافی نیست زیرا در این حالت اعداد مستعد پذیرش به عنوان یک متد هستند.

مقادیر بولین اطلاعات غیر بولین سخت گیرانه هستند: 0 ، “” و [] برابر با true هستند. در سی عبارت 0 : 1 ? 0 برابر با صفر (همان false) است در حالیکه در روبی نتیجه آن 1 است زیرا تمام اعداد برابر true هستند و فقط nil و false برابر false هستند. یک نتیجه فرعی از این عمل آنست که در روبی متدها بر طبق قرارداد --

برای مثال یک جستجوی regular-expression – در صورت موفقیت اعداد، رشته ها، لیستها یا سایر مقادیر غیر false را بر می گردانند، و در صورت شکست nil برمی گردانند. این قرارداد در اسمال تاک هم بکار می رود که تنها اشیا مخصوص true و false می توانند در عبارات بولین استفاده شوند.

در نسخه های ماقبل از 1.9 عدم وجود نوع داده کاراکتر (در مقایسه با سی که نوع داده char را برای کاراکترها داراست) ممکن غافلگیر کننده باشد. در هنگام بریدن رشته ها [0]“abc” مقدار 97 را برمی گرداند (یک integer که شماره کد اسکی اولین حرف رشته است.)، برای بدست آوردن “a” باید از [0,1]“abc” (یک زیر رشته بطول 1) یا "abc"[0].chr استفاده کرد.

در ضمن برخی مسائل در مورد خود زبان برجسته است:

در مورد سرعت، عملکرد روبی در قیاس با بسیاری از زبانهای کامپایل شده پایین تر است (همانند هر زبان تفسیر شده دیگر) و همچنین در قیاس با زبانهای اسکریپت نویسی اصلی مانند پرل و پایتون همین حالت وجود دارد. هرچند که در نسخه های آینده روبی بصورت بایت کد (bytecode) کامپایل خواهد شد و بر روی YARV (خلاصه Yet Another Ruby VM) اجرا خواهد شد. در حال حاضر حافظه بکار رفته در برنامه های نوشته شده در روبی کمتر از حافظه بکار رفته در همان برنامه ها که با پرل و پایتون نوشته شده اند، است.

مثالها

مثال کلاسیک Hello world:

کد:


puts "Hello World!"

مقداری کد اساسی روبی:

کد:



# Everything, including a literal, is an object, so this works: -199.abs # 199 "ruby is cool".length # 12 "Rick".index("c") # 2 "Nice Day Isn't It?".split(//).uniq.sort.join # " '?DINaceinsty"
Collections

ایجاد و استفاده از یک آرایه:
کد:


a = [1, 'hi', 3.14, 1, 2, [4, 5]] a[2] # 3.14 a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1] a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5]

ایجاد و استفاده از یک هش:
کد:


hash = {:water => 'wet', :fire => 'hot'} puts hash[:fire] # Prints: hot hash.each_pair do |key, value| # Or: hash.each do |key, value| puts "#{key} is #{value}" end # Prints: water is wet # fire is hot hash.delete_if {|key, value| key == :water} # Deletes :water => 'wet'

Blocks and iterators

هر دو سینتکس برای ایجاد یک بلوک کد:

کد:


{ puts "Hello, World!" } do puts "Hello, World!" end

ارسال پارامتر به یک بلاک تا یک closure شود:

کد:


# In an object instance variable, remember a block. def remember(&b) @block = b end # Invoke the above method, giving it a block that takes a name. remember {|name| puts "Hello, #{name}!"} # When the time is right (for the object) -- call the closure! @block.call("John") # Prints "Hello, John!" بازگشت closure از یک متد: def foo(initial_value=0) var = initial_value return Proc.new {|x| var = x}, Proc.new { var } end setter, getter = foo setter.call(21) getter.call # => 21


دادن جریان کنترل یک برنامه به یک بلوک که در هنگام فراخوانی ایجاد شده:

کد:


def a yield "hello" end # Invoke the above method, passing it a block. a {|s| puts s} # Prints: 'hello' # Perhaps the following needs cleaning up. # Breadth-first search def bfs(e) # 'e' should be a block. q = [] # Make an array. e.mark # 'mark' is a user-defined method. (??) yield e # Yield to the block. q.push e # Add the block to the array. while not q.empty? # This could be made much more Ruby-like. u = q.shift u.edge_iterator do |v| if not v.marked? # 'marked?' is a user-defined method. v.mark yield v q.push v end end end end bfs(e) {|v| puts v}


ایجاد حلقه بر روی آرایه ها و enumoration ها با استفاده از بلوکها:
کد:


a = [1, 'hi', 3.14] a.each {|item| puts item} # Prints each element (3..6).each {|num| puts num} # Prints the numbers 3 through 6 [1,3,5].inject(0) {|sum, element| sum + element} # Prints 9 (you can pass both a parameter and a block)

بلوکها با بسیاری از متدهای داخلی روبی کار می کنند:
کد:


File.open('file.txt', 'w+b') do |file| file.puts 'Wrote some text.' end # File is automatically closed here یا:
کد:


File.readlines('file.txt').each do |line| # Process each line, here. end

استفاده از یک enumoration و یک بلوک برای جذر گرفتن اعداد 1 تا 10:

کد:


(1..10).collect {|x| x x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

کلاسها

کد زیر یک کلاس بنام Person را تعریف می کند.

کد:


class Person def initialize(name, age) @name, @age = name, age end def <=>(person) @age <=> person.age end def to_s "#{@name} (#{@age})" end attr_reader :name, :age end group = [ Person.new("John", 20), Person.new("Markus", 63), Person.new("Ash", 16) ] puts group.sort.reverse

کد بالا سه نام را بر حسب سن از زیاد به کم چاپ می کند:
کد:


Markus (63) John (20) Ash (16)

استثناها

یک استثنا (exception) توسط اعلان raise ایجاد می شود:

کد:


raise

یک پیام اختیاری می تواند به استثنا اضافه شود:
کد:

raise "This is a message" شما همچنین می توانید تعیین کنید که چه نوعی از استثنا را میخواهید ایجاد کنید:
کد:


raise ArgumentError, "Illegal arguments!"

استثناها توسط rescue کنترل می شوند. این عنوان می تواند استثناهایی را که از StandardError مشتق می شوند بگیرد:

کد:


begin # Do something rescue # Handle exception end
توجه داشته باشید که تلاش برای گرفتن تمام استثناها توسط یک rescue یک اشتباه معمول است و برای گرفتن تمام استثناها باید بصورت زیر عمل کرد:

کد:

begin # Do something rescue Exception # Handle exception end

یا یک استثنای بخصوص:

کد:

begin # ... rescue RuntimeError # handling end و نهایتا امکان آن وجود دارد که تعیین کرد شی استثنا برای عنوان کنترل کننده مهیا شود:

کد:

begin # ... rescue RuntimeError => e # handling, possibly involving e end همچنین آخرین استثنا در یک متغیر جهانی بصورت !$ ذخیره می شود.


سیستم عامل ها

روبی برای سیستم عامل های زیر ارائه می شود:


بیشتر انواع یونیکس
لینوکس
داس (رایانه)
ویندوز ۹۵/۹۸/اکس پی/ان تی/۲۰۰۰/ویستا/۷
مکینتاش OSX
BeOS
Amiga
MorphOS
Acron RISC OS
OS/2
Syllable

Borna66
05-25-2011, 09:47 PM
زبان برنامه نویسی سی ( C )

زبان محبوب من

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

با این وجود، این زبان به هیچ سیستم عامل یا ماشین خاصی وابستگی ندارد، و می توان از آن برای نوشتن برنامه برای ریزکنترلرها، انواع سی پی یوها و سیستم عاملها استفاده کرد. اگرچه این زبان، 'زبان برنامه نویسی سیستم' نامیده شده است چرا که برای نوشتن برنامه های مترجم (مفسرها) و سیستم های عامل بسیار مفید است، با این وجود این زبان، برای نوشتن برنامه های اصلی در بسیاری از زمینه ها، زبانی کاملاً مناسب و مطلوب است.

بسیاری از ایده های مهم و ریشه ای زبان C از زبان BCPL گرفته شده است که توسط مارتین ریچاردز (Martin Richards) طراحی و توسعه یافت. از طریق زبان B، زبان BCPL به صورت غیر مستقیم بر روی زبان C اثر گذاشت که به نوبهٔ خود در سال ۱۹۷۰ توسط کن تامپسون (Ken Tampson) روی رایانه DEC PDP-۷ برای اولین سیستم عامل UNIX نوشته شد.

ویژگی ها

این زبان یک زبان برنامه نویسی سطح میانی است.
زبان C یک زبان ساخت یافته است.
زبان C قابل انعطاف و بسیار قدرتمند است. در این زبان هیچ محدودیتی برای برنامه نویس وحود ندارد.
C زبان برنامه نویسی سیستم است.
C یک زبان قابل حمل است.
C زبان کوچکی است. تعداد کلمات کلیدی آن انگشت شمار است.
C نسبت به حروف حساس است. و تمام کلمات کلیدی این زبان با حروف کوچک نوشته می شوند.


BCPL و B، زبان های بدون نوع داده ای هستند. اما در مقابل آن، در زبان C انواع مختلفی از نوع های داده ای تدارک دیده شده است. نوع های اصلی و پایه ای انواع کارکتری و اعشاری اعداد با اندازه های مختلف هستند. علاوه بر این، سلسله مراتبی از انواع داده ای فرعی در زبان C وجود دارد که می توان آن ها را به همراه اشاره گرها (Pointers)، آرایه، ساختار (Structuers) و Union ها ایجاد کرد.

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

C، یک زبان نسبتاً سطح پایین به شمار می آید، این یک توصیف تحقیرآمیز نبوده، و صرفاً به این معنی است که C با همین نوع از اشیائی سروکار دارد که بیشتر کامپیوترها با آن سروکار دارند، نظیر کارکترها، اعداد و آدرس ها. این اشیا را می توان با هم ترکیب کرد و می توان روی آنها همان عملیات محاسباتی و منطقی را انجام داد که توسط یک کامپیوتر حقیقی پیاده سازی کرد.

سیستم عامل سیمبیان (symbian) با زبان C نوشته شده و بهمین دلیل این زبان به عنوان زبان اولیه برای برنامه نویسی در آن انتخاب شده است.C بیشترین امکان دسترسی به API های سیستم عامل سیمبیان را فراهم می کند و بهترین کارکرد در حافظه و سرعت اجرا را داراست. برای مثال این زبان قدرتمند را می توان در زمینه های زیر بکار گرفت:
برنامه هایی که مانند سرور عمل می کنند. برای نمونه برنامه هایی که در پشت صحنه کار می کنند و یکی از بخش های سیستم- به عنوان مثال درگاه های COM - را مدیریت می کنند.
PLUG in ها که محیطی را بر پایه سیستم عامل ایجاد می کنند. بطور مثال برنامه ای که فایل های html را به فایل های word سیمبیان تبدیل می کند از کتابخانه مبدل سیستم عامل استفاده می کند.
درایورهای دستگاه که با Kernel کار متعامل می کنند و...

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

مدیریت حافظه

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

تخصیص حافظه به صورت اتوماتیک: اشیا موقتی می توانند بر روی پشته ذخیره شوند، این فضای اختصاص داده شده به اشیا به صورت اتوماتیک پس از خارج شدن از بلاکی که اشیا در آنها تعریف شده اند، آزاد و مجددا قابل استفاده خواهد بود.

تخصیص حافظه به صورت دینامیک : اندازه های اختیاری از بلاک های حافظه می توانند توسط توابع کتابخانه ای همانند تابع malloc از ناحیه ای از رم موسوم به هیپ در هنگام اجرای برنامه درخواست بشود. این بلاک های حافظه تا زمانیکه متعاقبا توسط تابع free به سیستم باز گردانده نشوند در حافظه باقی می مانند.

برای تخصیص حافظه به صورت پویا(دینامیک) باید آدرس بلوک حافظه ای که توسط تابع malloc گرفته می شود را در یک اشاره گر ذخیره کنیم.

کلمات کلیدی

کد:

auto , double , int , struct , break , else , long , switch , case , enum , register , typedef

Borna66
05-25-2011, 09:50 PM
زبان برنامه نویسی ابجکتیو سی ( Objective C )

آبجکتیو-سی (به انگلیسی: Objective-C) یک زبان شی گرا است که با اضافه کردن مفاهیم ارسال پیام از زبان اسمال تاک به زبان سی ایجاد شده است. در حال حاضر استفادهٔ اصلی آن در محیط های Mac OS X و iPhone OS است.

برنامه هایی از این زبان که از کتابخانه های خاص این محیط ها استفاده نکرده باشند در همهٔ محیط هایی که کامپایلر جی سی سی (GCC) استفاده می شود قابل استفاده اند.

تاریخچه

در سال های اولیهٔ ۱۹۸۰ روش غالب در مهندسی نرم افزار روش برنامه سازی ساخت یافته بود. این روش بر مبنای اصل تقسیم مسئله به اجزای کوچک تر و حل تک تک آن ها بنا شده بود. با افزایش اندازهٔ مسئله ها این روش به تدریج کارایی خود را از دست داد.

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

Brad Cox و Tom Love زبان آبجکتیو-سی را در سال های اولیهٔ ۱۹۸۰ در کارخانه شان تولید کردند. Cox با الهام از زبان اسمال تالک با تغییر در کامپایلر زبان سی توانست امکانات شی گرایی را به آن اضافه کند. او نام این زبان را OOPC مخفف Object Oriented Programming in C گذاشت.

بعدها با کمک Love محصول جدیدی به نام Productivity Products International یا PPI را ساخت که یک کامپایلر آبجکتیو-سی با کتابخانهٔ کلاس های قدرت مند بود.

در سال ۱۹۸۸ شرکت NeXT مالکیت آبجکتیو-سی را از StepStone خرید و کامپایلر و کتابخانه های خاص خودش را منتشر کرد. پروژهٔ GNU نیز ورژن خودش به نام GNUStep را از کامپایلر این زبان منتشر کرد. بعد از خریده شدن NeXT توسط Apple این شرکت ابزارهایی برای کار با این زبان را منتشر کرد.

دستور زبان

زبان آبجکتیو-سی یک لایهٔ بسیار نازک روی زبان سی است. هر برنامه به زبان سی را می توان با کامپایلر آبجکتیو-سی کامپایل کرد. اکثر دستورات از زبان سی به ارث رسیده اند و تعدادی دستور برای ارسال پیغام به آن ها اضافه شده است.

پیام ها

زبان آبجکتیو-سی روش هایی برای انتقال پیام به زبان سی اضافه کرد. در این زبان از مدل اسمال تالک برای فرستادن پیام استفاده می شود. در این روش یک پیام برای یک شی فرستاده می شود و در صورتی که شی گیرنده متدی برای اجرای آن داشته باشد،آن را اجرا می کند. این روش برعکس روش سی++ است که گیرنده باید حتماً یک متد را پیاده سازی کرده باشد تا شی ای بتواند آن را صدا بزند.

فرستادن یک پیام به یک شی در این زبان به شکل زیر است:

کد:

[obj method:parameter];
این دستور مانند عمل زیر در سی++ است:
کد:

obj->method(parameter);
پیام های آبجکتیو-سی نیازی ندارند که اجرا شوند.اگر به شیئی پیامی بدهیم و آن شی متد مربوطه را پیاده سازی کرده باشد. اجرا می شود و در غیر این صورت اجرا نمی شود. حتی می توان به شی پوچ نیز پیام فرستاد.

واسط ها و پیاده سازی ها

آبجکتیو-سی نیاز دارد که واسط و پیاده سازی یک کلاس در بلوک های کد جداگانه قرار بگیرند. به طور قراردادی، واسط در یک فایل سرآیند با پسوند h. و پیاده سازی در یک فایل کد، معمولاً با پسوند m. قرار می گیرد.

واسط

واسط کلاس معمولاً در فایل سرآیند قرار می گیرد و معمولاً نام آن فایل سرآیند همان نام کلاس گذاشته می شود.

نمونه ای از نحوهٔ تعریف واسط
کد PHP:


@interface classname : superclassname {
// instance variables
}
+classMethod1;
+(return_type)classMethod2;
+(return_type)classMethod3:(param1_type)parameter_ varName;

-(return_type)instanceMethod1:(param1_type)param1_v arName :(param2_type)param2_varName;
-(return_type)instanceMethod2WithParameter:(param1_ type)param1_varName andOtherParameter:(param2_type)param2_varName;
@end


+ نشان دهندهٔ توابع مربوط به خود کلاس و – نشان دهندهٔ توابع مربوط به یک نمونه از آن کلاس است. معادل کد بالا در سی++ به شکل زیر است.
کد PHP:


class classname : superclassname {
// instance variables
// Class (static) functions
static void classMethod1();
static return_type classMethod2();
static return_type classMethod3(param1_type parameter_varName);

// Instance (member) functions
return_type instanceMethod1(param1_type param1_varName, param2_type param2_varName);
return_type instanceMethod2WithParameter(param1_type param1_varName, param2_type param2_varName=default);
};


یکی از موارد قابل توجه instanceMethod2WithParameter است. در آبجکتیو-سی امکان استفاده از پارامتردهی بانام وجود دارد که در حال زیاد بودن تعداد پارامترها کد را تمیز نگاه می دارد. ولی در سی++ چنین امکانی وجود ندارد.

مقادیر بازگشتی می توانند انواع سی، یک اشاره گر به یک شی آبجکتیو-سی و یا یک اشاره گر به انواع خاص مانند NSArray یا NSImage یا NSString باشد. مقدار بازگشتی پیش فرض نوع عمومی آبجکتیو-سی به نام id است.

پیاده سازی

واسط تنها روش دسترسی به کلاس را بیان می کند و نه خود متدها را. کد اصلی در قسمت پیاده سازی نوشته می شود. این فایل های پیاده سازی معمولاً با پسوند m. خاتمه می یابند.
کد PHP:


@implementation classname
+classMethod {
// implementation
}
-instanceMethod {
// implementation
}
@end


و هریک از این متدها به این شکل خواهند بود

کد PHP:


-(int)method:(int)i {
return [self square_root: i];
}


دستور زبان اجازهٔ دادن مقدار با استفاده از اسم پارامترها را نیز می دهد.

مثلاً برای فراخوانی یک متد که این گونه تعریف شده است:
کد:

-(int)changeColorToRed:(float)red green:(float)green blue:(float)blue
می توان به این شکل عمل کرد
کد:

[myColor changeColorToRed:5.0 green:2.0 blue:6.0];
در پیاده سازی این زبان، هریک از این ارسال پیام ها تبدیل به یک فراخوانی تابع می شود.

نمونه گرفتن از یک کلاس

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

MyObject o = [[MyObject alloc] init];
قابل انجام اند. alloc سبب می شود که به اندازهٔ متغیرهای این کلاس حافظه گرفته شود و با init می توان به این متغیرها مقدار اولیه داد.

متد init معمولاً به صورت زیر نوشته می شود:

کد PHP:


-(id) init {
self = [super init];
if (self) {
ivar1 = value1;
ivar2 = value2;
.
.
.
}
return self;
}


پروتکل ها

پروتکل ها در زبان آبجکتیو-سی برای معرفی مفهوم وراثت چندگانه به وجود آمدند. در این زبان وراثت چندگانهٔ توصیفات وجود دارد ولی وراثت چندگانهٔ پیاده سازی ها وجود ندارد. این همان مفهومی است که در ++C با وراثت از یک کلاس abstract و در جاوا به عنوان مفهوم interface وجود دارد.

در این زبان دو نوع پروتکل وجود دارد ad-hoc protocol که informal protocol نیز خوانده می شود و formal protocol Informal protocol لیست متدهایی است که یک کلاس می تواند پیاده سازی کند. توی مستندات می آید زیرا هیچ معادلی در زبان ندارد. معمولاً شامل متدهای اختیاری نیز هست.

Formal protocol مشابه interface در جاوا است. یک لیست متدها است که یک کلاس می تواند بیان کند که آن ها را پیاده سازی می کند. این پروتکل ها نمی توانند هیچ گونه پیاده سازی داشته باشند.

تعریف یک formal protocol به این شکل است

کد PHP:


@protocol Locking
- (void)lock;
- (void)unlock;
@end


و استفاده از آن در یک کلاس به صورت

کد PHP:

@interface SomeClass : SomeSuperClass <Locking>
@end


است.

تعیین نوع پویا

آبجکتیو-سی از تعیین نوع پویا پشتیبانی می کند. یک شی می تواند پیامی دریافت کند که در واسط آن مشخص نشده است که می تواند آن را دریافت کند. به این ترتیب انعطاف پذیری زبان افزایش می یابد.

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

ارسال کردن پیام

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

Borna66
05-25-2011, 09:54 PM
تفاوت های اساسی با سی++

سی++ شامل کتابخانه ها و استانداردهایی برای برنامه سازی شی گرا، برنامه سازی عمومی است. در حالی که آبجکتیو-سی تنها یک لایه برای برنامه سازی شی گرا به زبان سی اضافه می کند.
آبجکتیو-سی امکانات reflection برای برنامه نویس به وجود می آورد که در زمان اجرا آدرس بعضی توابع معلوم می گردد حال آن که در سی++ امکانات reflection وجود ندارد. یعنی آبجکتیو-سی از سی++ امور بیشتری را در زمان اجرا تعیین می کند که باعث انعطاف بیشتر زبان می شود ولی سرعت اجرای آن را کاهش می دهد

تحلیل زبان

آبجکتیو-سی برخلاف اکثر زبان های شی گرا که هم زمان با آن ساخته شدند از ماشین مجازی برای اجرای برنامه استفاده نمی کند.

این زبان می تواند روی یک کامپایلر زبان سی پیاده سازی شود. به این ترتیب که اول به صورت پیش پردازشی کدهای خاص آبجکتیو-سی تبدیل به کدهای سی متناسب می شوند.

این زبان برعکس سی++ از دادن چند مفهوم به یک اپراتور (operator overloading) پشتیبانی نمی کند.


مثال هایی از آبجکتیو-سی

hello world-1

مثال اول، صورت ساختاری




#import <stdio.h>

int main( int argc, const char argv[] ) {
printf( "hello world\n" );
return 0;
}
</b>

hello world-2

مثال دوم، صورت شی گرا



#import "objc/Object.h"

//
// Compile with:
//
// cc hw.m -o hw -lobjc -lm
//

@interface HelloWorld : Object
{
STR msg; // Instance Variable
}

+ new; // Class/Factory method
- print; // Instance method
- setMessage: (STR) m; // " "

@end

@implementation HelloWorld

+ new
{
self = [super new];
msg = "";
return self;
}

- print
{
printf("%s\n", msg);
return self;
}

- setMessage: (STR) m
{
msg = m;
return self;
}

@end


int main(int argc, char argv) {
id obj;

obj = [HelloWorld new];

[[obj setMessage: "Hello World"] print];

return 0;
}

Borna66
05-25-2011, 09:58 PM
برنامه Hello World

برنامه زیر با استفاده از کتابخانه استاندارد و جریان های خروجی یک متن را به خروجی استاندارد ارسال می نماید.

# کد PHP:



include <iostream.h> // provides std::cout
using namespace std;

int main()
{
cout << "Hello, world!\n"; // prints "Hello, world!"
}



ویژگی های زبان

عملگرها

پیش پردازنده

++C بطور عمومی در سه فاز ترجمه می گردد: پیش پردازنده، ترجمه به کد object، پیوند (که دو مرحله آخر به عنوان عمل کامپایل شناخته می شود.) در اولین مرحله در پیش پردازنده، شبه دستورات پیش پردازنده تغییرات لغوی بر روی کد منبع ایجاد می نمایند و آن را به به مراحل دیگر تحویل می دهند.

شبه دستورات پیش پردازنده با استفاده از کاراکتر # قبل از هر گونه فضای خالی آغاز گشته و رشته هایی را در کد منبع با فایل یا رشته های دیگر با توجه به قوانین تعریف گشته توسط برنامه نویس جایگزین می نماید. این دستورات معمولاً اعمال زیر را انجام می دهند: جایگزینی ماکروها، شمول فایل های دیگر (برخلاف ویژگی سطح بالاتر مانند شمول ماجول ها/پکیج ها/یونیت ها/کامپوننت ها)، کامپایل شرطی و/یا شمول شرطی. به عنوان مثال:

کد PHP:



#include <iostream>

که این دستور تمام سمبل ها در فایل سرایند کتابخانه استاندارد iostream را در فایل منبع وارد می سازد.

کاربرد معمول دیگر به عنوان ماکرو خوانده می شود:

کد PHP:



#define MY_ASSERT(x) assert(x)

که کد (MY_ASSERT(x را با (assert(x در فایل منبع جایگزین می نماید. که این جایگزینی امکان کنترل استفاده از این تابع را در اختیار برنامه نویس قرار می دهد.

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

علاوه بر شبه دستورات معمول تعدادی شبه دستور برای کنترل جریان کامپایل وجود دارد که امکان شمول یا عدم شمول قطعه ای کد یا سایر ویژگی های کامپایل را در اختیار ما قرار می دهد.

دستورات پیش پردازنده برای کاربردهای عددی نیز به کار می رود که هم اکنون استفاده از const به جای #define ترجیح داده می شود. این کار علاوه بر ایجاد کنترل نوع قوی مانع از گمراهی در فضاهای نام می گردد.

هدف کمیته استانداردسازی از بین بردن پیش پردازنده است اما با توجه به خصوصیت مدولار ++C بعید به نظر می آید که این حذف امکان پذیر باشد.


قالب ها

قالب ها متفاوت با ماکروها هستند. در حالی که هر دوی این ویژگی های زمان کام پایل برای ایجاد کامپایل شرطی استفاده می شوند قالب ها محدود هب تغییرات لغوی و متنی نیستند. قالب ها با آگاهی از معنا و سیستم نوع در زبان استفاده شده و سایر ویژگی های زمان کامپایل می توانند از عملیات سطح بالا برای کنترل ترتیب اجرا براساس نوع پارامترها استفاده نمایند. ماکروها کنترل خود را بر کامپایل از طریق ویژگی های از پیش تعیین شهد انجام می دهند ولی قادر به ایجاد انواع جدید و کنترل نوع نیستند و فقط محدود به تغییرات متنی پیش از کامپایل هستند. به زبان دیگر ماکروها کنترل خود را با استفاده از نشانه های از پیش تعیین شده انجام می دهند اما همانند قالب ها نمی توانند نشانه ها را خود ایجاد نمایند. قالب ها ابزاری برای چندریختی ایستا و برنامه نویسی جنریک است. مثلاً جایگزین معادل با استفاده از قالب ها برای عبارت خطرناک #define max(x,y) ((x)>(y)?(x)http://pnu-club.com/imported/mising.jpgy)) در پایین نشان داده شده است.

کد PHP:



template <typename T>
const T& max(const T& x, const T& y)
{
return x > y ? x : y;
}



این قالب در سرآیند algorithm تحت عنوان std::max() قابل دسترسی است. معمولاً می توان از کلمه کلیدی class بجای typename استفاده کرد.

علاوه بر این قالب ها یک ویژگی تورینگ-کامل هستند که به این معناست که هر برنامه قابل محاسبه توسط کامپیوتر را می توان با استفاده از فرابرنامه نویسی قالب ها نوشت.

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


اشیا

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


بسته بندی

بسته بندی به معنای جمع آوری عملیات و داده در یک محل می باشد. سی++ بسته بندی را با ایجاد امکان تعریف هر کلاس به صورت public، private، protected پیاده سازی نموده است. اعضای private فقط توسط اعضای کلاس و یا کلاس ها دقیقا بیان شده (friend) قابل دسترسی هستند. اعضای protected توسط کلاس های ارث برده شده و اعضای کلاس و کلاس های friend قابل دسترسی هستند.

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

عموماً توصیه بر این است که تمام اعضا به صورت خصوصی یا حفاظت شده تبدیل گردند و فقط توابعی که باید توسط دیگر کلاس ها به عنوان واسط استفاده شوند عمومی باقی بمانند.


وراثت

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

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


چندریختی

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

سی++ دو نوع چندریختی در اختیار برنامه نویس قرار می دهد: چندریختی زمان کامپایل و چندریختی زمان اجرا. چندریختی زمان کامپایل امکان تصمیم گیری های زمان اجرا را فراهم نمی سازد و چندریختی زمان اجرا اغلب موجب پایین آمدن بازدهی می گردد.


چندریختی ایستا

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


گرانبارسازی تابع

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


گرانبارسازی عملگر

بطور مشابه گرانبارسازی عملگر امکان استفاده از یک عملگر مشخص می شود که عملکرد متفاوتی با توجه به عملوندهای خود دارد. این عملگرهای گرانبار شده موجب فراخوانی تابع مشخصی متناسب با آن موقعیت می گردند. گرانبارسازی عملگر ترتیب اجرا یا تعداد عملوندهای یک عملگر را تغییر نمی دهد. عملگرهای . :: . ? نمی توانند گرانبار شوند.


آرگومان پیش فرض

آرگومان پیش فرض در شرایطی به کار می رود که تعیین یک مقدار مشخص برای یک آرگومان نیاز به تعریف یک تابع جدید را برطرف می سازد. هنگام استفاده از این مشخصه باید دقت شود که تابع های گرانبار شده و تابع های دارای آرگومان پیش فرض با یکدیگر تداخل نداشته باشند به عنوان مثال:
کد PHP:



// function with default argument but also an overloaded function
int strcpy(char str1, char str2, short unsigned n=65535);
// second overloaded function
int strcpy(char str1, char str2);

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


چندریختی

چندریختی پویا شامل وراثت و توابع مجازی عضو است.


ساختار برنامه ها

ساختار برنامه ها در این زبان بدین صورت است که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه برنامه داشته باشد. هر برنامه معمولاً از تعداد زیادی فایل تشکیل می شود که به هم الحاق می گردند (با دستور include) و به این فایل های الحاقی سرآیند (Header) می گوییم. فایل های الحاقی حاوی کدها یا نسخه های اجرایی کلاس ها (مجموعه متغیرها و توابع) می باشند که در بدنه اصلی برنامه از آنها استفاده می شود. معمولاً هر کلاس (که تعریف یک نوع داده ای با متدهای مربوط به آن است) را در یک سرآیند می نویسند. هر سرآیند که معمولاً تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایل های پیاده سازی به زبان ++C یا پیاده سازی های کامپایل شده (به صورت فایل اشیا مانند dll یا so یا ... ) می تواند به کار برده شود. به مجموعه های یکپارچه ای از کلاس های پیاده سازی شده (به صورت فایل های سرآیند با پیاده سازی های کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار می روند، یک کتابخانه ++C گفته می شود و قدرت اصلی این زبان در امکان به کارگیری کتابخانه های آماده می باشد. کتابخانه های بزرگ ++C مانند STL، MFC، QT و ... مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کرده اند.


محیط های برنامه نویسی

یک برنامه به زبان ++C می تواند در محیط های ++Turbo C++ ,Borland C++ ,Dev C در ویندوز و GCC در لینوکس نوشته شود. این محیط های برنامه نویسی، همراه با یک کمپایلر عرضه می شوند که کار تبدیل برنامه به فایل اجرایی را راحت می کند.

Borna66
05-25-2011, 10:15 PM
سی شارپ #C

سی شارپ (C#) زبانی شیءگرا و سطح بالا (high level) از خانوادهٔ زبان های چارچوب دات نت شرکت مایکروسافت است.

زبان #C، یک زبان برنامه نویسی چند الگویی است و منظم شده مدل های تابعی، امری، عمومی، شی گرا و جز گرا می باشد. این زبان توسط ماکروسافت و جزئی از دات نت به وجود آمد و بعدا استانداردهای ECMAو ISO را نیز در بر گرفت. #C یکی از 44 زبان برنامه نویسی ای است که توسط Common Language Runtime از .NET Framework پشتیبانی می شوند و در همه جا به وسیله Microsoft Visual Studio شناخته می شود.

این زبان برپایه سادگی، مدرن بودن، همه منظوره و شی گرا بودن ساخته شد.Anders Hejlsberg، طراح زبان برنامه نویسی دلفی، سرپرستی تیم طراحان زبان #C را بر عهده داشت.این زبان دارای دستوری شی گرا مشابه ++C است و به شدت از زبان های جاوا و دلفی تاثیر پذیرفته است.در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در جولای 2000، زمانی که ماکروسافت پروژه را عمومی اعلام کرد، اسم آن به #C تغییر پیدا کرد.آخرین نسخه آن نسخه 3 است که از ویژوال استدیو 2008 استفاده می کند. نسخه بعدی 4 است که در دست ساخت است.

اهداف طراحی زبان

• استاندارد ECMA این اهداف طراحی زبان را برای #C بر آورده می سازد:
• سی شارپ یک زبان برنامه سازی ساده،مدرن،برای اهداف عمومی و شی گرا است.
• به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره وری برنامه نویس،زبان دارای چک کننده Strong Type ، چک کننده مرزهای آرایه، تشخیص حالتهایی که یک متغیر مقدار دهی اولیه نشده است،قابلیت انتقال کدها و Garbage Collection خودکار است.
• این زبان برای استفاده در اجزای توسعه نرم افزار برای دستیابی به مزایای سیستم های توزیعی در نظر گرفته شده است.
• قابلیت انتقال برنامه نویس بسیار مهم است،خصوصاً برای آن دسته از برنامه نویسانی که با زبان های C و C++ آشنا هستند.
• پشتیبانی از این زبان برای بین المللی شدن بسیار مهم است.
• زبان سی شارپ برای نوشتن برنامه ها برای سیستمهای تعبیه شده و میزبان در نظر گرفته شده است، از سیستم عامل های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.
• هر چند برنامه های نوشته شده با #C طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان های C و اسمبلی نیست.

تاریخچه

در سال 1999، شرکت سان اجازه استفاده از زبان برنامه نویسی جاوا را در اختیار ماکروسافت قرار داد تا در سیستم عامل خود از آن استفاده کند.جاوا در اصل به هیچ پلت فرم یا سیستم عاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم عامل بودن جاوا را از آن برداشت.شرکت سان پرونده ای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شی گرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس های کتابخانه ای با زبان و کامپایلر SMC نوشته شدند.در سال 1999 آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شی گرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی .NET در PDC در سال 2000 این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاس ها و runtime در ASP.NET به#C منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان های برنامه سازی++Borland , Delphi, Turbo Pascal, Visual C به آسانی در دستورالعمل های سی شارپ قابل رویت است و به همان خوبی در هسته CLR.

ویژگی ها

برخی از تفاوت های زبان سی شارپ با C و ++C عبارتند از:

هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس ها تعریف شوند.این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاس های عمومی استفاده کرد.

متغیرهای عمومی، بر خلاف C و ++C ، نمی توانند بلاک های پیوستی را در بر بگیرند.

سی شارپ دارای یک نوع داده بولی است (bool).برخی از عبارت ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند.همان طور که ++C نیز دارای نوع داده بولی است،این نوع داده به راحتی می تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد.کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی می کند که به درستی یک مقدار bool را برمی گردانند. بنابراین دستوری مانند (if(a = b باعث بروز خطا می شوند.(به جای = بایستی از == استفاده شود)

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

حافظه ساماندهی شده نمی تواند صریحا آزاد شود، ولی به طور خودکار به عنوان به درد نخور تلقی می شود.انتخاب آدرس های به درد نخور حافظه نفوذ ناپذیر است. هم چنین #C با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می کند(پشتیبانی از اصطلاح Resource Acquisition Is Initialization).

وراثت چندگانه از کلاس ها در این زبان پشتیبانی نمی شود.البته یک کلاس امکان ارث بری از تعداد نامحدود واسط ها را دارد.پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است.
سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت می پذیرد.هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می شود(بایستی به صورت explicit تعریف شود)اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.

#C قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجول های کسول شده در یک کلاس به صورت ویژگی ها قرار داده است.

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

تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده است.

در حال حاضر (3 جوان 2008) دارای 77 کلمه رزرو شده است.


سیستم یکپارچه شده

سی شارپ دارای یک سیستم نوع یکپارچه است که به آن CTS می گویند.این بدان معناست که تمام انواع،شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند.به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می برد.بخاطر کارائی،انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته می شود.

انواع داده

CTS داده ها را به دو نوع تقسیم می کند:

نوع مقداری
نوع مرجعی

انواع داده ای توده ساده ای از داده می باشند.نمونه های انواع داده ای نه حویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده ای، خود مقدار داده ها را با یکدیگر مقایسه می کنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند.مقادیر داده های مرجعی همیشه یک مقدار پیش فرض دارند و همیشه می توانند ایجاد و یا کپی شوند.یکی دیگر از محدودیت های انواع داده ای این ات که آنها نمی توانند از یکدیگر مشتق شوند(ولی می توانند اشتراکاتی داشته باشند) و هم چنین نمی توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند( که در آن هر نمونه از نوع مرجع، به طور ذاتی از دیگر نمونه ها جدا می شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقا نمونه مشابه مقایسه تساوی یا عدم تساوی داده های مرجعی است، که در آن آزمایش برای مرجع ها از داده ای ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه.ولی به هر حال انواع مرجعی خاص می توانند این اعمال را از طریق سازنده های عمومی یا اجرای واسط های مشابه(مثل ICloneable یا IComparable) انجام دهند.نمونه هایی از انواع مرجعی، اشیا، System.Stringو Sysmet.Array می باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند.

Boxing و UnBoxing:
Boxing عمل تبدیل مقدار نوع داده ای به نوع مرجع مشابه آن می باشد.

مثال:
کد PHP:


int foo = 42; // Value type...
object bar = foo; // foo is boxed to bar.

UnBoxing عمل تبدیل نوع مرجع به نوع داده ای می باشد. مثال:
کد PHP:


int foo = 42; // Value type.
object bar = foo; // foo is boxed to bar.
int foo2 = (int)bar; // Unboxed back to value type.

سی شارپ به برنامه نویس با استفاده از کلمه کلیدی Struct اجازه می دهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه نویسی، آنها کلاس های سبک وزن به نظر می رسند. برخلاف کلاس ها (که بر روی heap قرار می گیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار می گیرند.آنها همچنین می توانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به طور معمول برای انواع کلاس تخصیص می یابد.

ویژگی های جدید در C# 2.0

ویژگی های جدید در C# .NET SDK 2.0 (مطابق با سومین ویرایش استاندارد ECMA-334):

کلاسهای partial

کلاس های Partial اجازه اجرای کلاس ها از بیش از یک سورس فایل را می دهند.این امر اجازه می دهد تا کلاس های بسیار بزرگ را قطعه قطعه کنیم و همچنین برای زمانی که برخی قسمت های یک کلاس به طور خودکار تولید می شوند مفید است.

file1.cs:
کد PHP:


public partial class MyClass
{
public MyClass()
{
// implementation
}
}

file2.cs:

کد PHP:
public partial class MyClass
{
public void SomeMethod()
{
// implementation
}
}

Borna66
05-25-2011, 10:17 PM
Generic ها

genericها یا نوع های پارامتری شده یا چندریختی های پارامتری یک ویژگی جدید .NET 2.0 است که به وسیله سی شارپ پشتیبانی می شود.برخلاف Template های سی پلاس پلاس،در این انواع به جای اینکه نمونه سازی توسط کامپایلر انجام شود، در زمان اجرا صورت می گیرد، بنابراین می توانند چند زبانه باشند در حالی که ++C نمی تواند.آنها دارای ویژگی هایی هستند که به طور مستقیم توسطTemplate های C++ پشتیبانی نمی شوند مانند نوع محدودیت ها در پارامترهای Generic با استفاده از رابط ها(Interface). سی شارپ از پارامترهای های Generic بدون نوع پشتیبانی نمی کند.بر خلاف genericهای جاوا،genericهای دات نت برای پارامتری کردن انواع داده ای در اشیا ماشین مجازی CLI، از مفاهیم شی گرایی استفاده می کنند که اجازه بهینه سازی و حفاظت انواع اطلاعات را می دهد.

کلاس های static

کلاس ها به صورت Static قابل تعریف نیستند مگر اینکه تمام اعضای آنها Static باشند.که این امر بسیار شبیه به مفهوم مدل در زبانهای رویه ای است.(زبان رویه ای : یک زبان برنامه نویسی که در آن عنصر اصلی برنامه نویسی یک زیربرنامه است.مانند زبانهای C، پاسکال و...)

یک شکل جدید از تکرار کننده با استفاده از سازنده توابع

یک شکل جدید از iterator(تکرار کننده) ، با استفاده از ساختار yield return بسیار شبیه به yield زبان Python.

کد PHP:


// Method that takes an iterable input (possibly an array) and returns all even numbers.
public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
{
foreach (int i in numbers)
{
if (i % 2 == 0) yield return i;
}
}

Delegate های ناشناس

Delegate های ناشناس که عملکردهای محدودی را در #C به وجود می آورند.کد کنار بدنه Deletage ناشناس، دسترسی کامل برای خواندن یا نوشتن در متغیرهای عمومی، پارامترهای توابع و اعضای کلاسهای دارای محدوده Deletage را دارد ولی پارامترهای out و ref را پشتیبانی نمی کند. برای مثال :
کد PHP:


int SumOfArrayElements(int[] array)
{
int sum = 0;
Array.ForEach(
array,
delegate(int x)
{
sum += x;
}
);
return sum;
}

Delegate covariance and contravariance

تبدیل گروه های متد به نوع Deletage در برگشت دارای covariant و در انواع پارامترها دارای contravariant هستند.

اکسسورهای یک خاصیت(get و set) می توانند دارای سطح دسترسی متفاوتی باشند.

مثال :
کد PHP:


string status = string.Empty;

public string Status
{
get { return status; } // anyone can get value of this property,
protected set { status = value; } // but only derived classes can change it
}

نکته مهم : سطح دسترسی خاصیت نمی تواند بالاتر از سطح دسترسی اکسسورها باشد.به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا می شود.

نوع داده Nullable

نوع داده Nullable (که با یک علامت سوال قابل تشخیص است : int? i = null;)اجازه تخصیص مقدار null را برای انواع داده ای می دهد.این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL می شود. در این حالت نوع ستونی INTEGER NULL در SQL به طور مستقیم به int? در سی شارپ تبدیل می شود.

داده های Nullable در آخرین لحظات آگوست 2005 اضافه شدند چند هفته مانده به اتمام کار اداری و برای بهبود زبان.متغیر Null در حقیقت خالی نیست، بلکه نمونه ای است از struct Nullable<T> با ویژگی HasValue مساوی false. وقتی در برنامه قرار می گیرد، خود به خود نمونه خالی در آن قرار می گیرد، نه مقدار خود آن، در نتیجه اشاره گر مقصد همیشه غیر Null می باشد، حتی برای مقادیر Null. کد زیر نضص بالا را مشخص می کند:
کد PHP:


int? i = null;
object o = i;
if (o == null)
Console.WriteLine(«Correct behaviour - runtime version from September 2005 or later»);
else
Console.WriteLine(«Incorrect behaviour - pre-release runtime (from before September 2005)»);

وقتی درون شی ای کپی می شود، نمونه Nullable به صورت تشریفاتی در آن قرار می گیرد و در نتیجه مقادیر و منابع Null با هم برابر می شوند.در گذشته این خاصیت دارای مجادله بود تا زمانی که علاوه بر .NET2 ، به هسته CLR نیز مجهز شد و همه تکنولوژی ها نظیر #CوVBوSQL Server 2005و Visual Studio 2005 را شامل شد.

Coalesce Operator

مقدار اولین عملوندی که null نباشد را برمی گرداند.(یا null،برای زمانی که تمام عملوندها null باشند)
کد PHP:


object nullObj = null;
object obj = new Object();
return nullObj ?? obj; // returns obj

کاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده است.
کد PHP:


int? i = null;
int j = i ?? 0; / Unless i is null, initialize j to i. Else (if i is null), initialize j to 0. /

ویژگی های جدید در C# 3.0

این ورژن در تاریخ 19 نوامبر سال 2007 به عنوان بخشی از .NET Framework 3.5 عرضه شد.که شامل ویژگی های جدید الهام شده از زبان های برنامه نویسی اصلی(Functional) مانند Haskell و ML، و الگوی LINQ برای CLR است.در حال حاظر توسط هیچ موسسه استاندارد سازی ای تائید نشده است.

معرفی (Language-Integrated Query(LINQ

LINQ، یک زبان پرس و جوی قابل انعطاف و همه منظورهبرای بسیاری از انواع منبع داده هااست( مثل انتخاب اشیا شناور، سندهای XML، بانک های اطلاعاتی و . . .) که در ویژگی های 3#C جمع شده اند. سینتکس زبان به زحمت از SQL گرفته شده است، برای مثال:
کد PHP:


int[] array = { 1, 5, 2, 10, 7 };

// Select squares of all odd numbers in the array sorted in descending order
IEnumerable<int> query = from x in array
where x % 2 == 1
orderby x descending
select x x;

مقدار دهی به اشیا
کد PHP:


Customer c = new Customer(); c.Name = "James";

عبارت بالا می تواند به صورت زیر نوشته شود:
کد PHP:


Customer c = new Customer { Name="James" };

مقدار دهی Collection
کد PHP:


MyList list = new MyList();
list.Add(1);
list.Add(2);

عبارت بالا می تواند به صورت زیر نوشته شود:
M کد PHP:


yList list = new MyList { 1, 2 };

فرض کنید که اجزای MyList و System.Collections.IEnumerable دارای متد عمومی Add هستند.

انواع داده ای بی نام
کد PHP:

var x = new { FirstName="James", LastName="Frank" };


C# 2.0توابع بی نام را معرفی کرد. C# 3.0هم انواع بی نام را معرفی می کند.با استفاده از این ویژگی برنامه نویسان قادر خواهند بود به صورت Inline انواع دلخواه خود را ایجاد کنند.به نمونه زیر توجه کنید:
کد PHP:

static void Main(string[] args)
{
var anonymousType = new { Name = string.Empty, Age = 0 };
}


کد ارائه شده، یک نوع بی نام را تعریف می کند که از طریق متغیر ضمنی محلی به نام anonymousType در اختیار قرار می گیرد.

چرا Anonymous types؟ انواع بی نام بهترین گزینه برای تولید Entity Typeها می باشند.همانطور که گفته شد Entity Typeها فقط حاوی داده ها هستند.بنابراین به بهترین نحو می توان داده های دریافت شده از کاربر را در انواع بی نام بسته بندی کرد.

Borna66
05-25-2011, 10:20 PM
نتیجه نوع متغیر محلی

کد PHP:


var x = new Dictionary<string, List<float>>();

کد بالا با کد زیر قابل تعویض می باشد:
کد PHP:

Dictionary<string, List<float>> x = new Dictionary<string, List<float>>();

این ویژگی تنها یک ntactic sugarراحت برای کوتاه تر بیان کردن متغیرهای محلی نمی باشد، بلکه برای تعریف متغیرهای بی نام لازم نیز است.

عبارات لامبدا :

عبارات لامبدا یک راه کوتاه برای نوشتن مقادیر توابع بی نام کلاس اول را فراهم می کنند. دو مثال زیر را در نظر بگیرید:
کد PHP:


listOfFoo.Where(delegate(Foo x) { return x.Size > 10; })
listOfFoo.Where(x => x.Size > 10);

در مثال های فوق، عبارات لامبدا صرفا یک نوع سینتکس برای delegateهای بی نام با مقادیر دارای بازگشت هستند.هر چند با توجه به نوع متن استفاده می شوند، کامپایلر #C می تواند لامبداها را به ASTها نیز تبدیل کند تا بعدا در زمان اجرا نیز بتوانند پردازش شوند.در مثال فوق، اگر listOfFoo یک مجموعه ساده داخل حافظه نباشد، ولی یک پوشه در اطراف جدول بانک اطلاعاتی می باشد. این تکنیک می تواند برای بهینه کردن اجرا، برای ترجمه بدنه لامبدا به عبارت معادل آن در SQL استفاده شود.در هر یک از دو راه فوق، خود عبارت لامبدا دقیقا شبیه کد به نظر می رسد، بنابراین روش استفاده در زمان اجرا، برای کاربر ناپیدا می باشد.

یکی از ویژگی هایی کهC# 2.0 ارائه کرد، توانایی تعریف توابع به صورت Inline بود که این ویژگی با عنوان توابع بی نام (anonymous methods) شناخته می شود. توابع بی نام در پاره ای مواقع بسیار مفیدند. اما نحو(syntax) به کارگیری آنها دشوار می باشد. عبارات لامبدا ویژگی توابع بی نام را دارند اما با نحو ساده تری در C# 3.0معرفی شده اند.به نمونه زیر توجه کنید:
کد PHP:


static void Main(string[] args)
{
(int x) => x + 1; // explicitly typed parameter
(y, z) => y z; // implicitly typed parameter
}

تعریف عبارات لامبدا از نحو (syntax) خاصی پیرو می کند. همانطور که در کد بالا مشاهده می کنید، پارامترهای تابع هم به صورت صریح و هم به صورت ضمنی قابل بیان اند. کلمه return به صورت ضمنی حذف شده است. تابع معادل عبارت لامبدای اول به صورت زیر است:
کد PHP:


int Fn(int x)
{
return x+1;
}

لیست پارامترها و بدنه عبارت لامبدا توسط => از هم جدا می شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می توان بدنه آن را با استفاده از {} نشان داد.
کد PHP:


static void Main(string[] args)
{
(int x) => { x + 1; return x x; };
}


خواص خودکار

کامپایلر به طور خودکار یک متغیر نمونه خصوصی و قرار دهنده و قرار گیرنده مناسب تولید می کند، مانند :
کد PHP:


public string Name { get; private set; }


توابع بسط داده شده

توابع بسط داده شده حالتی از سینتکس Suger هستند که امکان اضافه کردن متد جدید به کلاس موجود را بیرون از حوزه تعریف آن فراهم می کنند.در این مثال، تابع بسط داده شده یک تابع ایستا است که قابل فراخوانی توسط تابع مشابه می باشد.گیرنده فراخوانی مقید به اولین پارامتر تابع تحت عنوان this می باشد:
کد PHP:


public static class StringExtensions
{
public static string Left(this string s, int n)
{
return s.Substring(0, n);
}
}

string s = "foo";
s.Left(3); // same as StringExtensions.Left(s, 3);

زبان سی شارپ کلمه کلیدی sealed را برای این منظور ارائه کرد که امکان ارث بری از یک کلاس را صلب کند. یعنی با اضافه شدن این کلمه کلیدی به ابتدای تعریف کلاس، امکان ارث بری از آن غیر ممکن می شود. C# 3.0 ویژگی جدیدی را در اختیار برنامه نویسان قرار می دهد به این صورت که می توان هر نوع کلاسی حتی کلاس های مهر شده با Sealed را با استفاده از Extension methodsبسط داد.

توابع جزئی

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

متغیرهای ضمنی محلی :

C# 3.0 کلمه کلیدی جدید var را معرفی می کند که به کمک آن برنامه نویسان قادر خواهند بود متغیرهای محلی خود را بدون ذکر صریح نوع آن ها، تعریف کنند.
کد PHP:


namespace CS3_Test
{
class Program
{
static void Main(string[] args)
{
var string_value = «Hello C# 3.0»;
var int_value = 3;
}
}
{


یکی از ویژگی های اصلی زبان سی شارپ،Strong Type بودن آن است. Strong Type بودن زبان به این معناست که با اعلان یک متغیر، نوع آن صریحا باید توسط برنامه نویس مشخص شود. آیا اضافه شدن این ویژگی جدید، منافاتی با Strong Type بودن این زبان دارد؟در پاسخ باید گفت که تعریف متغیرهای محلی به صورت ضمنی با استفاده از کلمه کلیدی var هیچ گونه منافاتی با Strong Type بودن سی شارپ ندارد. چون برنامه نویس می بایست نوع متغیر را به هنگام اعلان آن صریحا مشخص کند.نوع متغیر پس از اولین اعلان تا اتمام حوزه تعریف آن تغییر نخواهد کرد و هر گونه تلاش برای تغییر نوع با خطا مواجه خواهد شد.بنابراین دو اعلان زیر نامعبر هستند:
کد PHP:


namespace CS3_Test
{
class Program
{
static void Main(string[] args)
{
var string_value; // Error : Implicitly typed locals must be inintialized
var int_value = null; / Error : Cannot assign '<null>' to an implicitly typed local /
}
}
}


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

 سازنده های پیشرفته : ماهیت تمامی برنامه های امروزی به گونه ای ست که با حجم عظیمی از داده ها سرو کار دارند.برای مدیریت داده ها، نیاز به کلاس هایی ست که در مهندسی نرم افزار آنها را Entity Types می نامیم.این کلاس ها به عنوان بسته هایی از داده ها محسوب می شوند.معضل فعلی موجود در رابطه با Entity Typeها تعدد سازنده های آن ها می باشد و ممکن است شما نیز با این مشکل برخورد کرده باشید.به این صورت که در سناریوهای مختلف، برنامه نویسان مجبور هستند سازنده یک کلاس را به چند شکل سربارگذاری کنند.C# 3.0 راه چاره ای فوق العاده برای این مشکل ارائه می دهد. Object initializer حالت پیشرفته ای از سازنده می باشد.



class Person
{
private string firstname;

public string FirstName
{
get { return firstname; }
set { firstname = value; }
}

private string lastname;

public string LastName
{
get { return lastname; }
set { lastname = value; }
}

private int age;

public int Age
{
get { return age; }
set { age = value; }
}
}


این کلاس شامل سه متغیر بوده و برای هر متغیر خاصیتی تعریف شده است.اینک این سوالات مطرح می شوند : سازنده این کلاس را به چند شکل باید سربارگذاری کرد؟ سازنده ای که هر سه متغیر را مقداردهی کند؟ شاید در مواردی هر سه متغیر در دست نباشد در این صورت چه سازنده ای باید فراخوانی شود؟ C# 3.0 راه حل زیر را ارائه می دهد.فرض کنید بخوانیم نمونه ای ازکلاس Person را ایجاد کنیم. همانطور که مشاهده می کنید،در C# 3.0 به هنگام نمونه سازی، این امکان در اختیار برنامه نویس قرار می گیرد که هر یک از خصیصه های موجود در کلاس را به دلخواه و بنا به نیاز مقدار دهی کند به صورت زیر :



Person person = new Person
{
Age = 21,
FirstName = «Mohamad Sadegh»,
LastName = "Mozafari"
};

 عبارات جست و جو (Query Expression) : تیم طراح سی شارپ ویژگی فوق العاده ای را به آن اضافه کرد که برنامه نویسان را قادر می سازد نحو (Syntax) زبان های پرس و جو مانند SQL و XQuery را با استفاده از این زبان پیاده سازی کنند. این ویژگی با نام اختصاری LINQ شناخته می شود و دارای انواع زیر است:

§ LINQ-to-Objects - talks to in-memory objects

§ LINQ-to-SQL - talks to SQL Server databases

§ LINQ-to-XML - talks to hierarchical data represented in XML

§ LINQ-to-DataSets - talks to DataSet objects and underlying DataTables with their relationships


§ LINQ-to-Entities - talks to "entities", part of ADO.NET 3.0

نمونه ای از کاربرد LINQ به صورت زیر است:
کد PHP:


static void Main(string[] args)
{
var int_array = new int[] { 1, 2, 7, 9, 12 };

var selective_array = from c in int_array where c > 0 select c;

foreach (var selected in selective_array)
{
Console.WriteLine(selected);
{
}


توضیح : در مثال بالا ابتدا یک آرایهٔ int با مقداردهی اولیه تعریف شده است.سپس با استفاده از دستورات) LINQ که جز کلمات کلیدی سی شارپ محسوب می شوند)، آرایه ای با اعضای بزرگتر از 5 انتخاب و در متغیر ضمنی محلی selective_array ذخیره می شود.در نهایت اعضای selective_array به صورت 7 و 9 و 12 خواهد بود.در توضیح این ویژگی جدید به همین یک مثال بسنده می کنیم چون بیان تمامی جنبه های LINQ خود نیازمند نگارش مقاله ای مفصل می باشد.

 آرایه های نوع ضمنی :آرایه ها را نیز می توان با استفاده از کلمه کلیدی var تعریف کرد.
کد PHP:



static void Main(string[] args)
{
var a = new[] { 1, 10, 100, 1000 }; // int[]
var b = new[] { 1, "one", 2 }; // Error
}

Borna66
05-25-2011, 10:22 PM
یش پردازنده

ویژگی «دستورات پیش پردازنده» سی شارپ(اگرچه آنها به واقع یک پیش پردازنده نیستند) مبنی بر دستورات پیش پردازنده C است که به برنامه نویس اجازه تعریف سمبلهایی را می دهند.برخی از این دستورات عبارتند از : #if ، #region ، #define . راهنماهایی نظیر #region تذکراتی به ویرایش گرها برای code foldingمی دهند.

توضیحات کد

توضیحات تک خط با استفاده از دو اسلش تعریف می شوند(//) و توضیحات چند خطی با / شروع و به / ختم می شوند.
کد PHP:


public class Foo
{
// a comment
public static void Bar(int firstParam) {} //Also a comment
}

public class FooBar
{
/ a comment /
public static void BarFoo(int firstParam) {} / Also a comment /

توضیحات چند خطی هم چنین می توانند با / شروع و با / تمام شوند.
public class Foo
{
/ A Multi-Line
comment /
public static void Bar(int firstParam) {}
}

سیستم مستند سازی XML

سیستم مستند سازی سی شارپ بسیار شبیه به جاوا است ، اما مبنی بر XML. دو شیوه مستند سازی در حال حاضر به وسیله کامپایلر سی شارپ پشتیبانی می شود.

توضیحات تک خطی،که معمولا در تولید کننده کد Visual Studioپیدا می شوند، با استفاده از /// شروع می شوند.
کد PHP:


public class Foo
{
/// <summary>A summary of the method.</summary>
/// <param name="firstParam">A description of the parameter.</param>
/// <remarks>Remarks about the method.</remarks>
public static void Bar(int firstParam) {}
}

توضیحات چند خطی،که در نسخه 1.0 تعریف شدند ،اما در نسخه 1.1 پشتیبانی از آنها وجود نداشت با / شروع و به / ختم می شوند:
کد PHP:


public class Foo
{
/ <summary>A summary of the method.</summary>
<param name="firstParam">A description of the parameter.</param>
<remarks>Remarks about the method.</remarks> /
public static void Bar(int firstParam) {}
}

نکته:در اینجا یک ملاک سخت در مورد استفاده از فضاهای خالی در سندهای XML هنگام استفاده از / وجود دارد:
کد PHP:


/
<summary>
A summary of the method.</summary> /

نوع دیگری از کد بالا ارائه خواهد شد:
کد PHP:


/
<summary>
A summary of the method.</summary> /

سینتکس سندسازی توضیحات XML در یک ضمیمه بی قاعده از استاندارد ECMAاز #C وجود دارد. یک استاندارد مشابه قوانینی برای پردازش توضیحات و تبدیل آنها به متون Plain در XML را با کمک قوانین CLI فراهم می کند. این به هر IDE در #C و دیگر ابزار گسترش دهنده امکان پیدا کردن هر نمادی را در کدها می دهد.

(CLR(Common Language Runtime

بخش مرکزی .NET Framework ، محیط اجرایی Runtime می باشد که اصطلاحاً به آن CLR یا .NET Runtime می گویند.کدهایی که تحت کنترل CLR اجرا می شوند اغلب به عنوان کدهای مدیریت شده نامیده می شوند.

اگر چه،پیش از این که کدها(همه زبان های .NET ) به وسیله CLR اجرا شوند،بایستی مورد کامپایل قرار گیرند.در .NET عمل کامپایل در دو مرحله صورت می گیرد:

1) کامپایل سورس کد به MSIL.

2) کامپایل MSIL به کد مختص پلتفرم به وسیله CLR


یک نکته قابل توجه، اشتراک زبان میانی مایکروسافت با کد بایت جاوا(Bytecode)است.ایدة این اشتراک از آنجا سرچشمه گرفت که چون Bytecode یک زیان سطح پایین با یک دستور زبان ساده می باشد(که به جای متن مبتنی بر کدهای عددی است) ،می تواند به سرعت به کدهای بومی(Native) ترجمه شود.


برخی ویژگی های MSIL

 شی گرایی و بکارگیری واسط ها

 تمایز فراوان بین انواع مقداری و ارجاعی

 تعیین Strong Type(نوع داده Variantدیگر معتبر نیست)

 مدیریت خطا از طریق به کارگیری Exceptio

 بکارگیری صفات


اشکالات
پلتفورم

منبع .NET مایکروسافت برای اجرا فقط ویندوز است .پیاده سازی های دیگری برای اجرای برنامه های سی شارپ در ویندوز، لینوکس،BSD یا Mac OS X[[]] وجود دارند اما هنوز کامل نیستند : Mono و DotGNU در نوامبر سال 2002 توسط مایکروسافت(نسخه 1.0) برای پیاده سازی CLI برای کار در Free BSD و Mac OS X 10.2 ارائه شد ، اما نسخه های بعدی آنها فقط قابل اجرا بر روی ویندوز بود.

پیشرفت در آینده

نسخه بعدی این زبان، 4#C است که از اکتبر سال 2008 در حال ساخته شدن است.ماکروسافت لیستی از ویژگی های جدید 4#C را در کنفرانس توسعه دهندگان حرفه ای اعلام کرده است.تمرکز اصلی در ورژن بعدی روی قابلیت هماهنگی فریم ورک ها و نوع زبان هایی است که کامال پویا یا قیمتی پویا هستند، مانند dynamic language runtime و COM. ویژگی های زیر تا کنون اعلام شده اند:

پارامترهای نوع generic از نوع Covariant و contravariant:

پارامترهای واسط های generic و deletageها می توانند با استفاده از کلمات out و in از دو نوع Covariant و contravariant باشند.این تعیین نوع ها بعدا برای تبدیل انواع به یکدیگر، چه از نوع صریح یا مجازی و چه از نوع compile-time یا run-time به کار می رود.به عنوان مثال، واسط IEnumerable<T> در زیر دوباره تعریف شده است:
کد PHP:


interface IEnumerable<out T>
{
IEnumerator<T> GetEnumerator();
}

بنابراین، هر کلاس مشتق شده ای که از IEnumerable<Derived> استفاه کرده باشد، با تمام کلاس های پایه که IEnumerable<Base> را دارند سازگار است.به عنوان تمرین، کد زیر نوشته شده است:
کد PHP:


void PrintAll(IEnumerable<object> objects)
{
foreach (object o in objects)
{
Console.WriteLine(o);
}
}
IEnumerable<string> strings = new List<string>();
PrintAll(strings); // IEnumerable<string> is implicitly converted to IEnumerable<object>

برای contravariance، رابط IComparer<T> به صورت زیر دوباره تعریف شده است:
public interface IComparer<in T>
{
int Compare(T x, T y);
}

بنابراین، هر کلاسی که IComparer<Base> را برای یک کلاس پایه بیان می کند، با IComparer<Derived> در تمام واسط ها و کلاس هایی که از آن کلاس پایه مشتق شده اند، سازگار است. این امر نوشتن کد زیر را میسر می سازد:
کد PHP:


IComparer<object> objectComparer = GetComparer();
IComparer<string> stringComparer = objectComparer;

جستجوی عضو پویا

در سیستم انواع داده های #C یک نوع جدید با نام شبه-نوع معرفی شده است که مانند System.Object رفتار می کند، ولی در ادامه، هر دسترسی به اعضا یا برنامه هایی که از این نوع استفاده می کنند، بدون چک شدن نوع داده هایشان اجازه کار دارند و تجزیه آنها تا زمان اجرا به تعویق می افتد. به عنوان مثال:
کد PHP:


// Returns the value of Length property or field of any object
int GetLength(dynamic obj)
{
return obj.Length;
}

GetLength(«Hello, world»); // a string has a Length property,
GetLength(new int[] { 1, 2, 3 }); // and so does an array,
GetLength(42); // but not an integer - an exception will be thrown here at run-time

صدا زده شدن های متد پویا، مانند پارامترهای صریح یا مجازی با مقدار نوع dynamic راه اندازی می شوند. به عنوان مثال:
کد PHP:


void Print(dynamic obj)
{
Console.WriteLine(obj); // which overload of WriteLine() to call is decided at run-time
}

Print(123); // ends up calling WriteLine(int)
Print("abc"); // ends up calling WriteLine(string)

جستجوی پویا تحت سه مکانیزم مشخص اجرا می شود: COM IDispatch برای اشیا COM ، رابط IDynamicObject DLR برای اشیا دارای این واسط و Reflection برای بقیه اشیا.بنابراین هر کلاس #C می تواند صدا زده شدن های پویای خود را با اجرای IDynamicObject در نمونه های خود جدا کند. در مورد متدهای پویا و مشخص کننده صدا زدن ها، تجزیه و تحلیل اضافه بار مطابق انواع اصلی که به عنوان آرگومان ها هستند، در زمان اجرا اتفاق می افتد، در غیر این صورت بر اساس قوانین تجزیه و تحلیل اضافه بار #C عمل خواهد شد.به علاوه، در مواردی که در صدا زدن پویا، گیرنده خودش پویا نیست، تجزیه و اضافه بار زمان اجرا تنها به متدهایی که در زمان کامپایل به صورت گیرنده ظاهر شده اند، رسیدگی می کند. به عنوان مثال:
کد PHP:


class Base
{
void Foo(double x);
}

class Derived : Base
{
void Foo(int x);
}

dynamic x = 123;
Base b = new Derived();
b.Foo(x); // picks Base.Foo(double) because b is of type Base, and Derived.Foo(int) is not exposed
dynamic b1 = b;
b1.Foo(x); // picks Derived.Foo(int)

هر مقداری که توسط دستیابی به عضو پویا برگردانده شده باشد، خودش از نوع پویا است.مقادیر نوع پویا به سایر نوع ها و از سایر نوع عا قابل تبدیل هستند. در نمونه کد بالا، این امر به تابع GetLength اجازه با مقدار بازگردانده شده از Length بدون هیچ صریحی به عنوان integer استفاده کند.در زمان اجرا، مقدار واقعی به نوع خواسته شده تبدیل می شود.

کلمه کلیدی اختیاری ref

در حال حاظر کلمه کلیدی ref برای متدهای صدا زننده اختیاری است. کد زیر را در نظر بگیرید:
کد PHP:


void Increment(ref int x)
{
++x;
}

int x = 0;
Increment(ref x);

به صورت زیر هم می تواند نوشته شود:
void Increment(ref int x)
{
++x;
}

int x = 0;
Increment(x);

آرگومنت های نام گذاری شده و پارامترهای اختیاری

در 4#C پارامترهای اختیاری ای با مقادیر پیش فرض موجود در ++C معرفی می شوند. به عنوان مثال:
کد PHP:


void Increment(ref int x, int dx = 1)
{
x += dx;
}

int x = 0;
Increment(ref x); // dx takes the default value of 1
Increment(x, 2); // dx takes the value 2

به علاوه، برای کامل کردن پارامترهای اختیاری، می توانید صریحا نام پارامترها را در صدازدن های متدها تعیین کنید.این کار به شما اجازه تصویب کردن انتخابی برای هر زیر مجموعه اختیاری از پارامترهای متد را می دهد.تنها محدودیت موجود این است که پارامترهای نام دار باید بعد از پارامترهای بدون نام بیایند.نام پارامترها می توانند برای هر دو نوع پارامترهای اختیاری و ضروری تعیین شوند و می توانند برای بهبود خوانایی و فراخوانی دوباره آرگومان ها مفید باشند. به عنوان مثال:
کد PHP:


Stream OpenFile(string name, FileMode mode = FileMode.Open, FileAccess access = FileAccess.Read) { ... }

OpenFile(«file.txt»); // use default values for both "mode" and "access"
OpenFile(«file.txt», mode: FileMode.Create); // use default value for "access"
OpenFile(«file.txt», access: FileAccess.Read); // use default value for "mode"
OpenFile(name: «file.txt», access: FileAccess.Read, mode: FileMode.Create); // name all parameters for extra readability, and use order different from method declaration

با پشتیبانی از پارامترهای اختیاری، کد بالا می تواند به صورت زیر خلاصه شود:
کد PHP:


doc.SaveAs(«Test.docx»);

کتابخانه ها

جزئیات مشخصات #C، حداقل تعداد نوع ها و کتابخانه های کلاس است که کامپایلر نیاز به وجود آن ها دارد.عملا، اغلب #C توسط بیشترین استفاده از CLI را می کند، که استاندارد شده ECMA-335 است.

Borna66
05-25-2011, 10:23 PM
زبان برنامه نویسی فورترن FORTRAN

زبان خیلی عجیب و جالبی است - بعدا دربارش حرف میزنم ( شاید هم اموزش دادم )

فورترن (FORTRAN مخفف FORmula TRANslation) زبان برنامه نویسی مفسری است (ایستای کامپایل شده). زبان برنامه نویسی فورترن زبانی ساده و محاسباتی است و پروژه های بسیاری از رشته های فنی مهندسی به کمک این زبان نوشته و اجرا شده است.

این زبان در دهه۱۹۵۰ در شرکت آی بی ام توسط ۲۵ نفر از دانشمندان برجستهٔ رایانه به سرپرستی جان بکوس (John Backus) طراحی شد. فورترن اولین زبان برنامه نویسی سطح بالا است. نسخه های اخیر فورترن بر خلاف نسخه های قدیمی دارای قابلیت های شی گرایی هستند. فورترن دومین زبانی بود که از سوی انسی (ANSI) استاندارد شد تکامل آن را می توان در نسخه های پرشمار بعدی آن دید (فورترن ۶۶، فورترن۷۷، فورترن ۹۰، فورترن۹۵ و فورترن ۲۰۰۳). در فورترن سازگاری میان هر نسخه با نسخه پیشین هم چنان حفظ شد. از نسخه های جدید آن می توان به ویژوال فرترن اشاره کرد.


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

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

کد PHP:
I

J
K
L
M
N

Borna66
05-25-2011, 10:25 PM
زبان برنامه نویسی لیسپ Lisp

لیسپ یک زبان برنامه نویسی رایانه است که در سال ۱۹۵۸ به وسیلهٔ جان مک کارتی ابداع شده است. این زبان، مانند زبان برنامه نویسی پرولوگ، بیشتر برای برنامه نویسی هوش مصنوعی مورد استفاده قرار می گیرد. با توجه به اینکه زبان لیسپ از نحو ساده ای برخوردار است، تجزیه و پیاده سازی آن نسبتاً با سهولت انجام می شود.
متن برنامه های لیسپ عموماً از نمادها و لیست هایی از نمادها تشکیل می شود و بدین خاطر است که این زبان لیسپ (مخفف پردازش لیست) نامیده شده است. یکی از ویژگی های جالب زبان لیسپ این است که خود برنامه های لیسپ نیز لیست هستند و بنا بر این، می توان با برنامه ها به عنوان داده ها رفتار کرد و یا داده ها را به عنوان برنامه ارزیابی نمود.
لیسپ دارای گویش های مختلفی است که بعضی از آنها دارای قابلیت های شیءگرا نیز هستند. از این میان می توان به کامن لیسپ اشاره کرد.
در ابتدا لیسپ به عنوان علامتگذاری و نمادسازی ریاضیات و برای برنامه های کامپیوتری ابداع شد.زبان لیسپ به سرعت مورد توجه برنامه نویسان از جمله برای تحقیقات علمی هوش مصنوعی قرار گرفت.لیسپ یکی از ابتدائی ز بان های برنامه نویسی می باشد،ودر علوم کامپیوتر بر بسیاری از تفکرات و ایده ها پیشگام بود.لیسپ شامل ساختمان دادهٔ درخت،مدریت نگهداری اتوماتیک،برنامه نویسی پویا،برنامه نویسی شی گرا و کامپایلر مستقل می باشد.
نام لیسپ از زبان پردازش لیسپ گرفته شده است.لینک لیست یکی از قسمت های اصلی ساختمان دادهٔ زبان لیسپ است و سورس کد لیسپ از لیست ها ساخته شده است و می تواند به عنوان ساختمان داده عمل کند.پیشرفت و توسعهٔ سیستم ماکرو به برنامه نویسان اجازه می دهد تا ترکیب های جدید ویا حتی حیطهٔ زبان های برنامه نویسی ویژه ای را ایجاد کرده و در زبان لیسپ تعبیه کنند. قابلیت تبادل کدها و داده ها به زبان لیسپ قابلیت تشخیص ترکیب ها را می دهد،همهٔ کدهای برنامه به صورت عبارت های نمادین یا لیست های پرانتز گذاری شده نوشته شده اند.
یک تابع می تواند توسط خودش ویا توابع دیگر فراخوانی شود ویا طبق قواعد نحوی نوشتن یک لیست و استفاده از اول نام عملگرها و پیروی کردن از قواعد آرگومان ها ایجاد شود.به عنوان مثال تابع fدارای 3 آرگومان می باشد و به صورت مقابل توانائی فراخوانی را دارد و مورد استفاده قرار می گیرد:

کد PHP:


(f x y z)

زبان برنامه نویسی لیسپ توسط جان مک کارتی در سال 1958 در حالی که در مؤسسهٔ فناوری ماساچوست (MIT) بود ابداع شد.مک کارتی طرح خودش را در یک مقالهٔ مرتبط با انجمن ماشین آلات کامپیوتری در سال 1960 منتشر کرد.طرح وی در ابتدا به صورت «بخش اول:توابع بازگشتی از دید عبارت های نمادین و محاسبهٔ آنها توسط ماشین» ارائه شد و بخش دوم آن هیچگاه منتشر نشد.وی نشان داد که با یک تعداد ساده و کمی از عملگرها و علمتگذاری توابع می توان یک زبان تورینگ کامل برای الگوریتم ها ایجاد کرد. زبان پردازش اطلاعات اولین زبان هوش مصنوعی بود. از سال 1955 یا 1956 و پیش از آن ایده های بسیاری بر زبان لیسپ وارد شد از جمله پردازش لیست و توابع بازگشتی که در زبان لیسپ به کار برده شد. ثبت های اصلی مک کارتی به صورت عبارت های غیر نمادین که خواستار تفسیر کردن و برگرداندن به عبارت های نمادین بود.به عنوان مثال عبارت غیر نمادین car[consA,B معادل عبارت نمادین (car (cons A B)بود که در زبان لیسپ به کار گرفته شده بود.برنامه نویسان به سرعت عبارت نمادین را انتخاب و عبارت های غیر نمادین را ترک کردند.

لیسپ برای اولین بار توسط استفان راسل روی یک کامپیوتر IBM 704 اجرا شد. راسل مقالهٔ مک کارسی را مطالعه کرد و دریافت که توابع لیسپ می توانند در کد ماشین اجرا شوند. این نتیجه از مطالعه و دریافت راسل نشان می دهد که مفسر لیسپ می توانست برای اجرای برنامه های لیسپ و ارزیابی صحیح عبارت لیسپ استفاده شود.
دو زبان اسمبلی به عنوان دو عملیات اصلی و ابتدائی تجزیه و جدا کردن عناصر اصلی لیست برای IBM 704 شد.این دو زبان اسمبلی car (مضمون آدرس ثبات) و cdr (محتوای کاهش میزان ثبات ها) نسخهٔ لیسپ هنوز ازcar وcdr برای عملیاتی که اولین عنصر در یک لیست و باقی ماندهٔ لیست را برمی گرداند،استفاده می کند.
اولین کامپایلر تکمیل شدهٔ لیسپ،در سال 1962توسط تام هارت و مایک لوین در MIT اجرا شد، این کامپالر معرفی شده مدل لیسپ با کامپایلر نحوی در هر کامپایل و ترجمهٔ توابع می تواند به طور رایگان در هم بیامیزد.
زبان به کار گرفته شده در ثبت هارت و لوین نسبت به کدهای ابتدائی مک کارتی به شیوهٔ لیسپ مدرن و جدید نزدیک تر می باشد.

پیوستن به هوش مصنوعی:

بعد از شروع لیسپ ، لیسپ به انجمن تحقیقاتی هوش مصنوعی پیوست ، خصوصا به سیستم های PDP ، زبان لیسپ به عنوان پیاده ساز طرح کوچک زبان برنامه نویسی استفاده می شود که مبنایی برای سیستم معروف هوش مصنوعی SHRLU بود.
در سال 1970 تحقیقات علمی هوش مصنوعی به شاخه های تجاری انشعاب پیدا کرد که کارایی سیستم لیسپ موجود در این زمینه یک روند رو به رشد شد.

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

طی شک کوشش بزرگ نسخه های بیشماری از زبان لیسپ را در یک زبان واحد متمرکز و متحد کردند(نسخه های برجسته و قابل ملاحظه ای شامل: اینترلیسپ ، مک لیسپ ، متالیسپ ، و فرانزلیسپ) زبان های جدید (لیسپ عمومی و مشترک ) در اصل یک زیر مجموعهٔ سازگاری از نسخه های تعویض شده بود. در سال 1994 ، ANSI یک لیسپ عمومی و مشترک استاندارد منتشر کرد. لیسپ عمومی و مشترک زبان برنامه نویسی فناوری اطلاعات ANSI X3.226-1994 در آن زمان فروشگاه های جهانی برای لیسپ خیلی کوچکتر از المان بود.

ترکیب و معنا شناسی:

لیسپ یک عبارت جهتدار است ، برخلاف بیشتر زبان های دیگر ، بین عبارت ها و جمله ها تمایز و فرقی وجود ندارد . همهٔ کدها و داده ها به عنوان عبارت ها نوشته شده اند – زمانی که یک عبارت ارزیابی می شود یک مقدار ( یا یک لیستی از مقادیر) را می سازد ، که آن هم در داخل عبارات دیگر جاسازی می شود.
مقالهٔ 1958 مک کارتی دو نوع از ترکیب ها را معرفی کرد: عبارت نمادین Sexps هم نامیده می شود ، که بازتابی از نمایش داخلی کدها و داده هاست و عبارت غیر نمادین هرگز مورد توجه قرار نگرفت و تقریبا همهٔ زبان ها امروزه از عبارات نمادین استفاده می کنند.
استفاده از پرانتزگذاری ها تفاوت بسیار آشکار و مشهودی میان لیسپ و دیگر زبان های برنامه نویسی ایجاد کرده است . اسم مستعار LISP از Lost In Stupid Parenthese و یا Lost of Irritating Supper fluous parenthese گرفته شده است . هرچند ترکیب عبارت های نمادین مسئولی برای توان لیسپ است ، این ترکیب به شدت با قاعده و منظم است.

هرچند ترکیبات لیسپ به نمادگذاری قدیمی محدود نشده اند می تواند به سبک های دیگر توسعه پیدا کند. تکیه روی عبارت ها ، قابلیت انعطاف پذیری زیادی به زبان می دهد ، زیرا توابع لیسپ به صورت لیست نوشته شده اند ، آنها دقیقا مانند داده ها می توانند پردازش شوند، این قابلیت اجازه می دهد برنامه های لیسپ به سادگی و راحتی نوشته شوند و به نسبت برنامه های دیگر به راحتی اداره شوند . (برنامه نویسی غیر نمادین)بسیاری از نسخه های زبان لیسپ با عناصر جدا شده توسط فاصله های سفید و پرانتزگذاری شده ها نوشته می شود. برای مثال (1 2 f00 ) یک لیست است که عنصرهای آن سه اتم هستند ( اتم: کوچکترین عضو لیست ) : این مقادیر 1 و 2 و F00 هستند. این مقادیر ضمنا دارای نوع داده ای خاصی هستند ، مثلا این لیست دارای دو عدد صحیح 1 و 2 و یک نوع دادهٔ ویژهٔ لیسپ که یک Symbol یا نماد نامیده می شود.

همچنین یک لیست خالی () به عنوان یک اتم ویژهٔ صفر و یا پوچ معرفی شده است. موجودیت یک لیسپ از اتم و لیست تشکیل می شود. عبات ها به عنوان لیست نوشته شده اند ، استفاده کردن از ثبت های پیشوندی ، عناصر ابتدایی در لیست نامی از یک شکل تابع ، عملگرها ، ماکروها و یا اپراتورهای ویژه است.
آرگومان ها باقیمانده هایی از لیست ها هستند ، برای مثال تابع list آرگومان ها را به عنوان یک لیست بر می گرداند ، بنابراین عبارت (list ‘1 ‘2 ‘foo) ارزیابی می شود و حاصل این ارزیابی لیست (1,2,foo) می باشد.
نیازی به ارزیابی کردن اعداد نیست چون ارزیابی عدد 1 عدد 1 می شود.آرگومان های مثال قبل از اعداد هستند یعنی آرگومان های ویژه که این آرگومان ها از ارزیابی کردن آرگومان ها جلوگیری می کنند چون مقادیر آن ها مشخص است.هر عبارتی که بیان می شود قبل از اینکه با عبارات دیگر پیوست داده شود به صورت بازگشتی ارزیابی می شود.

(list(1 2 (list(3 4)))) در این مثال حاصل اررزیابی به صورت لیست (1,2(3,4)) می باشد ،توجه کنید این لیست دارای 3 آرگومان می باشد ، لیست ها می توانند به صورت تو در تو باشند . اپراتورهای حسابگر به صورت همسان رفتار می کنند.
حاصل عبارت (+1 2 3 4 ) عدد 10 می باشد. عبارت معادل عبارت بالا به صورت 1+2+3+4 می باشد که از نشانگذاری میان وندی استفاد شده است. اپراتورهای حسابگر در زبان لیسپ variadic(n-ary) که زبان لیسپ توانایی پذیرفتن هر تعداد آرگومان را داراست.

عملگرهای ویژه ساختمان کنترل لیسپ را آماده می کنند. برای مثال ، اپراتور ویژه if سه آرگومان می پذیرد،اگر اولین آرگومان صفر و یا خالی باشد دومین آرگومان ارزیابی می شود و در غیر این صورت هٔرگومان سوم بررسی می شود . بنابر این if(nill(list 1 2 “foo”)(list 3 4 “bar”) که تنها آرگومان (list 3 4 “bar”) بررسی می شود.

عبارت های لاندا(Lambda) :

دیگر عبارت های ویژه لاندا می باشد که برای وصل کردن متغیرها به مقادیرشان که درون یک عبارت ارزیابی می شوند استفاده می شود. این عملگر همچنین برای ایجاد کردن توابع هم استفاده می شود. آرگومان های درون لاندا یک لیستی از آرگومان ها هستند و عبارت ارزیابی توابع می باشند. مقادیر بازگشتی مقادیری از عبارت قبلی که ارزیابی شده اند هستند.
عبارت (Lambda(arg)(+arg1)) زمانی که این تابع به کار برده می شود به صورت یک تابع ارزیابی می شود و وظیفهٔ این تابع معرفی کردن یک آرگومان و اتصال دادن آرگومان به arg و در نهایت برگرداندن یک عدد بزرگتر از آرگومان قبلی می باشد عبارت های لاندا خیلی متفاوت با نام تابع رفتار نمی کند بنابراین اگر در عبارت
کد PHP:


(Lambda(arg)(+arg1))5->6

عدد 5 را وارد کنیم خروجی آن 6 می شود.

اتم ها : در نسخهٔ اصلی لیسپ دو نوع دادهٔ ابتدایی وجود دارد: اتم ها و لیست ها یک لیست یک رشتهٔ منظم و محدودی از عناصر می باشد ، که هر عنصر در درون خودش یکی از این اتم ها و یا لیست ها را دارد و یک اتم یک عدد یا یک نماد می باشد.
در اصل یک نماد یک رقم منحصر به فرد می باشدو به عنوان یک رشتهٔ عددی در سورس کد نوشته شده و هر دو به عنوان یک نام متغیر و یک رقم داده ای در پردازش نمادین استفاده می شود برای مثال list(foo(BAR 1)2) شامل سه عنصر : Symbol foo و list(BAR 1) و عدد 2 می باشد. تفاوت اصلی بین اتم ها و لیست ها این است که اتم ها تغییر ناپذیر و منحصر به فرد می باشند. دو اتم که دقیقا به یک صورت و به یک روش در یک شی نوشته شده باشد در مکان متفاوتی در سورس کد ظاهر می شوند، هر لیست یک شی مجزا می باشد و به خاطر اینکه مستقل از دیگر لیست هاست و از دیگر لیست ها به وسیلهٔ مقایسهٔ عملگرها مشخص می شود.

Cons ها و لیست ها:

یک لیست لیسپ یک لینک لیست جداست، هر ذره از این لیست یک Cons نامیده می شود و از دو اشاره گر که Car و Cdr نامیده می شوند ترکیب شده است این دو اشاره گر به ترتیب معادل دو فیلد Data و Next در مقالهٔ لینک لیست می باشد.
کد PHP:


Car -> Data Cdr -> Next

بسیاری از ساختمان داده ها می توانند ترکیب هایی از خانه های Cons را داشت باشند ، یکی از این ساختمان داده های ابتدایی لیست مخصوص نامیده می شود ، یک لیست مخصوص هر دو نماد لیست خالی nill و یا خانه ها Cons را داراستکه در هر یک از این خانه ها هر اشاره گر Car به یک داده اشاره می کند (که ممکن است این اشاره گر Cons به یک لیست اشاره کند) و یک اشاره گر Cdr به یک لیست مخصوص دیگر اشاره می کند. اگر یک Cons داده به سر یک لینک لیست برده شود سپس اشاره گر Car آن به اولین عنصر از لیست و اشاره گر Cdr آن به انتهای یک لیست اشاره می کند به همین دلیل عملکرد Car و Cdr را به ترتیب first و rest هم نامیده می شود.

ارایهٔ لیست عبارت نمادین:

نمایش پرانتزگذلری عبارت نمادین ساختمان لینک لیست . چندین راه برای نمایش لیست یکسان به عنوان یک عبارت نمادین وجود دارد . یک خانه (Cons ) می تواند به صورت نشان گذاری جفت نقطه گذاری شده نوشته شود به عنوان مثال (a.b) که در آن a یک Car و b یک Cdr است. یک لیست مخصوص بلند ممکن است به صورت یک نشان گذاری جفت نقطه گذاری شده نوشته شود .(a.(b.(c.(d.nill))))

طبق قرارداد کوتاه شدهٔ عبارت بالا به صورت (a b c d ) در نمادسازی لیست می باشد یک لیست مخصوص ممکن است در یک ترکیبی از دو صورت (a b c.d) نوشته شود . برای سیستمی از سه Cons که آخرین Cdr آن d است.

دستورالعمل های پردازش لیست:

لیسپ دستورالعمل های زیادی را برای دستیابی و کنترل لیست ها فراهم می کند . لیست ها می توانند مستقیما با پردازهٔ لیست ایجاد شوند .لیست هر تعدادی از آرگومان ها را می پذیرد و تعدادی از آرگومان ها را بر می گرداند.
کد PHP:


(list 1 2 ‘a 3 ); Output : (1 2 a 3 ) (list 1 ‘(2 3) 4 ); Output : (1 (2 3) 4)
به این دلیل راهی که لیست ها ایجادمی شوند از جفت های Cons (Car,Cdr) پردازهٔ Cons می تواند برای اضافه کردن یک عنصر به جلوی یک لیست استفاده شود. توجه کنید که پردازهٔ Cons در هدایت و به کار بردن آرگومان های لیست نامتقارن است ، بدین دلیل روش های لیست ها ایجاد می شوند.

کد PHP:



(Cons 1 ‘(2 3)); Output: (1 2 3 ) (Cons ’(1 2) ‘(3 4)) Output : ((1 2) 3 4)


پردازهٔ Oppend دو یا چند لیست را با هم ادغام می کند و یک لیست واحد ایجاد می کند زیرا لیست لیسپ یک لینک لیست است و پیچیدگی زمانی الحاق کردن لیست ها از مرتبهٔ پیچیدگی زمانی O(n) می باشد.
ساختار اشتراکی: لیست های لیسپ لینک لیست های ساده می توانند با یکی دیگر از لیست ها در ساختمان مشترک باشند به عبارت دیگر دو لیست می توانند دم یکسانی داشته باشندیا رشتهٔ پایانی از Cons های یکسانی داشته باشند مثلا:
کد PHP:


(setf foo (list 'a 'b 'c)) (setf bar (cons 'x (cdr foo)))


لیست foo و bar به ترتیب به صورت (a b c) و (X b c ) هستند هرچند دم (b c ) در هر دو لیست ساختار یکسانی دارند ولی مانند هم نیستند، خانه های Cons اشاره گر به b و c در محل حافظهٔ یکسانی برای هردو لیست قرار دارد.
ساختار اشتراکی سریع تر از کپی کردن می تواند به صورت چشمگیری کارایی را بهبود بخشند. هرچند ، این مهارت می تواند متقابلا در راه های نامطلوب با عملکردهایی که تغییرات لیست های گذشته روی آرگومان های آن تاثیر بگذارد ، اثر کند.

تغییرات یک لیست از قبیل تغییر دادن C با یک goose روی دیگری نیز تاثیر می گذارد setf (third foo) 'goose) که این تغییر نتیجه را به صورت (a b goose) تغییر می دهد اما bar هم تغییر می کند (X b goose) که ممکن است یک نتیجهٔ غیر منتظره باشد.

زبان های برنامه نویسی Lisp معمولا از یک خط دستور محاوره ای استفاده می کنند،که می تواند با یک محیط پیچیدهٔ گسترش یافته ترکیب شود.کاربر اصطلاحات و دستورات را در خط دستور وارد کرده یا با رهبری IDE آنها را به سیستم Lisp می فرستد. Lisp دستورات را می خواند ، آن ها را ارزیابی می کند و نتایج را چاپ می کند. به این دلیل است که خط دستور زبان Lisp به حلقهٔ Read-Eval-Print یا REPL معروف است.
نمونهٔ ساده ای از عملیات REPL در زیر آمده است. این یک شرح ساده است که بسیاری از المان های Lispواقعی در آن نمی آید مانند ماکروها و کوئت ها.

تابع read جملات متنی را به عنوان ورودی می پذیرد و آنها را به ساختار لیست تجزیه می کند. به عنوان مثال ، وقتی شما رشتهٔ (+ 1 2) را در اعلان تایپ می کنید، تابع read آن را به یک لیست پیوندی حاصل از 3 المان ترجمه می کند: علامت + ، عدد 1 و عدد 2 . خیلی اتفاق می افتد که لیست قسمت موثری از یک کد Lisp باشد که قابل ارزیابی است.به همین دلیل است که یک قطار از لیست به یک تابع نام عملگر مع می دهد.

تابع eval ساختار لیست را ارزیابی می کند و نوعی دیگر از ساختار را به عنوان نتیجه باز می گرداند.ارزیابی کردن لزوما تفسیر کردن معنی نمی دهد؛ بعضی سیستم های Lisp هر عبارتی را به زبان ماشین تبدیل می کنند. خیلی ساده است؛ به هر حال؛ برای تعریف ارزیابی به عنوان تفسیر : برای ارزیابی یک لیست که نام تابع دارد ، eval ابتدا تمام آرگومان های داده شده به cdr اش را ارزیابی می کند و سپس تابع را روی آن آرگومان ها اعمال می کند.در این مثال ، تابع عمل جمع است و به آرگومان های (1 2) اعمال می شود که نتیجه 3 است.این نتیجهٔ ارزیابی است.

این وظیفهٔ تابع print است که نتیجه را به کاربر نمایش دهد. برای نتیجهٔ سادهٔ 3 این کار ناقابل است. یک عبارت که با قسمتی از ساختار لیست ارزیابی می شود میاز دارد که print لیست را به حرکت در آورد و در خروجی به شکل یک عبارت S نمایش دهد.

برای اجرا کردن یک REPL در Lisp ، تنها لازم است که این سه تابع را اجرا کنید و یک تابع حلقه بی نهایت را.(به طور طبیعی اجرای eval پس از اجرای عملگرهای ویژه ای مانند if پیچیده خواهد شد.)یک REPL ساده به خودی خود با یک خط کد انجام شد: (loop(print(eval(red))))

لیست در اصل تعداد کمی ساختار کنترلی دارد. منتها در تکامل و گسترش زبان تعداد زیادی به آن اضافه شدند.(عملگر اصلی شرایط در زبان Lisp که cond بود بعدا متشکل شد از ساختار if-then-else )

برنامه نویسان در نسخهٔ Scheme حلقه ها را به صورت بازگشت دم( tail recursion ) بیان می کنند. موسسات متعارف علوم کامپیوتر Scheme بعضی دانشجویان را متعاقد می کند که تنها راه تکرار در زبان Lisp استفاده از بازگشت دم است؛ این اشتباه است. تمامی نسخه های متداول دیده شده از Lisp دارای ساختارهای الزامی برای تکرار هستند.درScheme دستور do به عنوان دستور حلقه پیچیدهٔ Lisp است. علاوه بر این مسالهٔ اصلی که شی گرایی را مهمتر از مسالهٔ فاعلی کرده این است که Scheme نیازهای ویژه ای برای کارکردن با فراخوانی دم(tail calls )دارد، در نتیجه دلیل ترغیب Scheme به استفاده از بازگشت دم این است که روش صراحتا با تعریف خود زبان پشتیبانی می شود .
در مقابل ، ANSI Common Lisp نیازی به بهینه سازی که معمولا به حذف فراخوانی دم گفته می شود ندارد. در نتیجه این حقیقت که بازگشت دم به عنوان یک جایگزین تصادفی برای استفاده از ساختارهای مبتنی بر تکرار ( مانند do dolist loop ) توصیه نمی شود تنها یک مسالهٔ برتری ادبی نیست ، ولی بالقوه یکی از کارآمدهاست ( بعد از این که این روش فقط به عنوان یک پرش ساده به کار نرفت) و به عنوان یک تصحیح برنامه است .

بعضی از ساختارهای کنترلی Lisp عملگرهای ویژه ای هستند ، هم ارز کلیدواژه های ترکیبی باقی زبان ها. عباراتی که این عملگرها استفاده می کنند ظاهری شبیه فراخوانی تابع دارد، تفاوت اینجاست که آرگومان ها ضرورتا نباید ارزیابی شوند یا در مورد تکرار شاید بارها ارزیابی شوند. در مقابل اکثر زبان های برنامه نویسی ، Lisp به برنامه نویسان اجازه می دهد با خود زبان ساختاهای کنترلی را پیاده سازی کنند.ساختارهای کنترلی زیادی در ماکروهای Lisp پیاده سازی می شوند و برنامه نویسان می توانند هر ماکرو را گسترش دهند ،برای آنانی که می خواهند بدانند چطور کار می کند.

هر دوی Lisp Commonو Scheme دارای عملگرهای کنترلی غیر محلی هستند.تفاوت این عملگرها یکی از عمیق ترین تفاوت ها مابین این دو نسخهٔ زبان است. Scheme از ورودی مستمر با استفاده از روش call/cc پشتیبانی می کند ، که به برنامه اجازهٔ ذخیره ( و بعدا بازیابی کردن) یک عملیات ویژه را می دهد . Common Lisp از ورودی مستمر پشتیبانی نمی کند ولی از راه های زیادی برای انجام رهایی از تکرار پشتیبانی می کند.

Borna66
05-25-2011, 10:30 PM
زبان برنامه نویسی ایکون

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

آیکون (Icon)، یک زبان برنامه نویسی بسیار سطح بالا است که برای آسان نمودن نوشتن برنامه هایی با هدف کار با رشته ها و ساختارها، طراحی شده است. این زبان هم مانند بسیاری از زبان ها از زبان دیگری مشتق شده است. زبان اصلی - که این زبان از روی آن طراحی شده است - SNOBOL است. SNOBOL در آزمایشگاه Bell Telephone در اوایل دهه 60 ساخته شد. بعد به زبان SNOBOL4 ارتقا یافت. که هم اکنون نیز از آن استفاده می شود. Icon در ظاهر ساختارش از SNOBOL4 تاثیر برداشته است. Icon یک زبان بسیار سطح بالا با ویژگی اجرای هدف گرا بوده و امکانات زیادی برای پردازش رشته ها و الگوهای متنی دارد. این زبان با SNOBOL که یک زبان پردازش رشته است مرتبط است. Icon شی گرا نیست، اما یک نمونه شی گرا که Idol نامیده می شد در سال 1996 گسترش یافت که سرانجام تبدیل به Unicon شد.

درباره آیکون

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

Icon یک زبان برنامه نویسی همه منظوره، با قابلیت های گسترده برای پردازش رشته ها (متن) و ساختارهای داده است. این زبان در دسته بندی زبان ها جز دسته زبان های امری طبقه بندی می شود. یک زبان با گرامری شبیه C و پاسکال. ولی با معنایی در سطح خیلی بالاتر، که با آن می توان کارهای پیچیده ای انجام داد.

Icon یک روش نو برای ارزیابی عبارات دارد سبب ارزیابی عبارت بر اساس هدف می شود. قابلیت چک کردن تطابق رشته ها را دارد که باعث دور شدن برنامه نویس از مشکلات ملال آور کار با رشته ها می شود. داده ساختارها درونی Icon شامل set ها و جدول ها با قابلیت داشتن لیست هایی است که بتوان از آن به عنوان vector استفاده کرد. سیستم type این زبان قوی است. تبدیل تایپ در این زبان به صورت خودکار انجام می شود. و اگر یک عددی، در جایی که باید رشته به کار رود استفاده شود، به صورت خودکار به رشته تبدیل می شود. چند پیاده سازی از icon قابلیت های سطح بالای گرافیکی، با رابط آسان کاربری وجود دارد. Icon مدیریت حافظه خودکار دارد، اشیا زمانی که به آنها احتیاج هست، در طول اجرا ساخته می شوند. و فضا با garbage collection آزاد می گردد. تنها محدودیت در طول رشته ها و ساختارهای داده، میزان حافظه موجود است.

کلمه Icon مخفف و بیان گر موضوع خاصی نیست. با این وجود وقتی این اسم را انتخاب می کردند به کلمه iconoclatis –به معنای بت شکنی - نیز اشاره هایی شد. این اسم قبل از این که این کلمه کاربرد کنونی خود را پیدا کند انتخاب شد. ممکن است بعضی ها فکر کنند که این زبان برای طراحی icon(نقشک) ساخته شده، ولی این طور نیست.

Icon برای چه کارهایی خوب است؟

یک زبان همه منظوره مثل Icon به درد اکثر کارهای برنامه نویسی می خورد. به خصوص برای ساخت ابزارهای نرم افزاری برای پردازش روی متن، و برای برنامه های تحقیقاتی و مطالعاتی مناسب است.این زبان برای راحت تر ساختن برنامه نویسی درست شده است، روی ارزش زمان برنامه نویس و اهمیت سریع به کار افتادن برنامه توجه می کند. به صورت متداول این زبان برای کارهای کوتاه، کارهایی که یک بار می توان آن ها را انجام داد و انجام آن (نه کیفیت انجام) مهم است و کارهای بیش از حد پیچیده است.

ویژگی های زبان Icon


[ ]زبان سطح بالا، همه منظوره
[ ]احتیاجی به ; در آخر خط ها ندارد.
[ ]توجه به بالا بردن بهره وری برنامه نویس
[ ]تابعی بودن
[ ]مقدارها type دارند. متغییرها ندارند. (هر مقداری را قبول می کنند)
[ ]حوزه ایستا (عمومی یا محلی) static scoping
[ ]همه اعداد دقت اختیاری دارند.
[ ]String نوع داده اولیه محسوب می شود.
[ ]Listهایی دارد که مثل آرایه، صف و یا پشته عمل می کنند.
[ ]شی گرا نیست.
[ ]همروندی ندارد.
[ ]کتابخانه بزرگی از توابع دارد.


نحو پایه

زبان Icon از خانواده ALGOL زبانهای برنامه نویسی ساخت یافته است مشتق شده است و بنابراین نحوی شبیه به C یا Pascal دارد. Icon بیشتر شبیه به Pascal است، از نحو := برای تخصیص، کلمه کلیدی procedure و نحو مشابه آن استفاده می کند. از طرف دیگر Icon از سبک پرانتزهای C برای ساخت یافته سازی گروه های اجرایی استفاده می کند و اجرای برنامه ها با رویه ای به نام main آغاز می شود. از خیلی جهات Icon همچنین خصوصیاتی شبیه به بسیاری از زبان های برنامه نویسی اسکریپتی دارد (مانند SNOBOL): الزامی برای تعریف متغیرها نیست، انواع بطور اتوماتیک تعیین می شوند، و اعداد می توانند بطور اتوماتیک به رشته ها تبدیل شوند و برعکس. ویژگی دیگری که در زبان های اسکریپتی رایج است، اما نه در همه آنها، استفاده از کاراکتر پایان خط است، در Icon، خط ها با نقطه و ویرگول پایان نمی یابند و اگر منطقی باشد با نقطه و ویرگول ضمنی پایان می یابند. رویه ها بلوک های پایه برنامه های Icon هستند، و اگرچه آنها از نام گذاری Pascal استفاده می کنند اما بیشتر شبیه توابع C عمل می کنند و می توانند مقادیری را برگردانند، در Icon کلمه کلیدی function وجود ندارد.
کد PHP:


procedure doSomething(aString)
write(aString)
end

اجرای هدف گرا

یکی از مفاهیم کلیدی Icon این است که ساختارهای کنترلی، بجای boolean منطقی در بسیاری از دیگر زبان های برنامه نویسی، بر اساس عبارات "success" یا "failure" پایه گذاری شده اند. در این الگو، مقایسه های ساده مانند if a<b مانند دیگر زبان ها، به معنی « اگر عمل سمت راست درست ارزیابی شود » نیست، در عوض چیزی مثل « اگر عملیات سمت راست موفقیت آمیز باشند » معنی می دهد. در این حالت عملگر < موفقیت آمیز است اگر مقایسه درست باشد، بنابراین نتیجه نهایی نیز همین است. علاوه براین، عملگر < اگر موفقیت آمیز باشد، متغیر دومی را برمی گرداند، که اجازه می دهد چیزهایی شبیه if a<b<c، که یک شکل مقایسه رایج است و در اکثر زبانها بطور مستقیم قابل استفاده نیست، نوشته شوند.

کاربرد این مفهوم در ارتباط با مثالهای دنیای واقعی واضح تر شود. بنابراین Icon از موفقیت یا شکست برای همه جریانهای کنترلی استفاده می کند، مانند این نمونه کد:
کد PHP:


if a := read() then write(a)

این کد یک خط از ورودی استاندارد را در خروجی استاندارد کپی خواهد کرد. چیزی که در مورد مثال مورد توجه است این است که حتی اگر read() ایجاد خطا کند، کد کار خواهد کرد، مثلا اگر فایل موجود نباشد. در این حالت وضعیت a:=read() موفقیت آمیز نخواهد بود و به سادگی، write فراخوانی نخواهد شود. موفقیت و شکست در توابع به سمت بالا منتقل می شوند به این معنی که شکست در یک تابع تو در تو باعث می شود توابعی که آن را فراخوانی می کنند نیز با شکست روبرو شوند. برای نمونه، ما می توانیم در یک خط، برنامه ای بنویسیم که همه یک فایل ورودی را خروجی کپی کند :
کد PHP:


while write(read())

هنگامی که دستور read() شکست می خورد، برای مثال در انتهای فایل، شکست بطور زنجیره ای بالا خواهد آمد و write() نیز به همین ترتیب شکست می خورد. while که یک ساختار کنترلی است، با شکست متوقف می شود، به این معنی که فایل خالی می باشد. برای مقایسه، مثالی مشابه این را در pseudocode براساس Java می بینیم :
کد PHP:


try {
while ((a = read()) != EOF) {
write(a);
}
} catch (Exception e) {
// do nothing, exit the loop
}

در این حالت دو مقایسه نیاز است، یکی برای انتهای فایل (EOF) و دیگری برای تمام دیگر خطاها. چون Java اجازه نمی دهد خطاها مانند عبارات منطقی مقایسه شوند، مانند Icon، باید نحو طولانی try/catch بجای آن استفاده شود. همچنین بلوک های try در عمل یک هزینه اضافی را، حتی اگر خطایی رخ ندهد، تحمیل می کنند، یک هزینه توزیعی که Icon از آن اجتناب می کند. بنابر این مفهوم، اجرای هدف گرا در Icon به این معناست که تا زمانی که برخی اهداف محقق شوند، اجرا ادامه می یابد. در مثال بالا هدف خواندن تمام فایل است. دستور خواندن تا زمانی ادامه می یابد که اطلاعاتی برای خواندن موجود باشد، و وقتی اطلاعاتی نباشد، شکست می خورد. بنابراین در این زبان، بجای استفاده از بررسی وضعیت بازگشت ها یا ساختارهای مشابه، هدف مستقیما در کد آورده می شود.

مولدها

عبارات در Icon اغلب فقط یک مقدار برمی گردانند، برای نمونه، x<5 با موفقیتی با مقدار 5 یا شکست ارزیابی خواهد شد. مثال هایی از every و to. every سبب می شود تا to تا زمانی که شکست بخورد به برگرداندن مقادیر ادامه دهد. مولدها یکی از مفاهیم کلیدی در Icon هستند. مولدها بسیاری از ساختارهای حلقه ای را، بصورت بسیار صریح تر، در این زبان هدایت می کنند. برنامه نویس حلقه ای نمی نویسد و نیازی به مقایسه شرط نیست، Icon همه این کارها را برای او انجام می دهد. Icon شامل چندین مولدساز است. نحو alternator اجازه می دهد یک سری از آیتم ها، تا هنگامی که یکی شکست بخورد، به ترتیب تولید شوند: 1 | "hello" | x<5، اگر x از 5 کمتر باشد، می تواند "1"، "hello" و "5" را تولید کند. متناوب سازها می توانند در بسیاری از حالت ها مانند "or" خوانده شوند، برای نمونه :
کد PHP:


if y < (x | 5) then write(«y=», y)

اگر از x یا 5 کوچکتر باشد، این کد مقدار y را در خروجی خواهد نوشت. Icon بصورت ساختاری تمام مقادیر را از چپ به راست چک می کند تا اولین موفقیت رخ دهد یا لیست خالی شود و شکست را برگرداند. یادآوری می شود که توابع فقط تا زمانی که فراخوانی های شامل آنها شکست نخورد، فراخوانی خواهند شد، بنابراین این مثال را می توان بصورت کوتاه تر، به شکل زیر نوشت :
کد PHP:


write(«y=», (x | 5) > y)

یک مولد ساده دیگر to است که می تواند اعداد صحیح تولید کند، every write(1 to 10) دقیقا همانگونه که نشان می دهد عمل خواهد کرد. نحو bang هر آیتم یک لیست را تولید می کنند. every write(!aString) هر کاراکتر aString را در یک خط جدید خواهد نوشت. اثبات قدرت این مفهوم، مقایسه عملگرهای رشته است. اغلب زبانها تابعی با نام find یا indexOf دارند که موقعیت یک رشته را در رشته دیگر برمی گرداند. در مقایسه با :
کد PHP:


s = «All the worlds a stage. And all the men and women merely players»;
i = indexOf("the", s)

این کد 4 را به عنوان اولین موقعیت ظاهر شدن کلمه "the" برخواهد گرداند. برای پیدا کردن نمونه بعدی "the" از تناوب استفاده می شود، , i = indexOf("the", s, 5)، 5 در انتها بیان می کند که باید از موقعیت 5 به بعد جستجو شود. برای یافتن تمام دفعات ظاهر شدن "the"، یک حلقه باید استفاده شود...
کد PHP:


s = «All the worlds a stage. And all the men and women merely players»;
i = indexOf("the", s)
while i != -1 {
write(i);
i = indexOf("the", s, i+1);
}

در Icon تابع find یک مولد است، و نمونه بعدی از رشته را تا زمانی که در انتهای رشته شکست بخورد در هر دفعه بازخواهد گرداند. همان کد در Icon می تواند اینطور نوشته شود :
کد PHP:
s := «All the worlds a stage. And all the men and women merely players»
every write(find("the",s))

Find، موقعیت نمونه بعدی "the" را هربار بازخواهد گرداند و تا زمانی که به انتهای رشته برسد ادامه می یابد. البته زمانهایی هست که شما می خواهید عمدا رشته ای را بعد از نقطه ای از ورودی بیابید، برای نمونه، شما ممکن است بخواهید یک فایل متنی را که شامل داده های یک جدول متقاطع است بررسی کنید. اجرای هدفگرا در اینجا بخوبی عمل خواهد کرد و به این صورت می تواند مورد استفاده قرار گیرد :
کد PHP:


write(5 < find("the", s))

اگر "the" بعد از موقعیت 5 ظاهر شود، موقعیت برگردانده خواهد شد، در غیر این صورت مقایسه شکست خواهد خورد و مانند قبل، شکست را به write() منتقل خواهد کرد. در این کد یک ترفند کوچک وجود دارد که نیاز به ملاحظه دارد : مقایسه مقدار سمت راست را برمی گرداند، بنابراین لازم است که find را در سمت راست مقایسه قرار دهیم. اگر 5 در سمت راست قرار گیرد، 5 نوشته خواهد شد. Icon چند ساختار کنترلی را برای حلقه مولدها اضافه می کند. عملگر every شبیه while است، ایجاد حلقه می کند و با رسیدن به شکست، حلقه پایان می یابد.
کد PHP:


every k := i to j do
write(someFunction(k))

چرا every را بجای حلقه while در این حالت استفاده می کنیم؟ چون while مجددا نتیجه اولیه را مقداردهی می کند اما every همه نتایج را تولید می کند. نحو every مانند بلوک ها در Smalltalk مقادیر را به تابع می فرستد. برای نمونه، حلقه بالا می تواند بصورت زیر بازنویسی شود :
کد PHP:


every write(someFunction(i to j))

کاربران می توانند با استفاده از کلمه کلیدی suspend به آسانی مولدهای جدید ایجاد کنند :
کد PHP:


procedure findOnlyOdd(pattern, theString)
every i := find(pattern, theString) do
if i % 2 = 1 then suspend i end

این مثال روی theString که از find برای پیدا کردن الگو استفاده می کند دور می زند. وقتی نمونه ای پیدا شود، و موقعیت فرد باشد، موقعیت از تابع با suspend برگردانده می شود. در غیر این صورت return suspend در جایی که در مولدهای عمومی نوشته می شود.

رشته ها

Icon برای حذف عملکرد شبه اسکریپتی خود، قابلیت هایی را برای سهولت کار با رشته ها افزوده است که قابل توجه ترین آنها scanning system است که بطور مکرر در توابع رشته ای فراخوانی می شود :
کد PHP:


s ? write(find("the"))

این کد، حالت کوتاه تر مثال هایی است که قبلا نشان داده شد. در این حالت عنوان تابع find در خارج از پارامترها در جلوی علامت سئوال قرار داده می شود.

در زبان Icon چند ویژگی به آن اضافه شده است که کارکردن با رشته را آسان تر می کند. بیشترین چیزی که در این زبان جلب توجه می کند، سیستم بررسی رشته آن است که توابع را به صورت پیاپی روی رشته فراخوانی می کند.
کد PHP:


s ? write(find("the"))

صورت ساده شده یکی از مثال های قبلی است. در این جا چیزی که در آن باید تابع find بگردد در بیرون تابع find و قیل از علامت سوال آمده است. زیر رشته ها از یک رشته با استفاده از براکت و مشخص کردن بازه به دست کی آیند. یک بازه می تواند به یک کاراکتر از رشته یا یک تکه از رشته اشاره کند. رشته ها می توانند از راست به چپ یا برعکس index شوند. مهم این است که شمارهٔ این اندیس ها می تواند 1A2B3C4 یا -3A-2B-1C0 باشد. برای مثال:

کد PHP:


"Wikipedia"[1] ==> "W"
"Wikipedia"[3] ==> "k"
"Wikipedia"[0] ==> "a"
"Wikipedia"[1:3] ==> "Wi"
"Wikipedia"[-2:0] ==> "ia"
"Wikipedia"[2+:3] ==> "iki"

در آخرین مثال بجای بازه طول آن نشان داده شده است.

در این جا چند کار دیگر که با رشته ها می توان انجام داد را می بینید:
کد PHP:


s := "abc"
s[2] := "123"

"a123c"مقدار کنونی s است.
کد PHP:


s := "abcdefg"
s[3:5] := "ABCD"

"abABCDefg" مقدار کنونی s است.
کد PHP:



s := "abcdefg"
s[3:5] := ""


"abefg" مقدار کنونی s است.


ساختارهای دیگر

رشته های Icon لیست های ساده ای از کاراکترها هستند، مانند معادل آنها در C. علاوه بر این، Icon به کاربر اجازه می دهد به آسانی لیست های خودش را ایجاد کند (یا آرایه ها) :
کد PHP:


aCat := ["muffins", "tabby", 2002, 8]

آیتم های موجود در یک لیست می توانند از هر نوعی باشند، از جمله ساختارهای دیگر. برای ساختن سریع تر لیست های بزرگتر، Icon شامل مولد list است، i := list(10, "word") یک لیست که شامل 10 کپی از "word" است را تولید می کند. مانند آرایه ها در زبانهای دیگر، Icon اجازه می دهد آیتم ها با موقعیت شان جستجو شوند. weight := aCat[4] Icon شامل توابع شبه پشته ای است، push و pop امکان ایجاد پشته ها و صف ها را فراهم می آورند. Icon همچنین شامل توابعی برای مجموعه ها و جدول هاست. (درهم سازی ها، آرایه های انجمنی، لغت نامه ها و...)
کد PHP:


symbols := table(0)
symbols["there"] := 1
symbols["here"] := 2

این کد جدولی که مقدار پیش فرض هر کلید ناشناخته آن صفر است ایجاد می کند. سپس دو آیتم را با کلیدهای "there" و "here" و مقادیر 1 و 2 به آن اضافه می کند.

نمونه برنامه های زبان Icon
کد PHP:


procedure main()
while write(map(read(), &ucase, &lcase))
end

اولین خط برنامه را شروع می کند.read و write توابعی هستند که یک خط را می خوانند یا می نویسند. map یک رابطه یک به یک با توجه به آرگومان های 2و3 جا به جا می شود.دو کلمه کلیدی &ucase و &lcase شامل کاراکترها ی حروف بزرگ و کوچک است while هم یک حلقه است که تا زمانی که عمل خواندن تمام نشده تکرار می شود.
کد PHP:


s = «All the worlds a stage. And all the men and women merely players»;
i = indexOf("the", s)

این کد 4 را برمی گرداند. جای اولین باری که در آن the آمده است.
کد PHP:


i = indexOf("the", s, 5)

این کد از جای 5 به بعد دنبال the می گردد.
کد PHP:


s = «All the worlds a stage. And all the men and women merely players»;
i = indexOf("the", s)
while i != -1 {
write(i);
i = indexOf("the", s, i+1);
}

در هر مرحله جای بعدی رشته the را بر می گرداند تا زمانی که پس از تمام کردن رشته s ناموفق باشد که تمام می شود. همین کد تحت Icon می تواند به این صورت نیز نوشته شود:
کد PHP:


s := «All the worlds a stage. And all the men and women merely players»
every write(find("the",s))

findهر دفعه که فراخوانی شود، جای بعدی رشته the در s را می دهد.
کد PHP:

write(5 < find("the", s))

زمانی رشته را برمی گرداند که جایی که در آن the پیدا شده شماره اش از 5 بیشتر باشد.
کد PHP:


every k := i to j do
write(someFunction(k))

چرا از every جای while در این مورد استفاده شده؟ چون while نتیجه اول را دوباره ارزیابی می کند در حالی که every همه نتایج را تولید می کند. عبارت every در واقع مقدارهای قبلی را به تابع می دهد، به عنوان مثال کد بالا می تواند به این صورت بازنویسی شود.
کد PHP:

every write(someFunction(i to j))

Borna66
05-25-2011, 10:32 PM
زبان برنامه نویسی میراندا

میراندا یک زبان برنامه سازی غیر اکید، کملاً تابعی است که توسط David Turner به عنوان جانشینی برای زبان برنامه سازی قبلی او یعنی SASL و KRC طراحی شده، که از برخی مفاهیم ML و HOPE استفاده می کند. محصولی از شرکت Research Software انگلستان. کلمه 'Miranda' نام تجاری است. این زبان اولین زبان کاملاً تابعی است که مورد حمایت تجاری قرار گرفت.

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

خلاصه:

Miranda یک زبان کند، کاملاً تابعی است. به این معنی که این زبان اثرات جانبی و خواص برنامه نویسی امری رو نداره. یک برنامه به زبان Miranda(که به عنوان Script شناخته می شه) مجموعه ای از معادلات است که توابع مختلف ریاضی و انواع داده های جبری رو تعریف می کنه. کلمه مجموعه در اینجا مهم است: به طور کل ترتیب معادلات مهم نیست و برای استفاده از موجودیت ها الزامی در تعریف پیشاپیش آنها نیست.

از آنجایی که الگوریتم تجزیه به صورت هوشمند از آرایش متن (توگذاری) استفاده می کند، به ندارت پیش می آید که استفاده از براکت لازم باشه و استفاده از پایان دهنده به دستورات نیز لازم نیست. این خصیصه که از ISWIM الگو برداری شده در occam و Haskell نیز مورد استفاده قرار گرفت و بعدها نیز توسط Python به شهرت رسید.

توضیحات در اسکریپت های عادی توسط کاراکتر || ارائه شد طوری که تا انتهای خط ادامه می یابد. قرارداد دیگر برای توضیحات حالتی بود که روی کل سند تحت عنوان «اسکریپت باسواد» تأثیر می گذاشت، به صورتی که هر خطی توضیحات در نظر گرفته می شد مگر اینکه با کاراکتر > شروع می شد.

پایه Miranda انواع char، num و bool می باشند. یک رشته کاراکتری به طور ساده لیستی از کاراکترهاست، در حالی که نوع num به طور داخلی بین دو فرم تبدیل می شود: اعداد صحیح با دقت دلخواه (به عبارت دیگر اعداد بزرگ) فرم پیش فرض، و در صورت لزوم مقادیر معمول ممیز شناور. چندتایی ها همانند رکوردها در زبان های شبه پاسکال دنباله ای از عناصر مختلط بالقوه هستند، وتوسط پرانتزها نوشته می شوند:


کد PHP:


this_employee = («Folland, Mary», ۱۰۵۶۰, False, ۳۵)

week_days = ["Mon","Tue","Wed","Thur","Fri"]

در عوض لیستها رایج ترین ساختار داده ای مورد استفاده در Miranda می باشند. لیستها توسط کروشه ها نوشته می شوند و عناصر آنها توسط کاما از هم جدا می شوند. عناصر لیست ها همگی باید از یک نوع باشند:

کد PHP:


week_days = ["Mon","Tue","Wed","Thur","Fri"]

اتصال لیست ها توسط ++، تفاضل آنها توسط --، ایجاد آنها توسط :، اندازه آنها توسط # و اندسی دهی آنها توسط ! انجام می شود بنابراین:
کد PHP:


days = week_days ++ ["Sat","Sun"]
days = "Nil":days
days!۰ ? "Nil"
days = days -- ["Nil"]
#days ? ۷

چند راه سریع برای ایجاد لیست ها نیز وجود دارد:.. برای لیستهایی به کار می رود که عناصر آنها سری های ریاضی اند و امکان داشتن گام افزایشی غیر از یک را نیز برای آنها فراهم کرده:

کد PHP:


fac n = product [۱..n]
odd_sum = sum [۱٬۳..۱۰۰]


رایج ترین و قوی ترین تسهیلات ایجاد لیست ها در Miranda توسط «list comperhension»ها ارائه می شود (که قبلاً تحت عنوان عبارت های ZF شناخته می شدند)، که به دو صورت عمده استفاده می شود: عبارتی که به دنباله ای از جمله ها اعمال می شود:

کد PHP:


squares = [ n n | n <- [۱..] ]

که به این صورت خوانده می شود: لیستی از مربع های n که n عضوی از اعداد صحیح مثبت است.

و به صورت سری های بازگشتی:

کد PHP:


powers_of_۲ = [ n | n <- ۱, ۲ n.. ]


همانطور که در این دو مثال می بینیم Miranda امکان داشتن لیست هایی با طول بی نهایت را می دهد، که ساده ترین مثال لیست اعداد صحیح مثبت است:

علامتگذاری اجرای توابع به سادگی توسط کنار هم قرار دادن انجام می شود مثل SIN X. در Miranda همانند اکثر زبان های کاملاً تابعی دیگر توابع از نوع first-class (سطح بالا) می باشند که این به این معنی است که توابع می توانند به عنوان پارامتر به توابع دیگر ارسال شوند، به عنوان نتیجه بازگردتنده شوند یا به عنوان عناصر ساختارهای داده ای منظور شوند، و نکته مهم دیگر این است که توابعی که دو یا بیشتر پاررمتر دارند می توانند «partially parameterised» (تا حدودی معیّن) بشوند یا به عبارتی با تعداد کمتری از پارامترهایشان فراخوانی شوند. این کار تابعی می دهد که در صورت تعیین شدن باقی پارامترها نتیجه نهایی را می دهد. به عنوان مثال:

کد PHP:


add a b = a + b
increment = add ۱

این مثال تابعی به نام increment ایجاد می کند که مقدار یک را به آرگمانش اضافه خواهد کرد. در واقع add ۴ ۷ تابع دو پارامتری add را می گیرد آنرا به ۴ اعمال می کند و یک تابع تک پارامتری می گیرد که آرگومانش را به ۴ خواهد افزود سپس آنرا به ۷ اعمال می کند.

هر تابعی با دو پارامتر می تواند به یک عملگر میانوند تبدیل شود(برای مثال در تابع بالا، جمله $add تا حدودی به عملگر + شباهت دارد) و هر تابع میانوندی که دو پارامتر می گیرد می تونه به تابع معادلش تبدیل بشه. بنابراین:

کد PHP:


increment = (+) ۱


راهی ساده برای ایجاد تابعی است که مقدار یک را به آرگومانش اضافه می کند. به طور مشابه در:
کد PHP:


half = (/ ۲)
reciprocal = (۱ /)

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

با وجود اینکه Miranda یک زبان برنامه سازی با انواع قوی است (strongly-typed)، بر تعیین نوع به صورت صریح پافشاری زیادی ندارد. در صورتی که نوع یک تابع به صورت صریح مشخص نشود مفسر اون رو با توجه به پارامترهای تابع و اینکه آنها در تابع به چه صورت مورد استفاده قرار گرفته اند استنتاج می کنه. علاوه بر انواع پایه (char, num, bool) این زبان یک نوع "anything" نیز دارد و برای مواقعی استفاده می شود که نوع پارامترها مهم نباشد، مثلاً در معکوس کردن یک لیست.
کد PHP:


rev [] = []
rev (a:x) = rev x ++ [a]

که می تونه به لیستی با هر نوع از عناصر اعمال بشه، در صورتی که اعلان نوع آن به صورت صریح به صورت زیر خواهد بود:

کد PHP:


rev :: [ ] -> [ ]

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

کدهای نمونه:

اسکریپت Mirandی زیر مجموعه همه زیر مجموعه های یک مجموعه از اعداد را تعیین می کند.

کد PHP:


subsets [] = [[]]
subsets (x:xs) = [[x] ++ y | y <- ys] ++ ys
where ys = subsets xs

و این یک اسکریپت با سواد برای تابع prime است که لیست همه اعداد اول را تعیین می کند.
کد PHP:
> || The infinite list of all prime numbers, by the sieve of Eratosthenes.

The list of potential prime numbers starts as all integers from ۲ onwards;
as each prime is returned, all the following numbers that can exactly be
divided by it are filtered out of the list of candidates.




> primes = sieve [۲..]
> sieve (p:x) = p: sieve [n | n <- x; n mod p ~= ۰]

Borna66
05-25-2011, 10:33 PM
زبان برنامه نویسی فری بیسیک
Free Basic

یک مترجم بیسیک 32 بیتی منبع باز برای ویندوز ، حالت معکوس داس ، لینوکس ، ایکس باکس می باشد. FreeBasic اجازهٔ پشتیبانی سطح بالایی را برای برنامه هایی که باQ Basic نوشته شده اند با استفاده از نسخه خاص QB می دهد. بسیاری از برنامه هایی که برای Q Basic نوشته شده اند بدون نیاز به تغییر دراین حالت ترجمه و اجرا می شوند . در هر حال ، بیشتر برنامه های اساسی قبل از اینکه با استفاده از نسخهٔ خاص پیش فرض ترجمه شوند، نیاز به تغییراتی خواهند داشت.

ویژگی ها

FreeBasic یک مترجم خود میزبان است که تقریبا 120000 خط کد است ( فقط هستهٔ مترجم و نه شامل کتابخانه ها ). این استفاده از ابزار برنامه نویسی GNU را به عنوان پشت خط امکان پذیر می سازد و می توانند میز فرمان و گرافیک قابل اجرا را بعلاوهٔ کتابخانه های ایستا و پویا تولیدکند . FreeBasic استفادهٔ کامل از کتابخانه های C و بخشی از کتابخانه های C++ را پشتیبانی می کند. این به برنامه نویسان اجازهٔ استفاده و ساخت کتابخانه هایی برای C و بسیاری از زبان های برنامه نویسی دیگر را می دهند. FreeBasic هنوز یک مترجم بهینه سازی نیست ، اما در سرعت، نزدیک به ابزار های مسیر اصلی مانند GCC ارزیابی شده است.

نحو

در نحو FreeBasic کوشش شده است تا حد امکان به نحو Basic نزدیک باشد. اگرچه در این نحو تلاش بر این بوده است که با نمونهٔ قبلی خود سازگار بماند ،FreeBasic از معیارها و شیوه های مدرن برنامه نویسی تبعیت می کند. ویژگی های رویه ای استاندارد همراه با ویژگی های شئ گرا مانند نوع ها ، اشیاء ، سربار گذاری عملگرها ، سربارگذاری تابع ، فاصله نام ها و ... به FreeBasic اضافه شده اند. خطهای FreeBasic ، هنگامی که کاراکتر های انتهای خط پیدا شوند ، یا توسط کولن پایان می یابند. به همین خاطر ،خطوط نباید یک کاراکتر ویژه ( مانند سمیکالن در C ) برای آگاه ساختن مترجم از پایان خط داشته باشند . ممکن است چندین دستور که هرکدام با یک کالن جدا شده اند در یک خط نوشته شوند . FreeBasic ازتوضیحات بلوکی همراه با ملاحظات پایان خط پشتیبانی می کند. یک خط کامل توضیحات با یک آپاستروف ساخته می شود درحالی که بلوک های توضیحات برنامه با /’ شروع و با /’ پایان می یابند.

سازگاری

FreeBasic جانشین زبان برنامه نویسی Q Basic می باشد. طی گسترش آن تغییراتی داده شد تا آن را با تسهیلات نوین سازگار کند و ویژگی های برنامه نویسی پیشرفته را آسان سازد. به منظور توسعهی کامپایلر ، GCC موافق و همچنین حفظ توانایی استفاده از زبان سازگار Q Basic مجموعه گزینهٔ –lang ساخته شد. هنگامی که مجموعه زبان FB را انتخاب می کنیم( -lang fb به عنوان آرگومان خط فرمان ) ، تمامی ویژگی های جدیدی که FreeBasic پیشنهاد می کند موجود می باشد و ویژگی های هکیش ازQ Basic که با شیوه های نوین برنامه نویسی سازگار بودن پذیرفته نمی شود . مجموعه زبان FB-Light (-lang fblight) دسترسی به بیشتر ویژگی های جدید و غیر شئ گرایFreeBasic را مهیا می سازد، اما سبک برنامه نویسی شبیه نسخه های قدیمی Basic را می پذیرد. قوانین نحو ، مانند پذیرفتن متغییرهای ضمنی ، پسوندها ، GOSUB / RETURN ، برچسب های عددی و ... دراین این گزینهٔ lang مجاز می باشد. مجموعه زبان QB (lang qb) شبیه به lang fb می باشد اما بیشتر روی تکرار شبیه رفتار Q Basic متمرکز شده است. Lang qb برای ساده سازی اجرای برنامه هایی که در اصل برای Q Basic نوشته شده اند طراحی شده است و در حالت هایی که lang fbtile به اندازهٔ کافی سازگار نیست مفید می باشد.

برنامه نمونه

همانندQbasicیک برنامه برای نوشتن یک خط از متن در صفحه نمایش، توسط یک دستور ساده انجام می شود.
کد PHP:


print "Hello, World!"


کتابخانهٔ گرافیکی

FreeBasic دارای یک کتابخانهٔ نرم افزار گرافیکی دوبعدی داخلی است تا با Q Basic سازگار باشد که نمودار های سادهٔ اولیه ( مانند مستطیل ها ، خطوط و دایره ها ) و ویژگی های اضافی که در کتابخانهٔ گرافیکی Q Basic حاضر نبوده اند را برای کاربر تهیه می کند. این کتابخانه خودش وابسته به سیستم عامل نمی باشد. بنابراین برنامه در سرتاسر پایگاه های دارای کتابخانه قابل حمل است. اگرچه این کتابخانه داخلی است ، تنها زمانی که کسی استفاده از آن را انتخاب کند قرار داده می شودکه این با آسانی با فراخوانی یک دستور FBgfx screen انجام می شود. کتابخانه های رایج مانند +opengl ساختن یک پنجره توسط رابط برنامه کاربردی ( ویندوز ، لینوکس و ... ) برای تسریع سخت افزار می تواند بدون مداخله با کتاب خانه گرافیکی Q Basic استفاده شود.

توسعه آینده

FreeBasic به پیشرفت و توسعه خود به سمت هدفش که یک نرمافزار نهایی GCC باشد ادامه می دهد که اجازه خواهد داد بسیاری از ویژگی هایی که در C++ و زبان های برنامه نویسی شئ گرای دیگر پیدا شده اند ، قابلیت حمل به تقریبا هر سامانه نوین و فنون بهینه سازی پیشرفته را داشته باشد. با انتشار نسخه ی0.17 ، برنامه نویسی شئ گرا به علاوهٔ کلاس ها و با توسعهٔ نوع اولیه معرفی شد پیاده سازی های بیشتری انتظار می رود.

منابع :



http://www.freebasic.net/
http://www.freebasic.net/forum

Borna66
05-25-2011, 10:33 PM
زبان برنامه نویسی ویژوال فاکس پرو
Visual FOx Pro

تاریخچه

ویژوال فاکس پرو یک زبان برنامه نویسی داده محور شی گرا و روال محور است که توسط مایکروسافت تهیه شده است. در سال 1984، این زبان از زبان فاکس پرو (که اوایل با نام FoxBASE شناخته می شد) تولید شده توسط نرم افزار فاکس، مشتق شد. بعد از این که فن آوری های فاکس در سال 1992 با مایکروسافت ادغام شد امکانات جدید و پسوند visual را پیدا کرد. آخرین نسخهٔ فاکس پرو(2.6) تحت Mac OS، داس، ویندوز و یونیکس کار می کرد. ویژوال فاکس پرو 3.0، اولین نسخه ویژوال، پشتیبانی از platform را به Mac و ویندوز کاهش داد و نسخه های بعدی فقط تحت ویندوز بودند. نسخه کنونی ویژوال فاکس پرو تحت com است و مایکروسافت ابراز داشته که قصد ندارد که یک نسخه تحت .NET از آن ارایه کند. فاکس پرو به عنوان عضوی از خانواده زبان های xbase، که ساختاری بر اساس زبان برنامه نویسی dbase دارند، ظهور کرد.

Clipper و recital از دیگر اعضای خانواده زبان های xbase هستند. ویژوال فاکس پرو، که معمولا با نام اختصاری VFPدیده می شود به طور محکمی با موتور پایگاه دادهٔ ارتباطی خود گره خورده است که این امر باعث می شود توانایی های xBase برای فاکس پرو افزایش یابد و از پرسش های sql و عملیات کار با داده پشتیبانی کند. بر خلاف اکثر سیستم های مدیریت پایگاه داده، ویژوال فاکس پرو یک زبان برنامه نویسی پویا و با تمامی امکانات است که در نتیجه نیازی به یک محیط برنامه نویسی همه منظوره اضافی ندارد. ویژوال فاکس پرو نه تنها برای نوشتن برنامه های "چاق" مشتری بلکه برای میان افزارها و برنامه های تحت وب نیز کاربرد دارد. در اواخر سال 2002 این قابلیت که ویژوال فاکس پرو با استفاده از بسته تطبیق پذیری ویندوز wine بتواند روی لینوکس هم اجرا شود معرفی شد. در سال 2003 این مطلب شکایت مایکروسافت را درپی داشت که در آن ادعا شده بود که مستقرسازی کد فاکس پرو زمان اجرا روی ماشین های غیر ویندوز با گواهینامه "کاربر پایانی" متناقض است.

در دسامبر سال 2005، VFP برای اولین بار به جمع 20 رتبة اول در فهرست جمعیت برنامه نویسی تیوب راه پیدا کرد. در ماه مارس 2007 در رتبة 19 ام این فهرست بود که آن را تبدیل به یک زبان «ب» می کرد و در دسامبر 2008 به رتبة 23 ام نزول کرد. در ماه مارس 2007، مایکروسافت اعلام کرد که دیگر VFP 10 وجود نخواهد داشت بدین معنی که VFP 9 آخرین نسخة تجاری VFP تولید شده توسط مایکروسافت خواهد بود. البته پشتیبانی از نسخه 9 با ارائه بسته سرویس هایی که در تاریخ های 8 دسامبر 2005 و 11 اکتبر 2007 در اختیار قرار گرفت همچنان ادامه دارد. همزمان با اعلام رسمی پایان عمر، کار روی نسخه انتشاری بعدی تحت عنوان سدنا (نام یکی از سیارات کوتوله که به تازگی کشف شده بود) که روی پایه کد VFP 9 ساخته شده بود به تازگی آغاز شده بود و در نهایت در 25 ژانویة 2008 در اختیار عموم قرار گرفت. با همه این ها مایکروسافت اعلام کرده که هستة VFP همچنان به عنوان یک کد بسته باقی خواهد ماند.

نگاهی گذرا به فاکس پرو

در توالی مطالب زیر طراحی یک پایگاه داده ساده به همراه یک جدول و یک فرم را دنبال خواهیم کرد. پایگاه دادهٔ موردنظر ما جزئیات سی دی های برنامه نویسیمان را نگه می دارد. در اداره، بیش از هزار سی دی وجود دارد و ما نمی توانیم سی دی مورد نظرمان را پیدا کنیم. هر کدام یک شماره ID یکتا دارند و روی طبقه به ترتیب عددی چیده شده اند. اگر من همان سی دی “ویژوال اینتردو” را دوباره بخواهم آنگاه پایگاه داده به من اطلاع می دهد که کجا آن را بیابم. پایگاه داده همچنین شماره سریال و کلید ثبت نام را نگه می دارد و این امر در موقعی کمک می کند که شماره ID سی دی را نداشته باشیم.
مطلب با یک توصیف از رویة کاربردی ای موجود در ویژوال فاکس پرو شروع می کنیم. سپس یک جدول می سازیم، آنگاه یگ فرم آماده می کنیم تا اطاعات را در آن نمایش دهیم و در پایان نیز یک فایل قابل اجرا تولید خواهیم کرد. فاکس پرو در میان ابزارهای تولیدی مایکروسافت غیر معمول است. از این لحاظ که یک پوستهٔ خط فرمان نیز دارد. همان طور که ممکن است انتظار داشته باشید یک نوار ابزار نیز با تمام دکمه های معمول وجود دارد. اما همجنین با یک پنجرهٔ فرمان نیز روبرو هستید که در آن می توانید دستورات فاکس پرو را وارد کنید.

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

Intellisense

کلمات کلیدی این زبان به صورت حروف بزرگ و با رنگ آبی نمایش داده می شوند. این تنظیمات پیش فرض فاکس پرو است. به محض این که فاکس پرو کلمه ای که شما تایپ می کنید را تشخیص بدهد آن را با رنگ آبی نشان خواهد داد. اگر شما کلید space یا tab را فشار دهید فاکس پرو کلمهٔ مورد نظر را در صورت امکان برای شما کامل خواهد کرد و یک لیست از پارامترها و گزینه هایی که می تواند در ادامه آن دستور بیاید را به شما نشان می دهد. بر خلاف سایر زبان های مایکروسافت intellisense ویژوال فاکس پرو باز و مستند بوده – در واقع یک جستجو در یک جدول فاکس پرو – شما می توانید لغات مورد نظر خود را به این لیست اضافه کنید.

استفاده از پنجرهٔ فرمان

وقتی شما برای اولین بار می خواهید ویژوال فاکس پرو را یاد بگیرید ممکن است تحریک شوید تا پنجرهٔ فرمان را ببندید و فاکس پرو را در همان شکل "اشاره و کلیک" رایج در اختیار بگیرید. همان طوری که در اکسس این کار را انجام می دهید این امر ممکن است ، اما یک روش کند و محدود خواهد یود . فقط به عنوان یک مثال ساده ، شما می توانید از طریق انتخاب new از منوی file و سپس مشخص کردن این که شما یک فایل جدید از نوع کد می خواهید یک فایل برنامه جدید (ماژول کد ) ایجاد کنید. اما این کار بسیار سریعتر خواهد یود اگر شما در پنجرهٔ فرمان کلمهٔ mc را تایپ کرده و enter را بزنید!!

مدیر پروژه

مدیر پروژهٔ ویژوال فاکس پرو اجزای یک پروژه را کنترل می کند و به شما اجازه می دهد تا یک فایل اجرایی یا dll از آن بسازید. همچنین یک راه بسیار آسان برای شما فراهم می کند تا فایل های متعلق به برنامه، فرم ها، گزارش ها و کلاس ها را تولید و یا اصلاح کنید. به جای استفاده از منو یا پنجرهٔ فرمان برای باز کردن یک فایل شما می توانید به راحتی روی فایل موردنظر در project manager دابل کلیک کنید. این روش برای تمام انواع فایل کاربرد دارد. اگر یک فایل از نوع bmp را به پروژه اضافه کنید در نتیجهٔ این کار فاکس پرو، paint را در ازای دابل کلیک کردن باز می کند. با وجود این که مدیر پروژه بسیار شبیه پنجرة پایگاه داده متعلق به یک نسخة قدیمی تر از access می باشد، کد برنامه یا طرح اجزای پروژه را در برندارد. در واقع جدولی است از اطلاعات پروژه به همراه جزئیات فایل های مورد نیاز شامل این که این فایل ها کجا ذخیره شده اند و یا هر نوع توضیحاتی که بخواهیم به آنها نسبت دهیم. به این معنا که بسیاری از پروژه های پایگاه داده می توانند فایل های یکسانی را از زیر روال های مشترک یا کتاب خانه های کلاس به اشتراک بگذارند. با تایپ create proj در پنجرهٔ فرمان یک پروژهٔ جدید ایجاد کنید.

شکل بالا یک پروژهٔ خالی را نشان می دهد. همچنان که فایل هایی به پروژه اضافه می شوند گره هایی روی دید درختی گسترش پیدا می کنند. شش دکمه در سمت راست مدیر پروژه قرار دارد. سه تای اول به شما اجازه می دهد تا یک فایل جدید را ایجاد کنید ، یک فایل موجود را به پروژه اضافه کنید و یک فایل از پروژه را تغییر دهید. دکمه run یک فایل برنامه را اجرا خوهد کرد، یک فایل فرم را نمایش می دهد یا یک فایل گزارش را چاپ می کند. remove اشاره به یک فایل مورد نظر را از پروژه پاک می کند و build فایل های پروژه را داخل یک dll یا یک فایل اجرایی می سازد

استفاده از مدیر پروژه

اولین نکته برای کار با مدیر پروژه این است که بتوانیم آن را در اختیار بگیریم. اگر روی نوار عنوان کلیک کنیم می توانیم آن را به درون منوی اصلی بکشیم. اگر به یکی از فایل ها نیاز داشته باشیم باید روی tab موردنظر کلیک کنیم تا یک لیست پایین افتادنی ظاهر شود. با این کار مقدار زیادی فضا روی میز کار حفظ می شود. زمانی که مدیرپروژه شبیه عکس زیر باشد هیچ کدام از دکمه ها در نمایش کامل قابل دیدن نیستند ولی همة قابلیت ها روی یک منویی که از طریق کلیک راست کردن ظاهر می شود مهیا هستند. اگر در عین حالی که مدیر پروژه بسته شده است بخواهیم که یکی از صفحات را قابل دیدن نگه داریم باید آن tag را پاره کنیم. فقط کافیست روی caption آن کلیک کنیم و آن را روی میز کار فاکس پرو بیندازیم.

جدول های داده

فایل های جدول

بر خلافaccess یا sql saver فاکس پرو تمام جدول های پایگاه داده را تحت عنوان فایل های جدا از هم نگه می دارد. فیلدهای با طول ثابت در یک فایل با پسوند .dbf نگهداری می شوند. در حالی که داده های با طول متغیر گرافیک و اشیا ole پسوند .fpt دارند و index ها با پسوند .cdx ذخیره می شوند. این جداسازی خوبی ها و بدی هایی دارند اما در طی سالیان دراز اثبات شده است که قابل اتکا هستند .

طراحی یک جدول

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

ایجاد یک جدول

روی tab مربوط بهdata از مدیر پروژه کلیک کرده، روی free tables کلیک راست می کنیم. New file را انتخاب کرده، new table را از کادر محاوره ای که ظاهر می شود انتخاب می کنیم. این محاوره به شما اجازه می دهد تا table wizard را شروع کنید که اگر برنامهٔ شما متناظر با یکی از template های آماده باشد می تواند بسیارمفید باشد. یک محاوره کاوشگر ظاهر خواهد شد که پیشهاد می کند تا یک جدول با نام table1.dbf ایجاد کنیم.
اسم مورد نظر را به CD.bdf تغییر داده، آن را در همان پوشه ای که فایل مدیر پروژه قرار دارد ذخیره کنید. یک پروژهٔ کاربردی نوعا فایل های خود را در یک ساختار درختی از مسیرها قرار می دهد. اما ما در اینجا برای سادگی همهٔ فایل ها رادر همان پوشهٔ فعلی قرار می دهیم. Table desingner ظاهر می شود. شش فیلد مورد نظر از لیست بالا را اضافه کرده، دکمهٔ ok را زمانی که تمام شده اید بزنید. دقت کنید که هیچ اندازه ای برای integer و فیلدهای date داده نشده است. بلکه ثابت هستند.

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

دیدن جدول

زمانی که شما table designer را ببندید باید یک ورودی شبیه این در نوار وضعیت در پایین صفحه نمایش ببینید.این نشان دهنددهٔ این است که جدول با نام CD باز است و برای استفاده انحصاری شما آماده است و در ضمن هیچ رکوردی را در برندارد. تایپ کنید :

Browse

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

Borna66
05-25-2011, 10:34 PM
اضافه کردن تعدادی رکورد

بر خلاف access شما نمی توانید یک رکورد جدید را از طریق تایپ کردن در یک خط خالی در یک سلول ایجاد کنید. حتما باید append new record را از منوی table انتخاب کنید. این منو زمانی که یک پنجرهٔ مرورگر روی میزکار باز است، ظاهر می شود.

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

طراح فرم

درست مانند هر کدام از ابزارهای توسعهٔ ویندوز، فرم پایه ای ترین رویه برای کاربر است . فاکس پرو یک ویزارد فرم دارد که به سرعت یک فرم با ظاهر خوب تولید می کند.

ایجاد یک فرم

روی tab document مدیر پروژه کلیک کرده سپس روی forms کلیک راست کنید.new file را انتخاب کرده سپس از محاوره مورد نظر new form را بزنید. form designer ظاهر خواهد شد. تصویر بالا from designer و نوار ابزار form controls را نشان می دهد در حالی که ماوس به کنترل button اشاره می کند.

اضافه کردن داده

فرم باید به یک جدول داده وصل شود. روی فرم کلیک راست کرده data environment را انتخاب کنید. یک درخت مسیر باز خواهد شد به طوری که بتوانید یک جدول را انتخاب نمایید. روی CD.dbf کلیلک کنید. سپس محاورهٔ add table راببندید. با این کار فقط فرم و پنجره های data environment باید باقی بمانند.

از ماوس برای انتخاب شش فیلد از data envioronment استفاده کنید و آنها را به داخل فرم بکشید. اگر شما این کار با استفاده از یک کلیک چپ معمول انجام دهید فاکس پرو به طور خودکار یک کنترل شبکه ای برای فیلد ها تولید خواهد کرد. وقتی که فایل ها را رها می کنید یک منو به همراه یک گزینه برای نشان دادن فیلدها به عنوان یک سطر یا چند کنترلی ظاهر خواهد شد. گزینهٔ create multiple controls here را انتخاب کنید. قبل از این که فیلد ها را رها کنید مطمئن شوید که ماوس را به گوشهٔ بالا سمت چپ فرم حرکت داده اید. بعضی از فیلد ها کاملا عریض هستند و شما مجبور خواهید شد که فرم را به اندازه ای عریض تر کنید تا آنها جا شوند. در نهایت data environment را بسته، فقط form designer را روی صفحه نمایش باقی بگذارید.

اجرای فرم

روی علامت تعجب قرمز رنگ بر روی نوار ابزار کلیک کرده یا این که run form را از منوی form انتخاب کنید. از شما تقاضا می شود که فرم را قبل از اجرا ذخیره کنید. فاکس پرو form1.scx را پیشنهاد خواهد داد اما شما آن را به myCD.scx تغییر دهید.

مسیریابی

تمام کنترل های اولیه روی نوار ابزار form controls آماده هستند. نوار ابزار فاکس پرو آشنا به نظر می رسد اما تفاوت های آشکاری بین این نوار ابزار و نوار ابزارهای مشابه در access و visual basic وجود دارد. برای اضافه کردن یک کنترل به فرم باید روی نوار ابزار یک بار کلیک کرده سپس یک بار روی فرم کلیک کنید. لازم به ذکر است با حرکت برعکس هیچ اتفاق نخواهد افتاد.

اضافه کردن یک دکمهٔ close

روی کنترل دکمه روی نوار ابزار کلیک کنید (پنجمین دکمه از سمت چپ ) و سپس آن را روی سمت راست پایین فرم رها کنید. روی دکمهٔ مورد نظر دابل کلیک کرده تا یک ویرایشگر روی کد موردنظر باز شود که هرگاه دکمه کلیک شود اجرا می شود. این خط از کد را درون پنجره تایپ کنید :

کد PHP:

ThisForm.Release


ThisForm معادل فاکس پرو برای Me در access است و به فرمی اشاره می کند که این شئ را در بردارد. همچنان که یک نقطه را تایپ می کنید متدهای ممکن ظاهر می شود. با فشردن ctrl+w یا کلیک بر روی دکمه save بر روی نوار ابزار پنجرهٔ کد را بسته و ذخیره کنید. سپس ctrl+e یا علامت تعجب را برای اجرای فرم فشار دهید. با فشردن دکمه فرم بسته خواهد شد و شما را به form designer باز خواهد گرداند .

ویژگی های کنترل

فاکس پرو یک سیستم شئ گرای انطاف پذیر است که ویژگیهای بسیار گشترده و متنوعی دارد. شما می توانید تعدادی که ظاهر می شود را تغییر دهید. به طوری که فقط آنهایی را ببینید که از مقدار پیش فرض تغییر پیدا کرده اند. بدین منوال که روی اسم command1 در بالای پنجرهٔ properties کلیک راست کرده و nondefault properties only را از منو انتخاب کنید. نکتهٔ قابل توجه در اینجا این است که ویژوال فاکس پرو بر خلاف access و basic که با تغییر نام یک ویژگی، ارتباطات به متدهای آن نیز قطع می شود بسیار انعطاف پذیر است!

دکمه های مسیر یابی

همان تکنیک یادشده را برای اضافه کردن دو دکمهٔ بیشتر به فرم دنبال کرده و ویژگی caption از آنها را به "Prev" و "Next" تغییر دهید. روي دکمه ي prev دابل کليک کنيد و اين کد را داخل رويداد مربوط به کليک آن بنويسيد. کد سبز رنگ comment است اگر يک خط با ستاره شروع شود آنگاه هر چيزي که در آن خط بيايد يک comment خواهد بود. پنجره ي edit را بسته روي دکمه ي next دابل کليک کنيد و اين کد بسيار شبيه به کد قبلي را درون رويداد کليلک آن تايپ کنيد دو دکمه ي ديگر را براي رفتن به اولين وآخرين رکورد اضافه کنيد. دستورهاي فاکس پرو از قرار زير هستند:

اجراي فرم

اجراي فرم همانند بحث مطرح شده در گفتار قبلي مي باشد.

ارتقاي مسير يابي

اين دکمه هاي مسير يابي بيشتر ار آن ساده هستند که در کاربرد واقعي مورد استفاده قرار بگيرند. آنها به کد اضافه اي نياز دارند تا شما اين تلاش بيهوده را انجام ندهيد که به مکاني قبل از اولين رکورد يا بعد از آخرين رکورد دسترسي داشته باشيد.

ساخت یک فایل قابل اجرا

مرحلهٔ آخر ساختن یک چیز قابل اجرا است. بدین منظور ما به مدیر پروژه دوباره نیاز داریم. روی آن، بر روی دکمهٔ Build کلیک کنید .

گزینه های build

نسخهٔ استاندارد ویژوال فاکس پرو به شما اجازه می دهد تا dll ها و فایل های اجرایی بسازید که بتوانند به راحتی توزیع شوند. گزینهٔ win32 executable را انتخاب کنید و تیک display errors را بزنید .سپس ok را بزنید تا فایل قابل اجرا ساخته شود

اجرای فایل قابل اجرا

شما می توانید فایل قابل اجرا را از داخل محیط توسعهٔ فاکس پرو با انتخاب Do از منوی program و یا باتایپ Do cd.exe از پنجرهٔ فرمان اجرا کنید. (دستورات دیگر برای اجرای فایل cd.exe! یا RUN cd.exe) اگر بخواهید یک فایل قابل اجرا را از خارج از محیط فاکس پرو اجرا کنید متوجه خواهید شد که با این کار برنامهٔ موردنظر یک لحظه روی صفحة نمایش ظاهر می شود و سپس ناپدید می گردد. مجبوریم حلقهٔ پردازش رویداد را شروع کنیم. به طوری که فاکس پرو به محض این که فرم نمایش داده می شود برای رویدادهای موس وصفحه کلید منتظر بماند.

از مدیر پروژ فرم را باز کرده روی سطح خود فرم دابل کلیک کنید یک پنجرهٔ ویرایش برای رویداد بارگذاری فرم موردنظر باز خواهد شد. روی جعبهٔ نشان دهندهٔ "load" کلیک کرده “activate” را از لیست رویدادها انتخاب کنید. آنگاه کد زیر را در رویداد activate تایپ کنید: Read Events این عمل حلقهٔ پردازش رویداد را شروع خواهد کرد اما در عین حال ما نیاز داریم حلقه را زمانی که فرم بسته می شود متوقف کنیم. برای این کار روی دکمهٔ close دابل کلیک کرده، رویداد کلیک آن را به صورت زیر تغییر بدهید: This Form.Release() Clear Events بعد از همهٔ این ها فرم را بسته، فایل قابل اجرا را مجددا بسازید. اکنون شما باید قادر باشید تا فاکس پرو را به طور کامل بسته به فایل قابل اجرای مورد نظر در مرورگر ویندوز راه پیدا کرده و با دابل کلیک کردن بر روی آن فایل قابل اجرای موردنظر را اجرا کنید.

منابع = در ابتدای تاپیک گفته شده ---> منابع زیر جزئی میباشد




http://en.wikipedia.org/wiki/Visual_Fox_Pro
http://www.alvechurchdata.co.uk/fox101intro.htm
http://www.alvechurchdata.co.uk/fox101env.htm
http://www.alvechurchdata.co.uk/fox101proj.htm
http://www.alvechurchdata.co.uk/fox101table.htm
http://www.alvechurchdata.co.uk/fox101form.htm
http://www.alvechurchdata.co.uk/fox101navig.htm
http://www.alvechurchdata.co.uk/fox101exe.htm

Borna66
05-25-2011, 10:35 PM
زبان برنامه نویسی APL

APL مخفف عبارت «یک زبان برنامه نویسی» است. این زبان در بسیاری از زمینه ها (ریاضیات، علوم، مهندسی، طراحی کامپیوتر، روباتیک و ...) APL زبانی بسیار قوی و مختصر و مفید است که به معمولاً در محیط های اینتراکتیو استفاده می شود. در آغاز این زبان در زمینه دیگری تولید شد، ساختن یک نمادگذاری ریاضی برای توصیف کامپیوتر که بتوان آن را به وصیله یک کامیپوتر تفسیر کرد.

تاریخچه

APL یک زبان برنامه نویسی است که بر مبنای نمادگذاری که Kenneth E. Iverson در سال ۱۹۵۷ در دانشگاه هاروارد ابداع کرد، ایجاد شده است. هدف اولیه تولید این زبان، ایجاد یک زبان مشترک برای تدریس و تحلیل برنامه های کامپیوتری بوده است. Iverson جایزهٔ تورینگ را به خاطر این کارش در سال ۱۹۷۹ برد.

دید کلی

APL در محیطی به نام workspace کار می کند. کاربر می تواند در این workspace برنامه یا داده تعریف کند. به عبارت دیگر داده ها خارج از برنامه ها نیز وجود دارند و کاربر می تواند بدون تعریف کردن برنامه با داده کار کند. برای مثال عبارت زیر بردار ۷ ۶ ۵ ۴ را به N نسبت می دهد:

N <----4567

و عبارت زیر به تمام مقادیر ۴ را اضافه می کند (حاصل ۱۱ ۱۰ ۹ ۸) و آن ها را چاپ می کند (حاصل عبارت به هیچ متغیری نسبت داده نشده است)

N+4

و عبارت زیر مجموع N، یعنی ۲۲ را چاپ می کند:

N/+

کاربر می تواند workspace را با تمام مقادیر، برنامه ها و حالت اجرا ذخیره کند.

APL معروف است به استفاده از علائم غیر اسکی که به نمادگذاری سنتی حساب و جبر اضافه شده اند. استفاده از نام های تک کاراکتری برای توابعی که روی بردارها عمل می کنند باعث می شود که با APL بتوان الگوریتم هایی که با داده ها سر و کار دارند را به صورت فشرده تعریف کرد، برای مثال بازی زندگی کانوی را می توان با یک خط کد پیاده سازی کرد. تقریباً در تمام نسخه های APL از لحاظ تئوری می توان هر تابع محاسباتی را در یک عبارت بیان کرد.

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

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

Iverson بعدها زبان J Programming Language را ابداع کرد که در آن فقط از کاراکترهای اسکی استفاده می شد.

مثال ها

عبارت زیر کلماتی که در آرایهٔ X ذخیره شده اند را به ترتیب طول آن ها مرتب می کند:

X[⍋X+.≠' ';]

تابع زیر (life) یک آرایهٔ بولین دریافت می کند و نسل بعدی را بر اساس بازی زندگی کانوی محاسبه می کند

در مثال زیر، ابتدا یک تکه کد HTML به متغیر txt، منتسب می شود، سپس یک عبارت APL تمام تگ های HTML را حذف می کند و فقط متنی که در خط آخر آمده را باز می گرداند:

http://pnu-club.com/imported/2011/05/43.gif

عبارت زیر تمام اعداد اول از ۱ تا R را میابد. زمان و حافظه اجرا از (O(R2 است:

(~R∊R∘.×R)/R←1↓⍳R

این مثال را از راست به چپ بررسی می کنیم:


[ ]ιR یک بردار از اعداد صحیح از یک تا R تولید می کند.
[ ]تابع ↓ چند عنصر از ابتدای بردار را حذف می کند. بنابراین 1↓ιR برابر است با 6 5 4 3 2.
[ ]بردار حاصل با استفاده از علامت ← به R منتسب می شود.
[ ]ضرب خارجی R در R با استفاده از تابع ×.° محاسبه می شود.
[ ]در مرحله بعد، یک بردار با طول برابر با R ساخته می شود که در آن به ازای هر عددی که در ضرب خارجی وجود دارد، 1 گذاشته می شود، که حاصل برابر است با 1 0 1 0 0.
[ ]تابع ~ بردار را از لحاظ منطقی معکوس می کند (صفرها را به یک و یک ها را به صفر تبدیل می کند)
[ ]تابع / اعضایی از R را که عنصر متناظر آن ها 1 است را انتخاب می کند.


محاسبات

APL همیشه سرعت بسیار بالایی در انجام عملیات، مخصوصاً عملیات بر روی آرایه ها داشته است. برای مثال یک ضرب ماتریسی بسیار بزرگ روی ماشین های بسیار ضعیف تر از ماشین های امروزی تنها چند ثانیه طول می کشیده است. وجود این مزایا دلایل تکنیکال و اقتصادی داشته است:
م

[ ]فسرهای تجاری موجود، کتابخانه های جبر خطی بسیار خوبی داشتند.
[ ]سربار تفسیر برای هر آرایه وجود دارد نه برای هر عنصر.
[ ]آی بی ام در تعدادی از مین فریم های IBM/370 خود میکروکدهایی برای APL قرار داد.


مقالهٔ معروف «یک ماشین APL» (به قلم فیل آبرامز) استفاده گسترده APL از محاسبات تنبل را توضیح داد که در این روش محاسبات تا زمانی که واقعاً به نتیجهٔ آن ها نیاز باشد به تعویق می افتند.

مفسرها

APL2000 یک مفسر پیشرفته برای APL تولید کرده که تحت لینوکس، یونیکس و ویندوز اجرا می شود. این مفسر استفاده از dllها را پشتیبانی می کند و یک فایل سیستم پیشرفته برای APL دارد. این محصول APL2000 ادامه تلاش های موفق STSC در تولید APL Plus/PC و APL Plus/386 است.

Dyalog APL یک مفسر پیشرفته دیگر است که تحت لینوکس، یونیکس و ویندوز اجرا می شود. Dyalog یک توسعه بر زبان APL است که قابلیت های شی گرایی جدید و namespace به آن اضافه کرده است. ضمناً Dyalog در ویندوز قابلیت ارتباط با Microsoft.Net و Microsoft Visual Studio را دارد. IBM یک نسخه از APL2 را برای IBM AIX، لینوکس، سولاریس و ویندوز ارائه کرده است. این محصول نسل بعدی APL2 است که برای mainframesها مورد استفاده قرار می گرفت. APL2 مطرح ترین سیستم APL بوده است.

MicroAPL نیز یک مفسر برای سیستم های ۶۴بیتی به نام APLX طراحی کرده که تحت لینوکس، ویندوز و Mac OS قابل اجراست.

کامپایل

عمدتاً برنامه های APL تفسیر می شوند و کم تر کامپایل می شوند. در واقع اکثر کامپایلرهای APL، متن برنامهٔ APL را به زبان های سطح پایین تر مانند C ترجمه می کنند. با این که توسعه زبان APL خصوصاً اضافه شدن آرایه های تودرتو، کامپایل کردن APL را دشوار ساخته، ایدهٔ کامپایل کردن APL هنوز در حال بررسی است.

اصطلاحات

در APL تفاوت بین توابع و عمل گرها واضح است. توابع ورودی می گیرند (متغیر یا ثابت یا عبارت) و حاصل را در خروجی بازمی گردانند. عمل گرها توابع را می گیرند و تغییریافتهٔ آن ها را بازمی گردانند. برای مثال تابع «sum» با اعمال عمل گر «reduction» بر تابع «addition» به دست می آید.

همچنین نمادهای APL primitive نامیده می شوند. اغلب primitiveها یا تابع هستند و یا عمل گر. فرآیند نوشتن کد APL بیشتر شامل نوشتن توابع غیر primitive است. البته بعضی از primitiveها نه عمل گر هستند و نه تابع. برای مثال نماد انتساب.

شیءگرایی

قابلیت شیءگرایی در Dyalog APL و APLX به زبان APL اضافه شده است. قابلیت هایی که در این نسخه ها پشتیبانی می شود، مشابه قابلیت های زبان های شیءگرای معمول (مانند ++C و جاوا) است. اما خصوصیات خاص APL در برنامه نویسی آرایه ای، به کلاس ها و اشیا نیز تسری داده شده اند. هر دو نسخه، اجازه استفاده از کلاس ها NET. را علاوه بر کلاس ها خود APL می دهند، اما تفاوت هایی نیز دارند:
Dyalog APL قابلیت های بیشتری نظیر وراثت چندگانه دارد.
APLX امکان استفاده از کلاس های جاوا و روبی را نیز می دهد.

زمانی که شما یک شیء جدید تولید می کنید، چیزی که بازگردانده می شود، تنها reference آن شیء است نه خود شیء. همچنین زمانی که شما یک شیء را به یک کلاس منتصب می کنید، تنها reference کپی می شود و اشیا در جدولی توسط خود APL مدیریت می شوند. در ضمن شما می توانید از کلاس ها نیز reference داشته باشید. با این کار می توانید توابع عمومی را روی کلاس ها بدون توجه به عمل کرد کلاس، اعمال کنید.

کاراکترها و طرح بندی صفحه کلید

با توجه به این که در برنامه های APL کاراکترهای غیر اسکی زیادی استفاده می شوند، طرح بندی صفحه کلید برای نوشتن سریع تر برنامه های APL اهمیت زیادی دارد، یکی از طرح بندی های رایج به شکل زیر است:

تصویر (http://upload.wikimedia.org/wikipedia/commons/9/9f/APL-keybd2.svg)

تمام کاراکترهای APL در یونی کد هستند. این کاراکترها را در زیر می بینید:

' ( ) + , - . / : ; < = > ? [ ]
\ _ ¨ ¯ × ÷ ← ↑ → ↓ ∆ ∇ ∘ ∣ ∧ ∨
∩ ∪ ∼ ≠ ≤ ≥ ≬ ⊂ ⊃ ⌈ ⌊ ⊤ ⊥ ⋆ ⌶ ⌷
⌸ ⌹ ⌺ ⌻ ⌼ ⌽ ⌾ ⌿ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇
⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏ ⍐ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗
⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟ ⍠ ⍡ ⍢ ⍣ ⍤ ⍥ ⍦ ⍧
⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯ ⍰ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷
⍸ ⍹ ⍺ ⎕ ○

با توجه به این که تمام این کاراکترها را نمی توان روی صفحه کلید قرار داد، سایر کاراکترها با توجه به ویرایشگری که مورد استفاده قرار می گیرد، با فشردن پشت سر هم دکمه های صفحه کلید تولید می شوند، برای مثال علامت لگاریتم با فشردن پشت سر هم shift-p و shit-o تایپ می شوند.

کنترل خطاها

در برنامه های APL چند نوع خطا ممکن است بروز کند:


خطا در حالت محاسباتی

اگر عبارتی محاسباتی را وارد کنید که دارای داده های نامناسب باشد، مفسر معمولاً خطای domain error را باز خواهد گرداند. در مثال زیر از عملگر v استفاده شده است که تنها بر اعداد صفر و یک عمل می کند. همان طور که می بینید مفسر خطی که خطا دارد را چاپ کرده و با علامت ^ مکانی را که تصور می کند خطا در آن رخ داده را مشخص کرده است.
1 1 0 11 ∨ 1 1 0 0
DOMAIN ERROR
1 1 0 11 ∨ 1 1 0 0
^

خطا در توابع و عمگرهای تعریف شده توسط کاربر

اگر در تابع یا عملگری که توسط کابر خطایی بروز کند، اجرای برنامه متوقف می شود. پیام خطای مناسب به همراه شمارهٔ خطی که اجرا در آن متوقف شده است و نام تابع و همچنین عبارتی که خطا در آن است به همراه علامت ^ که نمایش گر محل خطا است نمایش داده می شوند. در مثال زیر خطا در تابع C و خط دوم رخ داده است.

LENGTH ERROR
C[2] 1 2 - 1 2 3
^

نمایان گر حالت

ممکن است اجرا در تابعی متوقف شود که توسط تابع دیگری فراخوانی شده است، در این حالت می توانید با اجرای تابع سیستمی SI( حالتی که اجرا در آن قرار دارد را ببینید:

)SI
C[2]
B[8]
A[5]

در مثال بالا تابع C در خط هشتم تابع B و تابع B نیز در خط پنجم تابع A فراخوانی شده است و تابع C در خط دوم متوقف شده است و پایان اجرای دو تابع دیگر نیز وابسته به پایان اجرای تابع C است. آن ستاره نشان دهندهٔ تابعی است که توقف در آن رخ داده است. (طرز نمایش حالت در تمام مفسرهای یکسان نیست، این طرز نمایش متعلق به APLX است).

Borna66
05-25-2011, 10:35 PM
زبان برنامه نویسی ام ال ML

ام ال یک زبان برنامه نویسی تابعی همه منظوره است که توسط رابین میلنر و همکاران در اواخر دهه ۱۹۷۰ در دانشگاه ادینبورگ توسعه یافت. نحو آن از ISWIM الهام گرفته است.

کلمه ML از فوق زبان (Meta Language) گرفته شده است. ام ال برای بهبود بخشیدن به رویه اثبات در قضیه LFC طراحی شده است. این برای کاربرد آن در الگوریتم استنتاج نوع هیندلی- میلنر که به طور خودکار اکثر عبارت ها بدون نیاز به تفسیر نوع صریح شناخته شده است.

مرور کلی

ام ال معمولاً به عنوان یک زبان تابعی ناخالص یاد می شود. چرا که به اثرات جنبی و بنابراین برنامه نویسی امری، بر خلاف زبان برنامه نویسی تابعی خالص مانند هاسکل، اجازه می دهد. به همین دلیل ام ال یک زبان برنامه نویسی چند نمونه ای (multi-paradigm) نیز عنوان می شود.

خصوصیات ام ال شامل استراتژی سنجش فراخوانی با مقدار (call – by – value) ، توابع درجه یک، مدیریت حافظه خودکار در مواجه با مجموعه داده های ناخواسته، چندریختی پارامتریک و انواع پویا، انواع استنتاج، انواع داده های جبری، ازمون الگو و جابه جایی استثناء است.

برخلاف هاسکل، ام ال از ارزیابی مشتاق استفاده می کند به این معنا که تمام عبارات همگی ارزیابی می شوند. در نتیجه شما نمی توانید مستقیماً از لیست های نامحدود استفاده کنید. هرچند ارزیابی کند و بنابراین ساختمان داده های نامحدود مانند لیست ها می توانند به واسطهٔ توابع بی نام شبیه سازی شوند.

امروزه زبان های مختلفی در خانواده ام ال است دو گویش اصلی آن ام ال استاندارد و Caml است. اما بقیه شامل F# که یه پروژهٔ تحقیق باز که هدف .NET شرکت مایکروسافت بود نیز وجود دارند. ایده های ام ال در زبان های بی شماری نفوذ کرده است مانند هاسکل و Cyclone و Nemerle.

از توانایی های ام ال معمولاً در طراحی زبان بکار برده می شود (کامپایلرها، استفاده برای تحقیقات زیستی، سیستم های مالی و کاربردها شامل پایگاه داده های شجره نامه ها، برنامهٔ سرویس دهنده / سرویس گیرنده نظیر به نظیر.

مثال هایی از ام ال

تشریح برنامهٔ ام ال خالص


برنامهٔ Hello world! یک زبان تابعی، تابع فاکتوریل است. به عنوان یک ام ال خالص:

کد PHP:


fun fac (0 : int) : int = 1
| fac (n : int) : int = n fac (n-1)

این فاکتوریل را به عنوان یک تابع بازگشتی با یک وضعیت پایه (base case) محدود توصیف می کند. این شبیه تعاریف فاکتوریل یافت شده در کتاب های درسی ریاضیات است. بسیاری از کدهای ML از نظر امکانات و نحو نیز شبیه ریاضیات است.

قسمتی از تعریف نشان داده شده اختیاری است و نوع این تابع را تعریف می کند. نشانه گذاری E: می تواند به عنوان عبارت E که دارای نوع t هست تلقی شود. برای مثال متغیر n، برای نوع صحیح (integer) است و نتیجهٔ اجرای fac برای n (fac(n) ) هم نوع صحیح دارد.

بنابراین تابع فاکتوریل تابعی از نوع صحیح به نوع صحیح ( int -> int ) است. به خاطر نوع استنتاج،حاشیه نویسی نوع می تواند حذف شود و توسط کامپایلر نتیجه گیری شود. بازنویسی بدون درج نوع مانند مثال:

کد PHP:


fun fac 0 = 1
| fac n = n fac (n-1)

تابع همچنین وابسته به آزمون الگو است و این یک بخش مهم برنامه نویسی ML است. توجه کنید که پارامترهای تابع لزوماً در پرانتز نیستند اما حتما توسط فاصله گذاری جدا شده اند. زمانی که متغیر ورودی تابع 0 است، تابع نوع صحیح 1 برمی گرداند، برای حلات دیگر خط دوم اجرا خواهد شد. این خط بازگشتی است و تابع را دوباره فراخوانی و اجرا می کند تا زمانی که به وضعیت پایه برسد.

Borna66
05-25-2011, 10:37 PM
زبان برنامه نویسی الگول

الگول ( مخفف عبارت زبان الگوریتمی ) از خانواده زبانهای برنامه نویسی امری کامپیوتری است و در اصل در میانه های سال 1950 توسعه یافته که بسیاری از زبانهای دیگر را تحت تاثیر قرار داده است . عملا راهی شده است که الگوریتم ها در کتاب های درسی و فعالیتهای علمی برای تقریبا30 سال آینده توصیف شوند . الگول برای دوری از برخی مشکلات که در فرترن دیده شده بود طراحی شد و سرانجام باعث پیشرفت بسیاری از زبانهای برنامه نویسی دیگر شد . الگول ها کدها را به صورت بلوکی معرفی کرد و اولین زبانی بود که از دو جفت begin و end برای مرز بندی بلوکها استفاده کرد . قسمتهایی از الگول مانند syntax بعضی اوقات برای ثبت و یادداشت الگوریتم ها استفاده می شود . به همین خاطر به آن Pidgin Algol ( الگول دست و پا شکسته ) می گفتند .

سه خصوصیت اصلی الگول به شرح زیر است :

• الگول 58 با عنوان IAL (زبان الگوریتمی جهانی ) شناخته شد. • الگول 60 در سال 1963 عرضه شد . • الگول 68 درسال 1973 عرضه شد .

نیکلاس ورس Algol –Wرا در الگول 60 قبل از توسعه پاسکال پایه گذاری کرد Algol –W به منظور نسل بعدی Algol در نظر گرفته شد . ولی کمیته الگول 68 تصمیم به طراحی الگولی گرفتند که خیلی جامع ترو پیشرفته تر از الگول ساده شده 60 بود . نسخه رسمی الگول بعد از یک سال از اولین انتشار آن نامگذاری شد . الگول 68 درواقع متفاوت از الگول 60 است اما به خوبی پذیرفته نشد و در نتیجه الگول رایج و عام الگول 60 بود .

اهمیت و اجرا

IAL ( زبان الگول جهانی ) بسیار تاثیرگذار بود و به طور عام مورد توجه زبانهای برنامه نویسی جدید قرار گرفت . شرکت Burroughs خطوط کامپیوترهای آن را ساخت تا مستقیما" آن را به مرحله اجرا برساند . به علاوه در علم کامپیوتر کد موضوعی الگول ؛ یک سری دستورالعمل های معماری ساده و جمع و جوری بود که بیشتر در آموزش ساخت کامپایلر و بقیه زبانهای سطح بالای امری پیاده سازی عملی مانندLisp - machines و P – code machines مورد استفاده قرار گرفته شد . الگول توسط دو کیته علمی کامپیوتر آمریکا و اروپا در جلسه ای در سال 1958 در زوریخ توسعه داده شد .

سه دستورزبان متفاوت مشخص شده برای آن عبارتند از :

1 – نحو مرجع
2 – نحو نشر
3 – نحو اجرا نحوهای مختلف به آن اجازه می داد تا از کلمات کلیدی متفاوتی برای ممیز اعشاری برای زبانهای متفاوت استفاده کند .

الگول بیشتر توسط دانشمندان کامپیوتر در آمریکا و اروپا استفاده می شد . مورد استفاده آن در کار بردهای تجاری بوسیله نبودن استاندارد امکانات ورودی وخروجی در تعریف آن و فقدان بهره و سود و جذابیت در زبان بوسیله فروشنده های بزرگ کامپیوتر به تاخیر انداخته شد . الگول 60 نیز گر چه برای نشر الگوریتم ها استاندارد شد و تأثیر عمیقی بر توسعه زبانهای آینده داشت ولی به این سرنوشت دجار شد. (( جان بکوس )) روش شکل نرمال بکوس برای توصیف زبانهای برنامه نویسی بویژه برای الگول 58 را ایجاد کرد که بوسیله (( پیتر نور )) برای الگول 60 توسعه و عرضه شد و در پیشنهاد دونالد نوس به بکوس نور تغییر نام داد . پیتر نور می گوید : من به عنوان ویرایشگر پژوهشگر الگول در مذاکرات جهانی زبان قرعه کشی شدم و به عنوان عضوی از گروه طراحی زبان اروپا در نوامبر 1959 انتخاب گردیدم . تحت این اعتبار ؛ من ویرایشگر گزارش الگول 60 بودم که این محصول نتیجه جلسه الگول 60 در نوامبر 1960در پاریس می باشد .

افراد زیر در جلسه پاریس ( 1تا 16 ژوین ) حضور داشتند :

فردریش ال بویر – پیتر نور – هنس روتیشاوزر – کلاس سامل سون – برنارد واکیویس – آدرین ون وی جین گاردن و مایکل وجرد ( از اروپا ) جان دبلیو بکوس – جولین گرین – چارلز کاتز – جان مک کارتی – آلن جی پرلیس و ژوزف هنری وی گستین ( از آمریکا ) آلن پرلیس توضیح واضحی از جلسه داده است : جلسه خسته کننده و بسیار طولانی بود . وقتی ایده های خوب شخصی با ایده های بد دیگران کنار گذاشته می شد، باعث خشم و عصبانیت می شد . با وجود این سعی و پافشاری زیادی در طول این دوره می شد . جان بکوس و پیتر نورهر دو به این کمیته در تولید الگول 60 خدمت کردند , همانطور که والی فرزیگ بعدها در بوجود آوردن logo خدمات زیادی انجام داد . الگول 60 الهام بخش و تأثیر گذار در بسیار از زبانهای پیرو آن بود . تونی هویر بیان کرد : این زبانی است که از زمان خودش خیلی جلوتر است و نه تنها پیشرفته زبانهای گذشته است بلکه تأثیری در زبانهای آینده نیز دارد .

مشخصات

الگول 60 چنانچه رسما" تعریف شده بود امکانات ورودی و خروجی نداشت . پیاده سازی ها خودشان را در راه هایی تعریف می کردند که کمتربا یکدیگر همساز بودند. در مقایسه الگول 68 امکانات وسیع کتابخانه ای Transput را پیشنهاد کرده بود .

الگول 60 دو استراژدی ارزیابی برای قبول پارامترها داشت :

1.فراخوانی با ارزش و مقدار 2. فراخوانی با نام

فراخوانی با نام محدودیت های معینی در مقایسه با فراخوانی با مرجع داشت که آن را ویژگی نامطلوبی در طراحی زبان امری ساخته بود . برای مثال،در الگول 60 توسعه یک procedure که ارزش دو پارامتر را تغییر خواهد داد غیر ممکن است اگر پارامترهای واقعی ای که قبول می شوند تا متغیر integer و آرایه ای که با مقدار مشابه integer شاخص شده باشند . هر چند فراخوانی با نام هنوز هم مورد علاقه اجراکننده های الگول برای اجرای آن است . دونالد کنوت یک (( man or boy test )) تعبیه کرده بود تا کامپایلرها را مجزا کند که توابع بازگشتی و مرجع های غیر محلی را درست اجرا کنند . این آزمایش یک مثال از فرا خوانی با نام را دارا بود . الگول 60 بوسیله آدرین ون گاردن که از یک گرامر رسمی دو قسمتی استفاده شده است اختراع شد که در بردارنده نام او بود . Van Wijngaardan grammer از گرامر مستقل از متن استفاده می کرد تا مجموعه ای از دستوالعمل هایی را که برنامه های معمول الگول 68 را پشتیبانی و تصدیق خواهد کرد را تولید کند .

کلمات رزرو شده وشناسه های محدود شده الگول 60

35 کلمه رزرو شده در زیر زبان استانداردBurroughs large systems وجود دارد:

ALPHA, ARRAY, BEGIN, BOOLEAN, COMMENT, CONTINUE, DIRECT, DO, DOUBLE, ELSE, END, EVENT, FALSE, FILE, FOR, FORMAT, GO, IF, INTEGER, LABEL, LIST, LONG, OWN, POINTER, PROCEDURE, REAL, STEP, SWITCH, TASK, THEN, TRUE, UNTIL, VALUE, WHILE, ZIP

71 شناسه محدود شده در زیر زبان استانداردBurroughs large systems وجود دارد:

ACCEPT, AND, ATTACH, BY, CALL, CASE, CAUSE, CLOSE, DEALLOCATE, DEFINE, DETACH, DISABLE, DISPLAY, DIV, DUMP, ENABLE, EQL, EQV, EXCHANGE, EXTERNAL, FILL, FORWARD, GEQ, GTR, IMP, IN, INTERRUPT, IS, LB, LEQ, LIBERATE, LINE, LOCK, LSS, MERGE, MOD, MONITOR, MUX, NEQ, NO, NOT, ON, OPEN, OR, OUT, PICTURE, PROCESS, PROCURE, PROGRAMDUMP, RB, READ, RELEASE, REPLACE, RESET, RESIZE, REWIND, RUN, SCAN, SEEK, SET, SKIP, SORT, SPACE, SWAP, THRU, TIMES, TO, WAIT, WHEN, WITH, WRITE

مثالها

کد PHP:


Code sample (ALGOL 60)

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
value n, m; array a; integer n, m, i, k; real y;


comment The absolute greatest element of the matrix a, of size n by m is transferred to y, and the subscripts of this element to i and k; begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p, q]) > y then
begin y := abs(a[p, q]);
i := p; k := q
end


end Absmax

در اینجا مثالی است از اینکه چگونه یک جدول بوجود بیاوریم که ازالیوت803 الگول استفاده می کند.

کد PHP:


FLOATING POINT ALGOL TEST'
BEGIN REAL A,B,C,D'

READ D'

FOR A:= 0.0 STEP D UNTIL 6.3 DO
BEGIN
PRINT PUNCH(3),££L??'
B := SIN(A)'
C := COS(A)'
PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'
END'
END

پانچ3 یک خروجی را به پرینتر تلفنی سریعتر از نوار پانچ می فرستد.

الاین(6و1) فرمت خروجی را با 1 بیت قبل و 6 بیت بعد ممیز اعشاری کنترل می کند