ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
زبانهای برنامهسازی ساختارهای زبانی دستورمداری در رایانهها هستند که بهوسیلهٔ آنها میتوان یک الگوریتم را بهوسیلهٔ ساختارهای دستوری متفاوت برای اجرای رایانه توصیف کرد و با این روش امکان نوشتن برنامه جهت تولید نرمافزارهای جدید بوجود میآید. معمولاً هر زبان برنامهنویسی دارای یک محیط نرمافزاری برای وارد کردن متن برنامه، اجرا، همگردانی و رفع اشکال آن هستند. عموماً زبانهای برنامه نویسی را به پنج نسل تقسیم میکنند:
* نسل اول زبان ماشین - زبان صفرو یک
* نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
* نسل سوم زبانهایی مانند کوبول و پی ال وان و... -دستورات قابل فهم تر برای انسان و نیاز به کمپایلرها
* نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاورههای انسانی
* نسل پنج زبانهایی مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط برنامه نویس
یک زبان برنامه سازی یک زیان مصنوعی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شدهاست.زبانهای برنامه نویسی برای ایجاد برنامههایی به کار میروند که رفتار یک ماشین را مشخص میکنند، الگوریتم دقیق را بیان میکنند، و یا روشی برای ارتباط انسانند. بسیاری از زبانهای برنامهسازی تعدادی قالب از ویژگیهای نوشته شده دستوری(syntax) و معنا شناسی (semantics) دارند، چرا که رایانهها دستورات دقیقا مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شدهاند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده سازی غالبی میباشند.(مانند Perl) اولین زبان برنامه سازی به قبل از اختراع رایانه باز میگردد، و برای هدایت رفتار ماشینهایی مانند دستگاههای نساجی اتوماتیک و نوازندههای پیانو به کار میرفت. هزاران زبان برنامه سازی خلق شدهاند، بیشتر در زمینهٔ رایانه، زمینهای که هر ساله بسیاری دیگر ایجاد میشوند.
منبع :ویکی

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
12-16-2009, 01:38 AM
(آخرین ویرایش در 12-16-2009, 01:39 AM {2} توسط مهرداد عباسی.)
زبانهای برنامهسازی را میتوان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم بندی کرد: الف)روشهای برنامه سازی ۱-زیر روالی ۲-ساخت یافته ۳-مدولار ۴-شئ گرا ب)نزدیکی به زبان ماشین ۱-سطح پایین ۲-سطح میانی ۳-سطح بالا ج)نوع ترجمه ۱-مفسری ۲-کامپایلری د)رابط برنامه سازی ۱-مبتنی بر متن ۲-مبتنی بر گرافیک (ویژوال)

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
ویژگیهایی که غالبا برای تشکیل یک زبان برنامه سازی مهم شمرده میشوند:
* تابع :یک زبان برنامه سازی، زبانی است که برای نوشتن برنامههای رایانهای به کار میرود که رایانهای را برای انجام محاسبات یا اجرای الگوریتم و یا احتمالا کنترل دستگاههای خارجی مثل چاپگر، ربات و... درگیر میکنند.
* هدف: زبانهای برنامه سازی با زبانهای طبیعی تفاوت دارند و آن اینکه زبانهای طبیعی فقط برای فعل و انفعالات بین مردم به کار میروند، در حالیکه زبانهای برنامه سازی همچنین به انسانها اجازه میدهد که از طریق دستورات با ماشینها ارتباط برقرار کنند. برخی زبانهای برنامه سازی بوسیله یک دستگاه استفاده میشوند تا دستگاه دیگری را کنترل کند. برای مثال برنامههای پست اسکریپت(post script) غالبا توسط برنامه دیگری برای کنترل یک چاپگر و یا نمایشگر ایجاد میشوند.
* ساختارها: زبانهای برنامه سازی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.
* توان بیانگر: نظریه محاسبات، زبانها را بوسیله محاسباتی که توان بیان آنها را دارند طبقه بندی میکند. تمام زبانهای "کامل تورینگ" میتوانند مجموعه یکسانی از الگوریتمها را پیاده سازی کنند.ANSI/ISO SQL و Charity مثالهایی هستند از زبانهایی که کامل تورینگ نیستند، ولی غالبا زبان برنامه نویسی نامیده میشوند.
برخی مولفین اصطلاح" زبان برنامه نویسی" را محدود به آنهایی میکنند که میتوانند تمام الگوریتمهای ممکن را پیاده سازی کنند، گاهی اوقات اصطلاح" زبان رایانه" برای زبانهای برنامه نویسی محدودتر به کار میرود. زبانهای غیر محاسباتی، مانند زبانهای مارک آپ(markup) HTML یا گرامرهای قراردادی مثل BNF، معمولا زبان برنامه نویسی محسوب نمیشوند. یک زبان برنامه نویسی(که میتواند کامل تورینگ نباشد) ممکن است در این زبانهای غیر محاسباتی (میزبان) تعبیه شوند.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف دادهها، و عملیات یا تبدیلهایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم میکند. یک برنامه نویس از انتزاعات آماده در زبان استفاده میکند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده ترین عناصر موجود بیان میشوند(مفاهیم ابتدایی نامیده میشوند). زبانهای برنامه نویسی با غالب زبانهای انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبانهای طبیعی برای ارتباط با دیگر انسانها، نویسندگان و گویندگان میتوانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانهها "دقیقا آنچه که به آنها گفته شده را انجام میدهند." و نمیتوانند "بفهمند" که نویسنده دقیقا چه کدی مد نظر نویسنده بودهاست] البته امروزه برنامههایی برای انجام این کار تولید شدهاند و تلاشهای بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص میکند. برنامههای یک رایانه ممکن است در یک فرآیند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامهها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامهای استفاده میشود، زبان اسکریپت میگویند. بسیاری از زبانها کنار گذاشته شدهاند، برای رفع نیازهای جدید جایگزین شدهاند، با برنامههای دیگر ترکیب شدهاند و در نهایت استعمال آنها متوقف شدهاست. با وجود اینکه تلاشهایی برای طراحی یک زبان رایانه" کامل" شدهاست که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبانهای رایانهای گسترده از گستردگی زمینههایی که زبانها استفاده میشوند، ناشی میشود: • محدوده برنامهها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستمهای بسیار بزرگ نوشته شده توسط صدها برنامه نویس است • توانایی برنامه نویسها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفهایهایی که با پیچیدگی قابل توجهی کنار میآیند. • برنامهها باید سرعت، اندازه و سادگی را بسته به سیستمها از ریزپردازندها تا ابر رایانهها متناسب نگه دارند. • برنامهها ممکن است یک بار نوشته شوند و تا نسلها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند. • در نهایت، برنامه نویسها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.
یک سیر رایج در گسترش زبانهای برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبانهای برنامه نویسی اولیه به سخت افزار رایانه گره خورده بودند. همانطور که زبانهای برنامه نویسی جدید گسترش پیدا کردهاند، ویژگیهایی به برنامهها افزوده شده که به برنامه نویس اجازه دهد که ایدههایی که از ترجمه ساده به دستورات سخت افزار دورتر هستند نیز استفاده کند. چون برنامه نویسها کمتر به پیچیدگی رایانه محدود شدهاند، برنامههای آنها میتواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را میدهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازندههای زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبانهای اختصاصی برنامه نویسی پیشنهاد شدهاند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
تمام زبانهای بزنامه نویسی تعدادی بلوکهای ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معنا شناسی و دستوری تعریف میشوند که ساختار و معنای مربوطه را توضیح میدهند.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
فرم سطحی یک زبان برنامه نویسی دستور آن نامیده میشود. غالب زبانهای برنامه نویسی کاملا متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده میکنند. از طرف دیگر، برنامههایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبلها برای مشخص کردن برنامه استفاده میکنند. دستور یک زبان ترکیبات ممکن سمبلها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص میکند. معنایی که به یک ترکیب سمبلها داده میشود با معناشناسی اداره میشود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبانها متنی هستند، این مقاله دستور متنی را مورد بحث قرار میدهد.
دستور زبان برنامه نویسی معمولا بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف میشوند. متن زیر یک گرامر ساده، به زبان 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);
گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی میتواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبانهای برنامه نویسی میتواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
معناشناسی ایستا محدودیتهایی بر روی ساختار مجاز متنها تعیین میکند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیتها به وسیله سیستم نوع گذاری انجام میشود.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
یک سیستم نوع گذاری مشخص میکند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی میکند، چگونه میتواند آن نوعها را تغییر دهد و رفتار متقابل آنها چگونهاست. این کارعموما توضیح داده ساختارهایی که میتوانند در آن زبان ایجاد شوند را شامل میشود. طراحی و مطالعه سیستمهای نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
یک زبان نوع گذاری شدهاست اگر مشخصات هر عملیات، نوع دادههای قابل اجرا توسط آن را با نشان دادن نوعهایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشتهاست. در غالب زبانهای برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبانهای برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامهها رد کنند. در برخی زبانها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامهها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبانهای نوع دار زبانهای تک نوعند. این زبانها غالبا اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالبا رشتههای کاراکتری که هم برای دادههای عددی و هم برای دادههای سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبانهای اسمبلی، این امکان را میدهد که هر عملیاتی روی هر دادهای انجام شود، که معمولا دنبالهای از بیتها با طولهای متفاوت در نظر گرفته میشوند. زبانهای سطح بالا که بی نوع هستند شامل زبانهای ساده رایانهای و برخی از انواع زبانهای نسل چهارم.
در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی میشوند(چک کردن یا رد کردن تمام عملیاتها)، غالب زبانهای امروزی درجهای از نوع گذاری را فراهم میکنند. بسیاری از زبانهای تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم میکنند.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
در نوع گذاری ایستا تمام عبارات نوعهای خود را قبل از اجرای برنامه تعیین میکنند(معمولا در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمیتوانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.
زبانهای نوع گذاری شده ایستا میتوانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحا نوعها را در جایگاههای منتنی مشخص مینویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریفها را بر اساس متن استنباط میکند. غالب زبانهای مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری میشوند

www.Mojsazan.com.gif]" class="mycode_img" />