ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
نوع گذاری ضعیف این امکان را ایجاد میکند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.
نوع گذاری قوی مانع رخ دادن مشکل فوق میشود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا میشود. زبانهایی که نوع گذاری قوی دارند غالبا با نام "نوع-امن" و یا امن شناخته میشوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبانها اشاره میکند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را میدهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل میکند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشتهای از حروف باشد. چنین تبدیلات ضمنی غالبا مفیدند، اما خطاهای برنامه نویسی را پنهان میکنند.
قوی و ایستا در حال حاضر عموما دو مفهوم متعامد فرض میشوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار میبرند و منظورشان قوی، ایستایی نوع گذاری شدهاست، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شدهاست. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده میشود.

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

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 ارسال
خصوصیات یک زبان برنامه نویسی باید تعریفی فراهم کند که کاربران و پیاده کنندههای زبان میتوانند از آن استفاده کنند تا مشخص کنند که رفتار یک برنامه درست است. با داشتن کد منبع: خصوصیات یک زبان برنامه نویسی چندین قالب میتواند بگیرد، مانند مثالهای زیر:
* تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولا با یک معناشناسی قراردادی مشخص میشود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
* توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
* پیاده سازی منبع یا مدل. گاهی اوقات در زبانهای مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحا در رفتار پیاده سازی مدل موجودند.

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 ارسال
پیشرفتهای اولیه
اولین زبان برنامه نویسی به قبل از رایانههای مدرن باز میگردد. قرن ۱۹ دستگاههای نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثالهایی از زبانهای برنامه نویسی با حوزه مشخص شناخته میشوند. با شروع قرن بیستم، پانچ کارتها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتمها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.
در دهه ۴۰، اولین رایانههای دیجیتال که توسط برق تغذیه میشدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سالهای ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.
کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامههای زبان ماشین استفاده میکردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده میشوند جایگزین شد. در سالهای بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخههای به روز شده این برنامهها همچنان مورد استفاده قرار میگیرند، و هر کدام قویا توسعه زبانهای بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبانهای برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبانهای برنامه نویسی به شدت متاثر از محدودیتهای رابط بودند.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثالهای عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبههای آن بهینه سازی ایدههای اولیه نسل سوم زبان برنامه نویسی بود:
* APL برنامه نویسی آرایهای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
* PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایدههای خوب فورترن و کوبول را بهم پیوند دهد.
* در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی میکرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به
عنوان اولین زبان کاملا شئ گرا معرفی شد.
* C بین سالهای ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
* Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
* در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبانهای برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.
هر یک از این زبانها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبانها از تبار حداقل یکی از زبانهای فوق به شمار میآیند.
دهههای ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبانهای برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.
"ادسگر دیکسترا" در نامهای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبانهای سطح بالا حذف شود.
در دهههای ۶۰ و ۷۰ توسعهٔ تکنیکهایی صورت گرفت که اثر یک برنامه را کاهش میداد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
دهه ۸۰ سالهای یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینههای گزافی صرف تحقیق در مورد زبان نسل پنجم میشد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثالهای جدید، تمام این تلاشها ایدههایی که در دهههای قبل حلق شده بودند را بهتر کرد.
یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستمهای بزرگ از طریق مدولها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستمهای مدولی برجستهای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبانهای دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستمهای مدولی غالبا با ساختارهای برنامه نویسی عام همراه شدهاند.
رشد سریع اینترنت در میانه دهه ۹۰ فرصتهای ایجاد زبانهای جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وبگاههای دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعهها اساسا نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثالهای موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا میکند، هم در تحقیقات و هم در صنعت. جهتهای فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونههای جدید مدولی(mixin، نمایندهها، جنبهها) و تجمع پایگاه داده.
۴GL ها نمونهای از زبانهایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه دادههای اسکالر را برگردانند، مجموعههایی را تغییر داده و بر میگردانند که برای اکثر زبانها متعارفند. Perl برای مثال، با "مدرک اینجا" خود میتواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.

