زبانهای برنامه سازی
*زبانهای برنامه سازی:*
زبان در یک سیستم وسیله ی ارتباطی ساختار و قواعدبا یکدیگر است و اگر زبانی
بتواند این ارتباط را خوب برقرار کند به آن زبان طبیعی یا Natural Language
میگویند و چنانچه سیستمی بین انسان و ماشین ارتباط برقرار کند، به آن زبان
مصنوعی میگویند. زبانهای برنامهسازی برای ماشین، زبانهایی هستند که
کاراکتر و قواعد کاربردی خاصی دارند. دستورالعملها به صورت کاربردی به کار
رفته و ارتباطات را انجام میدهد. استاندارد IEEE برنامه سازی را به دو
گونه Low Level Language و High Level Language طبقه بندی میکند. هرچه سطح
زبان به کارکرد ماشین نزدیکتر باشد، زبان کارآمدتر و تواناتر است.
برنامههایی که با حداقل فضای حافظه ROM کار میکنند، زبانهای بهتری هستند
و از این گروه زبان اسمبلی کارآمدتر است. (می دانید که تمام زبانهای
کامپیوتری باید به زبان ماشینی که برنامه در آن Run می شود، کامپایل شود و
تنها این زبانها وسیله ارتباطی هستند)
هر برنامه به زبان ماشین شامل Stringهایی است که از باینری Numberهای ورودی
تشکیل شده و هر دستورالعملی که به زبان ماشین تبدیل میشود، دو part دارد:
*1- Command فرمان*
*2- Operation عملیات*
هرکامپیوتر جهت انجام وظایف خود دارای یک Operation Code است که به اختصار
OPC میگویند. بخش دوم در دستورالعمل سیستم کامپیوتر را وادار می کند تا
دستورالعملهایی را پردازش کرده و در حافظه جانبی RAM نگهداری کند.
تعداد دستورالعملهایی که در بین هر کامپیوتر اجرا کننده برنامه رد و بدل می
شود متفاوت است. استاندارد IEEE دستورالعمل ADD0124 را که در Registration
ویندوز نگه می دارد، از واحد حافظه گرفته و روی آن عملیات انجام می دهد. در
نهایت باعث می شود که خروجی کامپیوتر دیجیتال بتواند با یک تبدیلگر به
آنالوگ تبدیل شود و قابل استفاده شود. Encode و Decode کردن خروجیها در
کامپیوترها امری کاملاً ساده است که باید انجام شود، چون بعضی از
detectorهای عملگرها سیگنال ورودی آنها به صورت آنالوگ میباشد.
زبان اسمبلی (هم گداز) در ماشینها:
این زبان در سال 1990 ابداع شد و هم خاصیت Mnemonic و حفظی و سمبلیک و نمادین دارد. واژه Mnemonic اشاره به حافظه دارد و در بهبود فرآیند آماده سازی برنامه دخیل است. امروزه هر ماشین دارای هر مجموعه از کدهای Mnemonic است ، هرچند نمادهای واقعی بین کامپیوترها با ساخت مدلهای مختلف سخت افزار و نرم افزار فرق میکند.
در برنامه سازی به زبان اسمبلی، برنامه نویس فقط آدرس اولین محل را در برنامه پیاده میکند و از آن به بعد محلها را به دادهها و دستورالعملها میدهد. همچنین کامپیوترها را قادر میکند که دستورالعملهای نوشته شده را توسط برنامه نویس به کدهای ماشین تبدیل کند. کدکردن برنامه به زبان اسمبلی زمانبر و وقتگیر است و معایب آن حساب میشود و همچنین از زبانهای ماشینگرا بوده، یعنی جهت پردازندههایی با مدل خاص طراحی میشود.
زبانهای سطح بالا:
با سرعت بخشیدن به رویهی کد کردن در زبان اسمبلی، دستورالعملهای ماکرو یا Macro Instruction باعث شد که چند سطر کد به زبان ماشین تولید شده و آن چند سطر کل برنامه را تحت کنترل در بیاورد و توانسته است مسائل ریاضی و عملی را به راحتی انجام دهد. استاندارد DIN زبانهای سطح بالا را به زبانهای اداری ، تجاری ، عملی و چندمنظوره تقسیم میکند. زبانهای برنامهنویسی سطح بالا به کار برنامه سازی سهولت بخشیده است، اما مشکلاتی به وجود آوردهاند و آن کامپایل کردن دستورات است، به این طریق که کامپیالر کد اسمبلی را تولید و سپس کد مذکور اسمبل میشود و سپس بارگذاری شده و در قالب زبان ماشین اجرا می شود.
هوش مصنوعی:
در کامپیوترها از سال 1950 مورد استفاده قرار گرفته که با استفاده از الگوریتمهای کهنه و کنترلی راست ، برنامهنویس را قادر میکند که بتواند با استفاده از جبر بول و الگوریتم وراثتی فازی یک زبان قابل فهم برای ماشین ابداع کرده و با استفاده از Intelligence Network و استفاده از سنسورهایی کارآمد و همچنین شبکه های محیطی از قبیل ATM وATD زبانی آشنا برای ماشین تلفیق نماید. شبکه های هوشمند در دهه 1970 با استفاده از زبان برنامهنویسی RPG (Report Programming Generic) در یک میلیونیوم ثانیه عدد π را تا 5 رقم اعشار حساب نماید. (کامپیوترهای سری SUN با پردازنده های مکینتاش)
کمیته های مشترک MCM و GAMM در سال 1970 زبان ALGOL را معرفی کردند که ساختاری بر مبنای دودویی داشت. در زبان ALGOL ساختارهای بلوکی و اعلانهای سریع با استفاده از یک طول حیات پویا برای زبان در مقابل طول حیات ایستا (Dynamic Life Time)، دستورالعملهای IF-Then-Else را برای فراخوانی Call By Value و آرایههایی با کرانههای پویا اجرا کرد.
Jon Box مبتکر زبان برنامهنویسی Fortran، یک زبان Modular را که دارای ساختاری بلوکی جهت استفاده در زبان برنامهسازی فضاپیماهای Shuttle پیادهسازی کرده بود، در سال 1979 اجرا کرد. در این زبان رویههای فراخوان در صداکردن یا فراخوان کارکرد الگوریتمهای چندبعدی به شیوهای کلان به همراه یک زیربرنامه Show Ball با استفاده از کدهای شبیهسازی شدهی ماشین استفاده میشود. در این زبان علامت سمیکالون (;) برای اولین بار تعریف شد و توانست جای خود را در کامپایلرهای PL1 که ویژگی های تحت گزینهای انتخاب پیشفرض را در بارگذاری ساختار نوین غیرملموس زبان PL1 و فراگیری Fortran باز کرد.
زبان PL-1 ساختاری تو در تو داشت و به صورت خودفراخوان از زبان Algol با فایلهای خطاگرا Error Handless از زبان Cobol و یک طبقهبندی Fortran استفاده کرد و خصوصیتهای آن برای توانمندی استفاده کرد تا به اندازه زبان Fortran بتواند خاصیت شیگرایی اصولی را در طراحی زبانهای چندکاربردهی تحت DOS و به قرار ویندوز 98 انجام دهد. زبان Cobol با استفاده از پیش فرض زبان Fortran توانایی کامپیوترهای شخصی را در مدت زمان کوتاهی فتح کرده و با استفاده از پیشفرض زبان Fortran توانایی کامپیوترهای شخصی را در مدت زمان کوتاهی فتح کرده و استفاده از فرمت NTFS ، DNHS ، FAT30 و FAT32 به اکثر کامپیوترها نفوذ کرده و اولین بار شرکت MIX آمریکا، نرمافزار مترجم Basic PC که بنیانگذار آن "Bill Allen" بود، در شرکت مایکروسافت و اینتل طراحی و پیاده سازی کند. ابداع کنندگان زبان Basic دو استاد دانشگاه گارسمولی به نام "جان کنلی" و "توماس پرتس" بودند که زحمات زیادی را تحمل کردند تا از طریق فراگیری زبانهای پیشرفتهتر یک زبان به نام "دارسیمرگ" به وجود آوردند. این زبان بسیار ریاضیگونه بوده و با نفوذ آن در Fortran، باعث منسوخ شدن Fortran شد. زبانهایی مثل سیمولا که نروژ طراحی کرده و یونیواک که در ایتالیا طراحی شده، همپایه زبان Fortran هستند و توابع ریاضی چندکاربردهی آنالیز جبر بول را در خود دارد و این زبانها با واژه Begin شروع و با End پایان مییابند. استاندارد ISA با مرکزیت دانشگاه Stanford در 1981 زبان BCPL را به نام زبان برنامهسازی B توسط "کن تامپسون" عرضه کرد و در ابتدا او توانست زبان خود را 7 سال زبان اصلی کامپیوترهای USA کند. اما در سال 1988 از زبان C توسط دو دانشمند آمریکایی و آلمانی به بازار عرضه شد. (زبانهای PL1 و C بسیار به هم شباهت داشته و با تلفیق آن به هم، C++ به دنیا آمد.)
زبان C یک زبان سطح میانی بود و در قیاس با سایر زبانها ویژگیهای متوسطی داشت. در تماس با ماشینها، قابلیت ارتباط نسبتاً متوسطی را از خود نشان میدهد که در تطابق زبانهایی مثل PL1 مشکل نداشته و دستیابی به دادهها از نوع Type-Oriented (نوعگرا) بوده و در اغلب ارتباطات خود میتواند به صورت شناسههایی Argumentic و Actual یک تابع یکسان نمایی را در زمان کامپایل کردن برنامهها از خود نشان دهد. C تقریباً زبان همهمنظوره است که عملی و مهندسی و تجاری میتوان با آن برنامه نوشت و مراحل طراحی و پیادهسازی آن را با یک انتخاب تکرارگر پیشبینی میکنیم. به نظر استاندارد IEEE ، زبان C به دلیل قابلیت انعطافپذیر بودن آن، یکی از بهترین زبانهای ارتباط با ماشین تا به حال است. تا سال 1972 زبان برنامهنویسی Small Talk که یک زبان چندمنظوره برای نرم افزارهای ناسا بود، به بازار عرضه شد. این زبان قابلیت مقایسه شیگرایی در مدل های Oriented و Oriented-Less را با استفاده از یک مالتیپلکس چندمنظوره با استفاده از Data Baseهای جداگانه؛ به وسیله کاربرد انواع Connectionهای پیشفرض جهت نمایش مقایسهی شیگرایی و خطاسازی و آنالیز آن به بازار عرضه شد.
زبانهای سال 1980:
در این زبانها که پر افت و خیزترین سال از نظر هزینههای نرمافزاری در طراحی و پیادهسازی زبانهای چندمنظورهی سطح بالا که با ستفاده از DOD (سازمان دفاع) ؛ سه میلیون دلار از سال 1970 تا 1972 صرف نوشتن برنامههای کاربردی شد. در سال 75 کارگروه HOLWG تشکیل شد. HOLWG کارگروه ترکیبی از انواع مکانیکهای صنعتی ، مهندسین کامپیوتر، شیگرا و کنترل بود که در این حین؛ این کارگروه با استفاده از زبانهای زیرساختی Small Talk و C تحت نظر (در آزمایشگاه کارخانجات SUN) توانست به دانستههای خوبی در زمینههای سیستمهای Micro Controller و نیازمندیهای Connectivity آنها برسد.
از سال 75 تا 80 یک رقابت شدید بین روسیه و آمریکا برای نوشتن زبان چندبعدی و کامل درگرفت که در این نبرد آمریکاییها پیروز شدند. "جی اکباتا" سرپرست کارگروه HOLWG توانست اولین زبان برنامهنویسی چندمنظوره را به نام ADA در سپتامبر 1980 به عنوان Base زیرگروه برنامه های قابل دسترسی بر روی همه گونه کامپیوتر (قبل از نسل پنتیوم) استفاده شد. با به وجود آمدن الگوی ADA که زیرمجموعه زبانهای کامل چندمنظوره بود، پژوهشگران روسی با کارگروه OOP در دانشگاه مسکو توانستند توسط راهبریهای "آناتولی ریچکف" با حدود 300 هزار نفر ساعت کار ، زبانی چندمنظوره که از زبانهای قبلی الهام گرفته بود به نام C++ که یک زبان شی گرایی خالص بود، اما دپارتمان Connection آن با نرم افزارهایی مثل "Talk" و "ایفل" فرق دارد، رسیدند.
آمریکایی ها در زمان جنگ سرد، با دزدیدن دو مهندس کارگروه OOP به دستاوردهای آنها دست یافته و در "آپولو 4" و "آپولو 6" از کدهای Encode شدهی برنامه C++ استفاده کردند.
1980 مقطعی بود که بر سرداشتن زبانهای سطح بالا برای ابرقدرت ها دهه چهارم زبانها نام گرفت که زبانهایی از سری خانواده Oriented-Less و Oriented با نام های IDEAL ، MANTIS ، انواع SQL ، Application Factory و Natural Log به بازار عرضه شد.
در سال 85 در یک مقطع زمانی توسط "جمیز استیفن هارد" زبان Cobol با استفاده از چند زبان زیرمجموعه نوشته شد. این زبان قابلیت بارگذاری انواع کدهای 8 بیتی و 32 بیتی را در پاکتهای مختلف ارسال اطلاعات نرم افزاری ایجاد نمود. زبان Cobol زبان خوبی بود، اما مشکلات خاص خود را داشت که میتوان به درونگرایی و Close Source بودن آن اشاره کرد که دست و پای زبان را برای ارتباط با دادههای با پاکتهای بزرگتر و کوچکتر میبست.
زبانهای دهه 1990:
در این سال دهه پنجم زبانها آغاز شد و زبانهای نسل پنجم به دنیا آمد. این زبانها، زبانهایی به نام TCL و Perl بودند که دو زبان سطح بالای Oriented-Less و High Connection میباشند. در دههی 90 انواع هوش مصنوعی در کامپیوترها نفوذ کرده و شبکههای Intelligent Network با استفاده از دو الگوریتم کهنه و راست به نفوذ کردن در کامپیوترها پرداخته و زبانها نیز تابع کارکرد آنها شدند.
در کامپیوترهای دههی 90 سیستمهای خبره و مبتنی بر دانش زبانهای طبیعی با استفاده از نسل سوم CPUها و ECUها توانستند با بهره بخشی از انواع حا فظه های جانبی ROM و RAM به سرعت های 1.6 MHz/s دست یابند و در سال 94 اولین سری پنتیوم متولد شد که دستساز شرکت INTEL بود.
با استفاده از فناوری به اشتراکگذاری اطلاعات یا Beach File ؛ باعث ارتقاء نسل پنتیوم تا سال 97 به پنتیوم شد که این سیستم یک Core ژلاتینی هیدروفلکسیبل خنک کننده با هوا بود که به صورت 16 بیتی در حالت Advance Research خود میتوانست بر سیستمهای مبتنی بر دانشهای خبره وارد شده و مقدورات انسانی از قبیل بینایی ، شنوایی و لامسه را در انواع رباتهای پیکربندی شدهی EFGL ایجاد کند. این تکامل با استفاده از انواع نرمافزارهای چندکاربرده در سیستمهای Open Source ادامه دارد. حال طبق نظر IEEE به بررسی محیطهای پردازش در سیستمهای کامپیوتری و طراحی آنها میپردازیم.
1- محیط پردازش دسته ای Batch Processing :
در این دسته از پردازشها، پردازش به صورتی که گروهی باشد انجام می شود، ولی دادههای ورودی به طور متداول قبل از تبدیل شدن، به شکل قابل خواندن توسط ماشین به مستنداتی نگهداری میشود. این فنون تقریباً در دهه 60 و زبانهای آن دوره از سیستمهای Interactive Processing (پردازش محاوره ای) میباشد. در این زبانها ضمن تسهیل در جمعآوری دادهها ، میتوان از خروجی کامپیوتر یک بانک اطلاعاتی تولید کرد. در این روش فایلها متداولترین ساختار ورودی و خروجی میباشند. در این سیستمها پس از هر بار ثبت کردن خطا از طرف سیستم عامل ، هیچگونه کمکی جهت پردازش اطلاعات در صف مانده نمیشود.
2- پردازش موازی Parallel Processing :
در این روش سازندگان کامپیوتر متکی به طراحی تکپردازندههای خطی با استفاده از معماری ترتیبی بودند. روند طراحی در جایگذاری معماری موازی به جای معماری ترتیبی اینگونه است که برنامهها به چند Source مختلف تبدیل شده و با استفاده از مفهوم چندپردازندهگی (موازی) ؛ با استفاده از پورتهای موازی کامپیوتر به صورت سلسله مراتبی برنامههای ماژولار به صورت modular مد نظر بوده که با استفاده از چنین محیطی زبان "Prolog" که تقسیم کنندهی پردازش موازی و بهترین زبان Paralleling (موازی پردازشی) سیستم های چند جزئی Open Source میباشند، در زبانهای توزیع شده مورد استفاده پردازش موازی قرار گرفت.
3- محیط پردازش محاوره ای Prolog Processing :
این پردازش بلافاصله پس از وارد کردن دادهها به کامپیوتر شروع میشود و از طریق پرسش و پاسخ توسط یک کامپایلر، یک بانک اطلاعاتی در سیستمهای رهیافت مبتنی بر خط (online) به صورت همبستگی (بسته های به هم متصل) در محیطهای مشاورهای خروجیهایی تولید میکند که در استاندارد IEEE با شماره 10630 در یک دوره زمانی قابل قبول به پاسخگوییها مثل زبان محاورهای C و C++ در یک سیستم Object Oriented چندکاربرده و زیرساخت زبانهای پردازش موازی انجام میشود.
سیستمهای Real Time:
این سیستمها از یک محیط پردازش Real به صورت موازی استفاده میکند که این سیستم از پردازش محاوره ای بهره گرفته و با استفاده از خطوط ارتباطی High Speed و شبکه های BISDN (باند گسترده) استفاده کرده و با استفاده از همزمانی و یک نسبت همدیسی از انواع Task Packageهای ضبط شده به صورت موازی استفاده کرده و برای رسیدن به رکوردهای جدید با قابلیتیReality 100% جهت ایجاد یک محیط پردازش Real Time در محیطهایی نظیر نیروگاههای اتمی، موشکهای هدایت شونده از راه دور و خاتمه دادن به فرجام های تکالیف Task Orientedها با استفاده از دو تابع Time و Clock ؛ زمان و ساعت ؛ استفاده میشود. دو تابع Time و Clock ؛ تابعهایی هستند که دارای نقطهی عطفی به میزان بیشینهی مقدار پیش بینی در محیطهای پردازش Real Time می باشد.
نکته: طبق نظر استاندارد IEEE زبان برنامه نویسی باید شامل ابزارهای زمان باشد که در سیستم عامل SRXT 25 و SRXT86 در محیط Real Time کار میکند.
محیط پردازش بطنی:
این محیطها دارای هزینهی نسبتاً بالایی هستند؛ اما بسیار قابل اعتمادند. محیطهای بطنی قابلیت ارتقاء و صحت ویژگیهای مهمی را در برنامههایی چون C و C++ مناسب میدارد. برنامههایی که برای چنین سیستمهایی نوشته میشود ، بدون سیستم عامل بوده و بدون محیط معمولی اجرا می شود، ولی باید با دستورهای دیگر با تعامل بوده و ورودی و خروجی غیر استاندارد نیز تولید میکند. سیستمهای بطنی با سیستمهای Real Time درگیر بوده، یعنی به ورودی پاسخ داده و در زمان محدودی ورودی تولید مینماید.
کیفیت برنامه سازی:
کیفیت برنامهسازی بر فرآیند تولید بسیار تاثیرگذار است و در مقایسه با زبان اسمبلی طبق استاندارد سنجیده میشود. این زبان توانایی مقایسهی خصوصیات برنامههای عادی را به جز قابلیت حمل دارد. کیفیت زبان برنامهسازی باید طوری باشد که طبق نظر استاندارد بتواند خصوصیات کاملی را که ما از یک زبان احتیاج داریم، به ما بدهد.
تاثیر خصوصیات برنامه سازی بر کاربر:
استاندارد ساختار تأثیر برنامهسازی را بر کاربر اینگونه تفسیر میکند که این موارد بر کاربر تأثیر دارد:
مفهوم کارآیی ، قابلیت حمل ، سبک برنامهسازی ، محلی که برنامه در آن کار کند و اینکه کاربر درک کند که یک مسئله در کامپیوتر چگونه حل میشود.
تاثیر سبک بر مستندسازی:
یک برنامهی خوب از صحت ، شفافیت و شناخت منطقی بالایی برخوردار است و این شفافیت بر حسب کارآیی سنجیده میشود. ساختن الگوریتمهای مفهومی از انواع برنامههای نوشته شده، آسان است و بدین ترتیب سبک برنامهسازی از خود متن برنامه حاصل میشود.
استقلال و قابلیت حمل:
این استقلال از خصوصیات جزئیات ساختار کامپیوتر نظیر طول کلمه ، طرح آدرسدهی و تعداد ثابتها ناشی میشود . محیط برنامه باید بتواند بر روی اکثر کامپیوترها (حداقل نسخۀ Beta) Run شده ، با استفاده از زبانهای سطح بالا کار کاند.
نیازمندیهای برنامهسازی ساختیافته:
قابلیت پخش یا Modular بودن نرمافزارها به توانایی در ترکیب تعداد ماژولهای پیمانهای (مدلها) و قابلیت ارتباط با زبانهای برنامهسازی دو پرسش را مطرح میکند:
1- کدام یک از واحدها جهت ارائه ماژول برنامه مناسب است ؟
2- رابطههای به کار رفته در ترکیب ماژولهای برنامه کدام است ؟
نکته: یک ماژول باید مستقل از ماژول دیگر شود و باید بتواند به نحو مستقل کامپایل شده و در زیرساختهای برنامههای Object Oriented طوری مستقل از سایر برنامهها عمل کند که برنامه در کمترین مقدار RAM با استفاده از IO های کمتر RUN شود.
رابطۀ بین تعریف و پیاده سازی زبان:
طبق استاندارد ANSI ، سه گروه اصلی ؛ خوانندگان یک تعریف زبان هستند:
1- Userها
2- پیاده سازان
3- نظریه پردازان
هریک از این سه گروه نیازمند نیازمندیهای خاص خود هستند و از دید یک پیادهساز زبان تعریف یک زبان نه تنها راهنماست؛ بلکه جنبه بهرهگیری از آن را نیز دارد. از نظر یک نظریهپرداز (تئوریسین)؛ یک زبان خوب زبانی است که با منطق ریاضی سازگار باشد و با اصول متداول و نظریههای متعامد (برخورد کننده) طوری برخورد کند که منطق کامپایل معنادار شود. در حقیقت تقسیمبندی ترتیب ورود اطلاعات در متن، بهتر است که از مبداء صورت بگیرد.
انواع گرامرها و ویژگی های عمومی زبان ها:
یک زبان طبیعی زبانی است که میان آوا و معنی رابطه ایجاد کند. واژهشناسی نیز از انواع بحث های میانبحثی است که قادر است با استفاده از آن واژهها و آواها را از هم متمایز کند.
به جملۀ “The student speak the language” دقت کنید، درخت جملۀ مذکور اینگونه است:
به نمودار درختی نگاه کنید. شکل ساده شدهی درخت را دوباره نگاه کنید.
به ساده شدهی درخت نگاه کنید:
S=NP+VP
NP=Det+N
VP=V+NP
پس با داشتن قواعد زیر میتوان هزاران جملهی ستوری داشت.
ابزارهای ریاضی:
ریاضیدانان کوشیدهاند که حقایق را آنگونه که هست نمایش دهند ، لذا 2+1 را میتوان از طریق ADD ، 2+1 ، 0010 و 0001 نشان داد. این روشها سه روش مختلف جهت عمل جمع هستند. در ریاضی شکل و معنا (فرم و سیمانتیک) دارای فرم و مفهوم خاصی میباشد که با استفاده از منطق جبر بول و نظریهی فازی بیان شده توسط انیشتین و با قواعد استدلالی حاصله از نحوهی پیروی المانهای ریاضی یک دستور مجازی به نتیجه میرسد.
نظریۀ فازی:
A1B Y BfC
استفاده از منطق، نظریهی مجموعهها و نظریهی لاندا با استفاده از تابع بازگشتی خودفراخوان و همچنین هوش مصنوعی، میتواند بستر مناسبی از سطوح مخصوص و پیادهسازی در زبانهای معادل با استفاده از رابطهها، قضیهها و انتصابهایی که با استفاده از مفهوم بیت و بایت به الگوی اولیه (پارادایم) زبان میرسیم که این پارادایم دارای یک ویژگی انتزاعی و خلاصه ، با استفاده از الگوی زبانهای توزیعشده و اعلانکننده و امری. به پارادایم الگوی زبان در استاندارد ANSI نگاه کنید.
الگوهای امری:
این الگوها محاسبه را از طریق تغییرات حالت آسان میکند و وضعیت حافظه را با استفاده از حافظهی تصادفی RAM هنگامی که برنامههای کامپیوتر هنوز به صورت یک لیست مشخص نشدهاند (offline هستند)، مرتبط میکنیم.
CPU میتواند به عنوان بخشی از حالت اولیه کارکردن نرمافزار به صورت جزئی با آن توصیه شود. اولین کار CPU ، وارد کردن لیست نامرتب و آخرین کار آن خارج کردن لیست مرتب است.
الگوهای ساختیافته بلاکی:
میدانید که زبان Fortran اولین زبان کامل بلوکهای برنامه بود که با استفاده از دادههای مشترک به رویهی رجوع به بلاکها در مورد انواع تکراری بلوکها امکان دستیابی به سطح گستردهای از زبان را فراهم کرد.
الگوهای مبتنی بر شی:
این الگو بیانگر زبانی است که از تعامل شیها حمایت میکند و یک شی، گروهی از رویههاست که در حالتی سهیم هستند که این رویهها با استفاده از توابع مورد استفاده در زبانهایی مثل ADA که در آن شیها بسته بوده و ماژوآل می باشد و مثل زبان Small Talk دقیقاً الگویی بر شی دارند، استفاده میشوند.
الگوهای توزیع شده:
برنامهسازی همروند به دو طبقه قابل تقسیم است:
1- سیستمهای مستحکم
2- سیستمهای اتصاف آزاد
واژه توزیع معمولاً به زبانهای با اتصال آزاد اشاره دارند و با استفاده از عبور دادن پیام از طریق یک LAN حمایت میشود. در سیستمهای توزیعشده با اتصال آزاد لازم نیست که یک اشتراک همزمان از حافظه پشتیبانی کند و اخیراً بر روی زبانهای مستحکم؛ اشتراک نتایج از طریق فرآیندی به نام محل تجمع مییابد.
برنامهسازی منطقی:
این الگو حاصل از حساب اصول و قواعدی است که بتوان حقایق جدی را شبیه به جملات هورن بیان کرد و با استفاده از یک روش مکانیکی که حاصل از استدلال تجربه است یک برنامهی منطقی که با استفاده از اصول اولیه منطقی مدارات منطقی AND و OR و NAND و NOR استفاده میشود و با استفاده از Prologهای نمونه (زبان پرولوگ) یک بستهی مناسب برای ساخت یک برنامهی منطقی ایجاد میکند.
برنامه های تابعی:
این برنامه ها با استفاده از توابع خاص کار می کنند و با استفاده از لیستی از پارامترهای یک مقدار منفرد باز را در تابع حل خود (یا z یا لاپلاس) قرار داده و با استفاده از مقادیر طبقه یکم تابع (حد پایین) از مقدار تابع اولیه خود با استفاده از عدد e یک جمله ی وصفی از ورودی و خروجی خود نمونه برداری کرده و با کامپایل کردن تابع به جمله های منطقی یک برنامه ی تابعی می سازد.
زبان های پایگاه داده ای:
خصوصیات این زبان بسیار خاص است. این برنامهها بعد از پاک شدن و Uninstall شدن از hard کامپیوتر پاک نمیشوند و به صورت نامحدود باقی میمانند. چون پایگاه داده دائمی بوده و محدودیتها شیگرا میباشند، تغییر غیرممکن است. این سیستمها شامل یک زبان داده و همچنین یک زبان آرایشی دادهها به صورت DML یا Data Mainplan Language جهت تعامل با دادهها میباشد. حال برای درک بهتر به تحول معماری نرمافزارها میپردازیم. این تحول شامل دورههای کامپیوترهای بزرگ، کامپیوترهای دارای حافظهی جانبی وسیع و دارای محیطهای دستهای و محاورهای میماند. اثراتی که بر طراحی زبان داشتهاند در دستههای ورودی و خروجی فایلها و در سیستمهای محاورهای در ورودی و خروجی خطی وجود داشت. در انواع دستهای، کاربر نمیتواند هیچ کمکی در هنگام بروز خطا به سیستم بکند، ولی در نوع دستهای محدودیت زمانی هم وجود ندارد.
کامپیوترهای شخصی:
این کامپیوترها اثراتی در مورد زبان با گرافیکهای مناسب با رابطهای مناسب بر سیستمهای جاسازی شده اغلب بدون سیستمعامل میباشد، ولی در عوض امکان دسترسی به ثباتها را فراهم کرده و اداره خطاها را به راحتی انجام میدهد. این سیستمهای جاسازی شده، به صورت Real Time (بی درنگ) کار میکند.
دوره شبکه :
این دوره شامل سیستمهای توزیعشده ، محیطهای اینترنتی و اثرات در طراحی زبان است و زبان برنامهنویسی Client Server با محیطی ایستا و پویا از این دسته میباشد. محیط عملیاتی که در این سیستمها انجام میشود، میزبان نام دارد که این میزبان برنامههایی جهت اجرا روی یک موبایل یا کامپیوتر را با محیطهای مختلف اجرا میکند.
دامنه و کاربرد زبانها:
جدول زیر نشان می دهد که از 1960 تا به حال دامنه ی کاربرد زبان ها چگونه جلو رفته است . این زبان در سیستم های تجاری با Cobol شروع شده و در سیستم های امروزی به Prolog و Post Script ختم شده است.
استاندارد IEEE معیارهای یک زبان خوب را با وضوح خوب ، اتحاد خوب ، طبیعی بودن ، پشتیبانی از جدید (امکان ایجاد ساختارهای جدید) ، سادگی بررسی درستی برنامهها ، هزینهی کم ، داشتن قابلیت استفاده از آن زبان در برنامههای دیگر و ماشینهای دیگر و داشتن محیطی کاربرپسند.
در مبحث هزینهها نیز کم باشد
مدل های زبانی:
استاندارد ANSI آنها را به انواع دستوری ، تابعی و قانون داد تقسیم میکند. مدلهای دستوری مانند زبانهای C و PASCAL، مدلهای تابعی نظیر C++ که بدون توجه به چگونگی انجام عمل فراخوان یا تعدادی از تابعها دارد و ارسال آن به عنوان یک پارامتر به زبان کمک میکند، همچنین در انواع زبانهای قانون دار انجام عملیاتها بسته به شرط است و بدون توجه به ترتیب اجرای برنامه عملیات انجام می شود. زبان PROLOG اینگونه است.
از سال 98 به بعد مدل زبان شیگرا به بازار عرضه شد که این اولویت در داشتن دادههایی نسبت به عملیات مورد نیاز در اولویت دادن به انجام آنها به صورتی که عملیات مورد نیاز بر روی آنها در درون هر شیای گنجانده شود، انجام میشود. ورژنهای جدید زبان C++ از انواع شیگرای چند کاربردی بوده که انواع تابعی را در خود دارد.
نکته: استاندارد CCIT معیار embedded بودن را در کاربرد یک زبان به دلیل قابلیت اطمینان انتخاب میکند.
مبحث معماری ماشین:
میدانید که کامپیوترها مجموعهای مجتمع از الگوریتمهای ساختیافتهاند که قادر به ذخیرهسازی و اجرای برنامهها هستند. استاندارد CCITT مولفههای عمده ی یک کامپیوتر را در ساخت و Process اطلاعات اینگونه بیان میکند که:
1- دارای کنترل ترتیب باشد
2- مدیریت حافظه داشته باشد
3- محیطهای عملیاتی جانبی داشته باشد
4- اعمال اولیه بر روی فایل ها انجام پذیر باشد
5- امکان دسترسی به مکانیزم های داده ها موجود باشد
6- ساختمان داده های کامپیوتر طوری باشد که قرار گرفتن در آن به راحتی انجام شود
Firmwareها (میان ابزارها):
هرگاه توصیفی از یک زبان برنامهسازی داشته باشیم، میتوانیم کامپیوتری را ایجاد کنیم که سختافزار که زبان ماشین آن دل بخواه باشد. زبان ماشین مجموعهای مختصر و جامع از دستورات است که غالباً Low Level بوده و با آن میتوان دستورات سطح بالا را به روش برنامهسازی Macro Programming انجام داد. معنی این جمله این است که برای هر دستور سطح بالا یک سری دستورات ریزتر که به دستورات سطح پایین منتهی میشود، وجود دارد. به این مدل کامپیوتر میانابزار میگویند.
روش های اجرای برنامه ها:
استاندارد DIN با شماره 20010 این روش ها را از سه دسته زیر بر می شمارد:
1- با استفاده از تفسیر
2- با استفاده از ترکیب
3- با استفاده از ترجمه
1- تفسیر:
در این روش که در زبانهایی مثل Pein ، Prolog ، Html و Basic اجرا میشود، هر خط از دستورات زبان برنامهی تفسیر شده، به صورت Real Time اجرا می شود.
2- ترکیب:
این روش که ترکیبی از ترجمه و تفسیر است، یک ترجمهی مختصر بر روی برنامهی مبدأ انجام شده به کدهای میانی تبدیل شده و با سرعت بیشتری در تفسیر اجرا میشود.
مزایا و معایب تفسیر و ترجمه:
در ترجمه Lose شدن اطلاعات در لحظه Run برنامه و Flexibility پایین نسبت به تفسیر است.
اما در روش تفسیر دفعات مورد نیاز جهت اجرای دستورات به تفصیل صورت میگیرد و برای مثال دفعات چرخش یک برنامه 1000 بار بوده و دستورات داخل آن 1000 بار تفسیر شده و هزار بار Run میشود.
حال در تفسیر تمام شاخههای اجرایی برنامه ، برنامه از لحاظ وجود خطا بررسی نمیشود و لذا میانکد آن زیادتر بوده در ضمن حجم برنامههای اجرایی تفسیری کمتر است و سرعت اجرای تفسیری کندتر است.
3- ترجمه
در روش ترجمهای، ابزارهایی که مورد نیاز است به مواردی که در زیر گفته می شود، دسته بندی می شود. استاندارد ANSI هر کدام از اینها را به صورت translator قبول دارد و وجود آنها را در هنگام Run شدن یک برنامه میپذیرد. این ابزارها به قرار زیر هستند:
1- Linkerها (متصل کننده ها)
2- Loaderها (بار کننده ها)
3- پیش پردازنده ها
4- کامپایلرها
5- اسمبلرها
نکته: استاندارد ANSI در سال 92 روشهای ساخت کامپیوتر (کامپیوتر مجازی) به قرار زیر دانسته است:
1- کاملاً سختافزاری
2- کاملاً شبیهسازی شده
3- کاملاً ترکیبی
4- کاملاً میانافزاری
حال میرسیم به واژه تمایز بین دادهها که این عمل را در استفاده از یک کامپیوتر همیشه نمیتوان انجام داد. به عنوان مثال کامپایلری که تولید کنندهی یک خروجی است، از دید سازندهی آن نمیتواند یک نرمافزار محسوب شود. این بسته به واژه Binding (قید) است.
اختصاص یک ویژگی به مولفههای یک برنامه یک قید محسوب شده و استاندارد IEEE این قیدها را به انواع زمان تعریف زبان ، زمان پیادهسازی زبان ، زمان اجرای زبان و زبان ترجمهی زبان تقسیم میکند.
- زمان تعریف زبان: که نحوهی دستورات زبان را از نوع Type مشخص میکند.
- زمان پیادهسازی زبان: که نحوهی نمایش اعداد در حافظه یا چگونگی عملکرد، عملگرها به صورت واقعی بررسی میکند.
- زمان ترجمهی زبان: این زمان توسط برنامهنویس، مترجم و بارکنندهی سیستم در استاندارد ANSI تعریف میشود که در هنگام زمان اجرای زبان میتواند در ورود به یک بلاک خاص دارای پارامترهای ویژه بوده و یا در هرجای دلخواهی از برنامه اختصاص یابد.
این استاندارد تفاوت میان زمان و قید را در زبانهای مختلف زیاد دانسته و در ضمن، در هنگام پیادهسازی زبان، زبانهای قیدی که هر مولفه در زمان خود تعریف میشود، عمل کرده و زمان تعریف تنها زودترین زمان را برای قید شدن مشخص میکند.
نکته: در زمان تعریف زبان ، زمان قید شده مقدار اولیهی متغیر را به زمان مشخص میکند.
انواع داده ها:
شیدادهها (Data Object) مانند ظرفی میباشند که اطلاعات در آن ذخیره میشود. هر شیداده دارای صفاتی است که در استاندارد ANSI به صورت ترکیبی با انواع اجزاء ، مقدار ، نام ، مکان ، نوع مشخص میشود. دارای ثابتهایی میباشد که مقدار قید آنها در طول اجرای برنامه هیچ تغییری نمیکند. طبق نظر استاندارد و ثابت لفظی و سمبلیک در لحظه ی اجرا وجود دارد که با استفاده از مقدار متغیر در طول اجرای برنامه تغییر کند.
ماندگاری:
به آن از بین نرفتن قید مکان و مقدار بعد از اتمام برنامه میگویند که در مجموعهی Data Type نوع داده میتوان در کلاسی از اشیاء دادهای به همراه عملگرهای آنها در هر زبان تعریف کرد که نوع دادههایی که توسط زبان پشتیبانی میشود، به نام دادههای اصلی شناخته میشود و هر نوع دادهای که دارای مقدار منفرد باشد، نوع ساده و اگر دادهای دارای مقدار مرکب باشد ، به آن اجزای مرکب می گویند.
ویژگی های انواع داده ها:
مشخصات (صفات ، مقادیر ، عملیات)
پیادهسازی: نمایش حافظه و پیادهسازی عملیات است.
صفات: ویژگیهای یک نوع داده را که در طول حیات اشیا از آن به قید نام برده میشود، داده شود.
مقادیر: در هر شیداده ساخته شده از یک نوع داده و مقادیر خاص قابل ذخیرهسازی میباشد.
عملیات: عملگرها باید به صورتی کار کنند که عمل آنها بر روی اشیای دادهها به طور دقیق تعریف شود تا بتواند به استفاده از امضا یا نمونهی اولیه، نوع ووردی و خروجیها را بر روی اعداد صحیح مشخص کند.
امتحان: عملیات قابل اجرا بر روی انواع دادهها با چه مشکلاتی همراه است؟
1- عدم تعریف آن عملگر بر روی ورودیهای خاص مانند تقسیم بر عدد صفر برای اعداد صحیح
2- استفاده از متغیرهای سراسری در تعیین عملکرد یک تابع و نشانورزیهای منحنی در انجام عمل تابع
3- اثرات جانبی مانند تأثیر یک تابع بر روی یک متغیر سراسری ، به آن تابع ضمنی میگویند.
4- حساسیت سابقه یا تاریخ ، تأثیر دفعات فراخوانی در نتیجه یک تابع مانند تابع تولید اعداد تصادفی که با تغییر کد در هنگام اجرا در انواع LISP امکانپذیر است.
زیرنوعها (Sub range)ها : در استاندارد ANSI اگر نوع دادههای ما از نوع چندپخشی از انواع بزرگتر باشند آن را از زیرگروه Super Type نمایش میدهند. مثلاً اعداد صحیح در زبان پاسکال از این نوع هستند.
نمایش حافظه ها :
میدانیم که معمولاً حافظه در انواع دادههای اصلی توسط سختافزار مدیریت میشوند و حافظه مربوط به نوع دادهها از انواع مرکب توسط نرمافزار مدیریت میشود.
در برخی از زبانها، صفات شیای ما در محل جداگانهای در حافظه در مکان شی مورد نظر نگه داری میشود که به آن توصیفگر میگویند. این کار معمولاً به خاطر افزایش انعطاف پذذیری سیستم انجام شده و یا صفات آن شی از دادهها در کنار آن ذخیره نمیشود. حال اگر در یک حافظهی شیگرا، کارآیی و سرعت اجرا بالا رود، زبانهای مفسر ما معمولاً از انواع مدلهای کامپایلری تبعیت مینمایند، لذا استفاده از انواع حافظه ROM از کنار مفسرهای چندمنظوره در سیستمهایی که دارای انواع Cash موازی در Processorهای خود میباشد ، حافظهی جانبی RAM میتواند انواع مفسر یا کامپایلر را طوری مدیریت کند که حداقل پس از باز شدن برنامه با استفاده از مسیر مجازی دیسک سخت تا دو برابر مقدار RAM اطلاعات سرریز نکند.
پیاده سازی اعمال کاری:
در استاندارد ANSI پیادهسازی عملیات های ما بر روی اشیای داده ای به سه طریق انجام می شود:
1- از نوع سخت افزاری مانند جمع و ضرب بر روی داده ها
2- توابع و زیربرنامه های نرم افزاری که توسط نگهداری در بانک اطلاعاتی فراهم می شود. عملیات جذر بر روی اعداد صحیح از این دسته اند.
3- دنبال کردن کدهای درون خطی (دنبال محل کپی گشتن) مثل عملکردن عدد قدر مطلق شده در نرم افزار پاسکال.
دستورات اعلانی:
دستوراتی که برنامهها که از نوع شیداده ای میباشند در اختیار مترجم قرار میدهد، اعلانی میباشد. دو نوع اعلان وجود دارد: یکی اعلانهای ضمنی مثل Fortran و دیگری اعلان های صریح مثل C .
اعلان ها دارای اهدافی میباشند که در استاندارد ANSI به قرار زیراند:
1- بررسی سیستمهای استاتیکی ایستا
2- انتخاب بهترین نمایش حافظه
3- مدیریت حافظه
4- اعمال چندریختی Poly Morphition
بررسی انواع نوعها (Type Checking):
استاندارد ANSI انواع دینامیکی و استاتیکی در انواع بررسی انجام میدهد که هر یک دارای نقاط ضعف و قوت میباشند.
نقاط ضعف نوع پویا Dynamic :
1- کاهش سرعت اجرای برنامه
2- مصرف حافظهی اضافی
3- مشکل شدن اشکالزدایی برنامهها
نکته: در برخی از ساختارها امکان بررسی نوع ایستا وجود ندارد که در این موارد ما به بررسی نوع پویا و یا به عدم انجام بررسی میپردازیم.
زبان قوی:
اگر در یک زبان امکان انجام کلیه Processها به صورت ایستا وجود داشته باشد، آن زبان ، زبان قوی است.
بررسی زبان از شاخه امنیتی:
اگر در یک برنامه اجرایی تابع f نتواند مقداری خارج از مقدار R را تولید کند و عملگر آن دارای دامنه اعداد صحیح باشد، عمل بر روی اعداد صحیح ایمن نیست از این رو اگر همهی عملگرهای یک زبان از نظر برسی ایمن باشند، از نظر بررسی قوی نیستند.
عناونین مقداردهی و انتصابات:
انواع دادههای عددی در استاندارد ANSI به چهار دسته تقسیم می شوند:
Fix Point ، Floating Point ، Under Point ، Point (ممیزی ثابت ، اعشاری ، زیربار ، صحیح)
استاندارد ANSI استفاده از اعداد اعشاری ممیز دارد و همهی محاسبات را انجام پذیر نمیداند. حال اگر به اعداد مختلط و اعداد کسری نیز در گروه دادهها نگاه کنیم، دادههای ما به انواع دادههای منطقی و دادههای کاراکتری تقسیم میشود.
استاندارد DIN انواع داده های مرکب را در سه نوع تقسیم کرده است:
1- داده های اعلان شده با طول ثابت
2- داده های طول متغیر و دارای حداکثر طول از نوع اعلان شده.
3- خود داده های متغیر
دادهها در استاندارد ANSI به انواع اشارهگر نیز میپردازد که نوع اشارهگر باید در زبانهای برنامهساز دارای سه توانایی باشند:
1- وجود نوع دادهها از نوع اشارهگر
2- امکان ایجاد حافظه از نوع پویا در برنامهساز
3- امکان دسترسی غیرمستقیم به دادهها در صورت نیاز
میدانیم که پیادهسازی اشارهگرها به دو روش انجام می شود: یکی آدرسی دهی مطلق و دیگری آدرسی دهی نسبی.
آدرسی دهی مطلق:
اشاره به دور در زبان C که دارای امکان ماندگاری و سرعت اجرای بیشتر است
آدرسی دهی نسبی:
اشاره به نزدیک در زبان C که آزاد سازی بلوکهای حافظه را در مدیریت حافظه به دنبال دارد.
استاندارد IEEE مشکلات استفاده از اشارهگرها به ایجاد زباله و استفاده از مرجع مطلق در دسترسی به فایلها را مشکلات آن میداند.
در استاندارد ANSI انواع فایلها از نوع محتوا، نحوهی دسترسی و نحوهی عملیات به دستههایی تقسیم میشوند که به قرار زیر است:
محتوا از نوع متنی و دودویی ، دسترسی از نوع مستقیم و ترتیبی و Operation از نوع خواندنی و نوشتنی تقسیم میشود
Capsulation (فرم دسته بندی کپسولها):
مکانیزمهای پایهای برای برنامهنویسها در چند روش میتوان در ایجاد دادههای جدید و عملیات بر روی آنها انجام داد. استاندارد IEEE و استاندارد CCITT ، 4 روش را بیان کردهاند که:
1- زیربرنامهها
2- وراثت
3- انواع دادههای ساختیافته چندوجهی
4- انواع اعلانهای برنامهای میباشد
بررسی داده های ساخت یافته:
در استاندارد DIN انواع پیچیدهای از اشیا و دادهها را با مولفههای ایجاد شده به همراه عملگر برای دستیابی آن اشیا اختصاص داده است که استاندارد DIN صفتهای یک ساختمان دادهای را اینگونه دانسته است:
1- تعداد مولفه ها (ثابت یا متغیر)
2- همگن یا ناهمگن بودن مولفه ها
3- آرایه ها و مجموعه ی مولفه ها و بیان آنها با اندیس
4- حداکثر تعداد مولفه ها به صورت ثابت یا نامحدود
5- سازماندهی مولفه ها از نوع خطی یا غیرخطی
استاندارد DIN همچنین اعمال قابل اجرا بر روی ساختمان داده را در چهار عنوان بیان کرده است:
1- اعمالی که بر روی کل ساختمان دادهای انجام میشود
2- اعملای که بر روی مولفهها و حذف و اضافه آنها انجام میشود
3- انتخاب درست مولفه
4- ساختن و Distroy کردن (نابود کردن) ساختمان دادهها
حداکثر طول برای ساختمان دادهها با تعداد عناصر مشخص میشود. دو نوع دسترسی به عناصر ساختمان داده داریم که یکی ترتیبی و دیگری تصادفی است ، در ضمن حذف و اضافه مولفهها تأثیر زیادی در نمایش حافظه و مدیریت حافظه دارند.
نقش حافظه در ساختمان داده ها :
استاندارد DIN نوع ترتیبی و پیوندی را که به دسترسی مستقیم و دسترسی ترتیبی نیز (نوع نمایش ترتیبی و پیوندی آسیای شرقی) به آن میگویند.
در نوع اول (ترتیبی) مولفهها به دنبال هم در یک فضای پیوسته از حافظه قرار دارند و در نوع پیوندی بین هر مولفه یک Link وجود دارد که با این پیوند به هم وصل میشوند.
طبق نظر استاندارد ANSI در بررسی ساختمان دادهها به صورت کاربردی دو اشکال عمده وجود دارد که این مشکلات بررسی را دشوار میکند:
1- وجود مولفههای انتخاب شده
2- نوع مولفهها
بررسی آرایه های یک بعدی:
میدانید که صفات در قمست توصیف برنامه ذخیره میشوند و شامل تعدادی از بایتهای هر مولفه به صورت حد بالایی و حد پایینی میشوند و هنگام شروع با آدرس عناصر است. در آرایهها پیادهسازی شده ما با مشکل حافظه موقتی مورد نیاز جهت عملیاتهای محاسباتی مواجه میشویم که a=b*c+a که حافظه مورد نیاز در این قسمت g1-L1+1*m1 است که مورد آرایههای چندبعدی باید گفت که در استاندارد DIN دو نحوه نمایش در حافظه وجود دارد که یکی سطری و دیگری ستونی است. حافظه مورد نیاز n بعدی به قرار زیر است:
)U1-L1+1)*(U2-L2+1)*…*(Un-Ln+1)*E=(Un-Ln+1)*m1
نکته: روشهای مدیریت حافظه در زبانهای برنامهسازی یکی از مهمترین بخشهای تخصیص یافته در آدرسدهی چندگانه است. IEEE با استفاده از یک مدیریت حافظه در یک محیط چندبرنامهای به طور همزمان از حافظت حافظه از طریق جداسازی فضاهایی متمایز آدرس و اشتراکگذاری حافظه، جهت اجازه دادن به