www.Mojsazan.com.gif]" class="mycode_img" />
ارسالها: 3,102
موضوعها: 1,386
تاریخ عضویت: Mar 2009
اعتبار:
41
سپاس ها 1345
سپاس شده 3847 بار در 1858 ارسال
مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفادهاست، و اینکه کاربرد چه معنی میدهد با توجه به زمینه تغییر میکند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبانها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالبا روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامههای کاربردی، C در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولا برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
* شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
* تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
* تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
* شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولا یک زبان اجدادی ندارد. زبانها معمولا با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
زبان برنامهسازی نسل سوم (High Level Language)
زبان برنامهسازی نسل سوم (3GL)، بهبودیافته زبان برنامهسازی نسل دوم است. در حالی که هدف زبانهای برنامهسازی نسل دوم، قرار دادن ساختار منطقی در زبان بوده است، در زبانهای برنامهسازی نسل سوم، هدف این است که قابلیّت استفاده از زبانها را به گونهای بهبود بخشند که سادهتر شوند؛ یعنی بهکارگیری آن راحتتر باشد که منجر به این امر میشود که انواع مناسبی از توابع طوری بازنویسی شوند که کارایی بهبود بخشد و قسمت عمده حجم کد برنامه به کلاسها اختصاص یابد (مانند ویژوال بیسیک). پیشرفت زبان نسل سوم نسبت به نسل دوم در این است که از منظر کاربر، قابلیّت استفاده از زبان بهبود یافته است. این نسل، اوّلین بار در اواخر دهه 1950 طرّاحی شد و فرترن، الگول و کوبول، نمونههایی اوّلیّه از این نوع زبان هستند. بیشتر زبانهای امروزی (بیسیک، C، C++، C#، پاسکال و جاوا)، نیز زبانهای نسل سوم هستند. اغلب زبانهای 3GL، برنامهنویسی ساختاریافته را پشتیبانی میکنند.
زبان برنامهسازی نسل چهارم (Very High Level Language)
زبان برنامهسازی نسل چهارم (دهههای 1970 تا 1990) (به طور خلاصه: 4GL)، یک زبان یا محیط برنامهسازی است که با منظور خاصّی طرّاحی شده است، از قبیل توسعه نرمافزارهای تجاری – بازرگانی. در سیر تکاملی دانش کامپیوتر، زبانهای نسل چهارم به دنبال نسل سوم، روندی صعودی در تجرید و قدرت بیان بالاتر را طی کردند. در این نسل، تلاشهایی صورت گرفت تا زبانهای نسل پنجم تعریف شده و مورد استفاده قرار گیرند. زبان طبیعی، شیوه ساختار بلوکی زبانهای برنامهسازی نسل سوم، فرآیند توسعه نرمافزار را بهبود بخشید. در هر صورت، روشهای توسعه زبانهای نسل سوم، کند و خطاپذیر بودند. مشخّص شد که برخی از برنامههای کاربردی را میتوان خیلی سریعتر توسعه داد؛ بدین صورت: با افزودن زبان برنامهسازی سطح بالاتر و متدولوژیای که همارز دستورالعملهای بسیار پیچیده نسل سوم را تولید میکند. در برخی جهات، مهندسی نرمافزار بهوجود آمد تا توسعه زبانهای نسل سوم را یاری دهد. طرحهای مربوط به زبانهای نسل چهارم و پنجم، بیشتر در حلّ مسائل و مهندسی سیستمها تمرکز یافتهاند. تمامی زبانهای برنامهسازی نسل چهارم طرّاحی شدهاند تا تقلّاهای مربوط به برنامهنویسی، زمان و هزینه توسعه نرمافزار را کاهش دهند. آنها همواره در این زمینه موفّق نبودهاند، بعضی اوقات، کدهای تولید شده، زیبا و قابل نگهداشت نمیشوند. با وجود این مشکل، استفاده از 4GL مناسب، میتواند به طور فوقالعادّهای موفّقیّتآمیز باشد، چنانچه با MARK-IV و MAPPER دیده شده است (به بخش تاریخچه مراجعه کنید، برای پیگیری باربری در راهآهن شهر سانتافه، مرکز ایالت نیومکزیکو امریکا، کارایی هشت برابر بیشتر از کوبول، برآورد شده است). بهبود قابلیّت استفاده در بعضی از زبانهای 4GL (و محیط آنها)، اکتشاف راهحلهای ذهنی را نیز نسبت به زبانهای 3GL، بهتر ساخته است. یک تعریف کمّی از 4GL توسّط Caper Jones به عنوان بخشی از کارش در تحلیل نقطهای تابع، صورت پذیرفت. Jones، نسلهای مختلف زبانهای برنامهسازی را بر حسب قابلیّت تولید توسعهدهنده، تعریف کرد که به صورت نقاط تابع (Function Points) به ازای هر بُرج کاری (Staff-Month)، اندازهگیری میشد. یک 4GL به عنوان زبانی تعریف شده است که 12 تا 20 FP/SM را پشتیبانی میکند. این نکته با تقریبا 16 تا 27 خطّ کد در هر نقطه تابع پیادهسازیشده در یک 4GL، مرتبط میشود. زبانهای نسل چهارم، اغلب با زبانهای برنامهسازی با کاربرد خاص (DSL ها) سنجیده میشوند. برخی محقّقان اینگونه بیان میکنند که 4GL ها، زیرمجموعهای از DSL ها هستند. ماندگاری زبان اسمبلی را تا کنون در محیطهای توسعه پیشرفته (MS Studio) در نظر بگیرید؛ همه تصوّر میکنند که این سیستم باید و شاید، ترکیبی از تمامی نسلها به همراه کاربرد خیلی محدودی از قدیم باشد.
تاریخچه به هرحال، طبق آنچه در مقالات و مباحثات قدیمی بوده است، اصطلاح 4GL، اوّلین بار به طور رسمی توسّط James Martin در کتابش به نام «توسعه برنامههای کاربردی بدون برنامهنویسان» در سال 1982، به کار گرفته شد که به مشخّصههای زبانهای غیررویّهای و سطح بالا، اطلاق میشد. در برخی سبکهای قدیمی، تولیدکننده برنامه گزارش (RPG) شرکت IBM، در سال 1960، (که با دقّت توسّط دیگران پیگیری میشد) اوّلین 4GL را توصیف کرد، از قبیل محصول انفورماتیک MARK-IV و MAPPER از Sperry (کاربرد داخلی 1969، انتشار 1979). چندین انگیزه برای شروع و رغبت برای ادامه دادن 4GL، وجود دارد. این اصطلاح ممکن است شامل مجموعه بزرگی از محصولات نرمافزاری باشد. آن همچنین میتواند، رهیافتی برای جستجوی خصوصیّات معنایی بزرگتر و قدرت پیادهسازی، در نظر گرفته شود. مشابه آنچه 3GL قدرت بیشتری برای برنامهساز ارائه کرد، همانطور 4GL محیط توسعه را برای جمعیّت وسیعتری گشود. تا حدّی، 4GL نمونهای از پردازش جعبه سیاه (black box) است، (بدین معنی که) هر نسلی جلوتر از ماشین است. این خاصیّت دوم مستقیما با این امر مرتبط میشود که 4GL شامل خطاهایی است که (در بسیاری از موارد) برای اشکالزدایی، دشوارتر است. بر حسب کاربرد، یک 4GL، میتواند مبتنی بر تجارت باشد یا اینکه با حوزههای فنّی سروکار داشته باشد. جلوتر بودن از ماشین، بر نزدیکی به سطح کاربرد، دلالت دارد. با در نظر گرفتن ناهمخوانی مفاهیم و متدها در حوزهها، محدودیّتهای 4GL منجر به تشخیص نیاز به 5GL شده است. الگوی اوّلیّه ورودی برای 4GL، ورود دادهها با محدودیّت 72 کاراکتر (8 بایت برای توالی) کارتهای منگنه را پشتیبانی میکرد به گونهای که برچسب هر کارت، نوع تابع را مشخّص میکرد. با استفاده عاقلانه چندین کارت، سطح 4GL انواع زیادی از پردازش و گزارشگیری قابلیّت را ارائه کرد در حالی که قابلیّت معادل کدنویسی شده در یک 3GL، شامل شاید تمام جعبه یا بیشتر کارتها میشد. استعاره (metaphor) 72 کاراکتری تا مدّتی ادامه یافت تا اینکه رابطهای ترمینال و حافظه سختافزاری افزایش یافت. حتّی با محدودیّتهایش، این رهیافت از کاربردهای بسیار سطح بالا پشتیبانی میکرد. وقتی رابطها بهبود یافتند و افزایش طول statement ها و کار کردن با ورودی مبتنی بر گرامر ممکن شد، توان بیشتری روی کار آمد. نمونهای از این مورد را میتوان در Nomad یافت. نمونهای دیگر از توان Nomad، در توضیحات Nicholas Rawlings برای موزه تاریخچه کامپیوتر درباره NCSS، دیده میشود. در گزارش او آمده است که James Martin از Rawlings، راهحلّ Nomad برای یک مسئله استاندارد به نام مسئله مهندس میخواهد: "افزایش 6 درصدی نرخ شغل مهندسین، متوسّط 7 یا بهتر دارد." مارتین 12 صفحه کوبول و سپس تنها یک یا دو صفحه Mark IV از انفورماتیک را تهیّه کرد. Rawlings، تنها عبارت زیر را پیشنهاد کرد، اجرای عملیّات شروع شونده در یک زمان ... سیر تکاملی 4GL، تحت تأثیر چندین عامل قرار گرفته بود: محدودیّتهای سختافزار و سیستمعامل، فشار زیادی را اِعمال کرد. هنگامی که 4GL برای اوّلین بار ارائه شد، ترکیبی ناهمگون از سختافزار و سیستمهای عامل، پشتیبانی از توسعه برنامههای مشتری را برعهده گرفت که مختصّ سیستمی برای تضمین فروش شده بود. نمونهای از این مورد، سیستم MAPPER است که توسّط Sperry توسعه یافت. بههرحال، این مسئله به قبل برمیگردد که در ابتدا سیستم در بسیاری از برنامههای کاربردی موفّق بود و به پلاتفرمهای پیشرفته منتقل شد. آخرین متغیّر در سیستم اطّلاعاتی تجاری (BIS)، قرار دارد که Unisys را ارائه میکند. MARK-IV به عنوان VISION:BUILDER معروف است و توسّط مؤسّسات کامپیوتری ارائه شد. راهآهن شهر سانتافه برای توسعه یک سیستم از MAPPER استفاده کرد؛ در پروژهای که نمونه اوّلیّه 4GL، نمونهگیری سریع و برنامهنویسی توسّط کاربران بود. در واقع خیلی آسانتر بود که استفاده از MAPPER را به متخصّصان راهآهن بیاموزد تا اینکه عملیّات ریزهکاریهای راهآهن به برنامهنویسان آموخته شود. یکی از زبانهای قدیمی (و قابل حمل) که خصوصیّات 4GL را نیز داراست، Ramis بود که توسّط Gerald C. Cohen در Mathematica یک شرکت نرمافزار ریاضی، توسعه یافت. کوهِن ریاضی را کنار گذاشت و اطّلاعاتی را پایهگذاری کرد تا یک 4GL تقریبا مبتنی بر گزارشگیری به نام Focus را بسازد. انواع بعدی 4GL وابسته به سیستم پایگاه داده بوده و با نمونههای اوّلیّه در کاربرد تکنیکها و منابعی که از بهبود کلّی محاسبات با زمان نتیجه میشد، بسیار اختلاف داشتند. یک نکته جالب توجّه در مورد 4GL، تحقّق رابطهای گرافیکی و همچنین استدلالاتی بوده است که توسّط کاربر از زبانی که به سختی درک میشد، انجام میگرفت.
انواع انواع مختلفی از 4GL ها وجود دارد: برنامهسازی مبتنی بر جدول (بدون کد)، معمولا با فریمورک و کتابخانههای زمان اجرا، اجرا میشود. بهجای استفاده از کد، توسعهدهنده، منطقش را با انتخاب یک عملیّات در یک لیست از پیش تعریف شده یا فرمانهای دستکاری جدول دادهها، تعریف میکند. به عبارت دیگر، به جای کدنویسی، توسعهدهنده از الگوریتم برنامهنویسی مبتنی بر جدول (Table-driven) استفاده میکند؛ نمونهای مناسب از این نوع زبان 4GL، eDeveloper است. این نوع ابزار را میتوان در توسعه برنامههای کاربردی تجارتی به کار برد که معمولا شامل یک بستهبندی هستند که امکان گزارشگیری و نیز دستکاری دادههای تجاری را فراهم میسازد، بنابراین آنها همراه با صفحههای GUI (رابط گرافیکی کاربر) و ویراستارهای گزارشگیری هستند. مجتمعسازی آنها در صورت لزوم برای بیشتر عملیّات ویژه سختافزار / سیستمعامل، معمولا با DLL های سطح پایینتر ناشی از یک 3GL معمولی ارائه میشود. مولّدهای گزارشگیری، فرمت دادهها و گزارشهایی را که باید تولید شود، را تشریح میکنند. آنها گزارش مورد نیاز را یا مستقیما تولید کرده یا اینکه آنها برنامهای تولید میکنند که این گزارش را تولید کند. مشابها، مولّدهای فرم، تعاملات آنلاین را با کاربران سیستم برنامه کاربردی مدیریّت میکنند یا برنامهای برای انجام این کار، تولید میکنند. هدف بیشتر 4GL ها (که گاهی اوقات به آنها محیطهای نسل چهارم گفته میشود)، تولید اتوماتیک کلّ سیستمهاست شامل خروجیهای ابزارهای CASE (مهندسی نرمافزار با کمک کامپیوتر)، مشخّصات اِسکرینها و گزارشها و همجنین در صورت امکان مشخّصات چند منطق پردازش اضافی. 4GL های مدیریّت دادهها از قبیل SAS، SPSS و Stata که فرمانهای کدنویسی مصنوعی را برای دستکاری دادهها، بازسازی فایل، انتخاب موارد و مستندسازی دادهها را فراهم میکنند تا دادهها برای تحلیل آماری و گزارشگیری، آماده باشند. بعضی از 4GL ها ابزارهایی را فراهم کردهاند که ذکر مشخّصههای تمامی اطّلاعات مورد نیاز را تسهیل میسازد: James Martin، متدولوژی مربوط به توسعه سیستمهای مهندسی اطّلاعات ارائه کرد که موارد زیر را به صورت اتوماسیون داشت: امکان ورود نتایج تجزیه و تحلیل سیستم به شکل نمودار جریان دادهها (DFD)، نمودار ارتباط موجودیّتها (ERD) و ... از صدها هزار خطّ کوبول که شبانه تولید شده بود. جدیدترین محصولات 4GL طرّاح اوراکل و suite توسعهدهنده آن در کمپانی اوراکل، بر این موضوع تمرکز یافتهاند که تعاریف، فرمها و برنامههای گزارش پایگاه داده را تولید کنند.
چند نمونه از زبانهای نسل چهارم
کاربرد عمومی / چند بعدی: Agile Business Suite، Clipper، Cognos PowerHouse 4GL، DataFlex، Discovery Machine Modeler، Forté TOOL (transactional object-oriented language)، FoxPro، IBM Rational EGL (Enterprise Generation Language)، Omnis Studio SDK، Panther، PowerBuilder، SheerPower4GL (Microsoft Windows Only)، SQLWindows/Team Developer، WinDev، Up ! 5GL، Visual DataFlex (Microsoft Windows Only).
زبانهای پرسوجوی پایگاه داده: FOCUS، Genero، SB+/SystemBuilder، Informix-4GL، NATURAL، Progress 4GL، SQL.
مولّدهای گزارش: BuildProfessional، GEMBase، IDL-PV/WAVE، LINC، Metafont، NATURAL، Oracle Reports، Progress 4GL Query/Results، Quest، Report Builder، RPG-II.
زبانهای دستکاری دادهها، تحلیل و گزارشگیری دادهها: Ab Initio، ABAP، Aubit-4GL، Audit Command Language، Clarion Programming Language، CorVision، Culprit، ADS/Online (Plus transaction processing)، DASL، FOCUS، GraphTalk، IDL، IGOR Pro، Informix-4GL، LANSA، LabVIEW، MAPPER (Unisys/Sperry) now part of BIS، MARK-IV (Sterling/Informatics) now VISION:BUILDER of CA، Mathematica، MATLAB، NATURAL، Nomad، PL/SQL، Progress 4GL، PROIV، R، Ramis، S، SAS، SPSS، Stata، Synon، XBase++، SQR.
زبانهای مسیل داده (Data-stream): APE، AVS، Iris Explorer.
توسعه برنامههای کاربردی GUI مبتنی بر پایگاه داده: Action Request System، Genexus، SB+/SystemBuilder، Progress Dynamics، UNIFACE، OutSystems.
نگارگرها و مولّدهای تصویر: ابزارهای کیس (CASE) FOURGEN برای توسعه برنامههای کاربردی سریع (RAD) توسّط Gillani، SB+/SystemBuilder، Oracle Forms، Progress 4GL ProVision، Unify Accell.
سازندههای GUI: 4th Dimension (نرمافزار)، eDeveloper، راهنمای MATLAB، Omnis Studio، OpenRoad، Progress 4GL AppBuilder، Revolution programming language، Sculptor 4GL.
زبانهای توسعه وب: 1. ColdFusion 2. WaveMaker open source, browser-based development platform for Ajax development based on Dojo, Spring, Hibernate 3. OutSystems
زبان برنامهسازی نسل پنجم (زبانهای هوشمند)
زبان برنامهسازی نسل پنجم (یا بهطور خلاصه 5GL)، یک زبان برنامهسازی است که در حلّ مسائل، با استفاده از اِعمال قیود به برنامه، مبتنی شده است تا استفاده از الگوریتمنویسی توسّط برنامهنویس. اکثر زبانهای مبتنی بر قیود و زبانهای برنامهسازی منطقی و بعضی از زبانهای اعلانی، زبانهای نسل پنجم هستند. در حالی که زبانهای برنامهسازی نسل چهارم طرّاحی شدهاند تا برنامههای خاصّی را بسازند، زبانهای نسل پنجم طرّاحی شدهاند تا کامپیوتر را مجبور سازند که مسئله داده شده را بدون برنامهنویس حل کند. در این روش، برنامهنویس باید تنها در مورد آنچه مسئله نیاز دارد تا حل شود و آن شرایطی که با آنها مواجه میشود، بیندیشد و نیازی نیست تا در مورد چگونگی پیادهسازی یک زیربرنامه یا الگوریتم برای حلّ آن مسائل بیندیشد. زبانهای برنامهسازی نسل پنجم، عمدتا در تحقیقات هوش مصنوعی مورد استفاده قرار میگیرند. پرولوگ، OPS5 و Mercury، نمونههایی از زبانهای نسل پنجم هستند. این نمونه از زبانها به عنوان موج آینده در نظر گرفته شده بودند و برخی پیشبینی کردند که این زبانها برای توسعه سیستم، جایگزین تمامی زبانها، بهجز زبانهای سطح پایین میشوند. قابل ملاحظهتر اینکه، ژاپنیها از سال 1982 تا 1993، بیشترین تحقیق و هزینه را در پروژه سیستمهای کامپیوتری نسل پنجم صرف کردند؛ به این امید که یک شبکه کامپیوتری عظیم از ماشینها با استفاده از این ابزار طرّاحی کنند. در هر صورت، همچنانکه برنامههای بزرگتر ساخته شد، عیوب این رهیافت بیشتر آشکار شد. آنگونه که، تعریف کردن یک سری شرط در یک مسئله خاص، منجر به الگوریتمی کارا برای حلّ آن میشود که همین خود، یک مسئله بسیار دشوار است. این مرحله بحرانی هنوز به صورت اتوماتیک درنیامده و همچنان هوش انسان برنامهنویس را میطلبد. امروزه، زبانهای نسل پنجم، به عنوان یک سطح زبان کامپیوتری، به خوبی پیش نرفته است. تعدادی از فروشندگان نرمافزار، در حال حاضر، ادّعا دارند که نرمافزار آنها، نیازمندیهای مربوط به برنامهسازی بصری 5GL را پشتیبانی میکند.
تصوّر غلط رایج هرچند وقت یکبار، فروشندگان در فضای توسعه برنامههای کاربردی، قابلیّتهای 5GL (زبانهای نسل پنجم) را ادّعا میکنند. در اغلب اوقات، آنها واقعا 4GL هایی را با سطوح بالاتری از اتوماسیون و پایگاه داده، میفروشند. چون اطّلاع از 5GL، پایین است و این بدان علّت است که اغراقگوییهای (hype) در دهه 80، خیلی سریع ناپدید شد و سرانجام آن پروژهها همگی از قلم افتادند؛ همین امر راه را برای فروشندگان باز کرد تا دوباره از این اصطلاح (hype) در فروش ابزارهای جدیدشان استفاده کنند؛ بدون اینکه جدال و مباحثهای درباره نسلهای فعلی برنامهسازان داشته باشند. وسایل و ابزار آنها عملا از بستهبندی 4GL با امتیاز RAD، ابزارهای CASE و استفاده از کدنویسی گرافیکی (که نسل کد را تسهیل میبخشد)، تشکیل شده است. گام بعدی برای دستیابی به قابلیّتهای کامل 5GL، با رهیافت گرافیکی همراه است که برنامهسازی را تسهیل میسازد.

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