زبان برنامهنویسی سطح بالا From Wikipedia, the free encyclopedia
پاسکال یکی از زبانهای مشهور برنامهنویسی سطح بالای متداول است. پاسکال به عنوان زبان سادهشده الگول طراحی شد و کاربردهای آموزشی داشت. این زبان را نیکلاوس ویرت، استاد دانشگاه پلیتکنیک زوریخ سوییس در سالهای ۱۹۶۸ و ۱۹۶۹ میلادی طراحی کرد و در سال ۱۹۷۰ به عنوان یک زبان کارآمد و کوچک به منظور پیشبرد و توسعهٔ مهارتهای برنامهنویسی با بهرهگیری از برنامهنویسی ساختیافته و ساختمان دادهها، منتشر گردید. نام زبان پاسکال از نام بلز پاسکال، ریاضیدان فرانسوی بر گرفته شدهاست.
پاسکال یک زبان برنامهنویسی امری و ساختیافتهٔ تأثیرگذار است که از ویژگیهایش میتوان به سادگی فراگیری آن اشاره کرد.
استاندارد این زبان برنامهنویسی در سال ۱۹۸۳ نوشته شده و دو سازمان آی تریپل ای و انسی آن را تأیید کردهاند. هماکنون این زبان بیشتر بهعنوان زبان برنامهنویسی آموزشی برای تازهکاران در دانشگاهها آموزش داده میشود. سادگی و تجرید خوب این زبان امکان برنامهنویسی آسان بدون نیاز به آگاهی از ساختارهای پیچیدهٔ زیرین سیستمعامل را میدهد.
پارادایم برنامهنویسی | |
---|---|
طراحی شده توسط | نیکلاوس ویرت |
ظهوریافته در | ۱۹۷۰ |
| |
.pp , .pas , .inc , | |
پیادهسازیهای بزرگ | |
| |
گویش | |
| |
متأثر از | |
الگول دبلیو | |
تأثیر گذاشته بر | |
|
یک ویرایش برگرفته از پاسکال که با عنوان شی پاسکال شناخته میشود، برای برنامهنویسی شیءگرا طراحی شد.[1][2]
نیکلاوس ورث پیش از پاسکال و برای فراهمآوری مقدمات آن، زبان Euler و سپس Algol-W را گسترش داد و سپس زبانهای Modula-2 و Obern که همانند پاسکال بودند را ساخت. در زمان اختراع پاسکال، زبانهای برنامهنویسی بسیار زیادی وجود داشت ولی تنها شماری از آنها بسیار استفاده میشدند که عبارت بودند از فرترن, Assembler و کوبول. ایدهٔ اصلی زبان جدید نظم، مدیریت دادهها و نیاز به تعریف دادهها بود. این زبان از آغاز به گونهای طراحی شده بود که زبانی آموزشی باشد.
در آغاز پاسکال بسیار وسیع و جامع بود، اما تنها به منظور یاد دادن برنامهنویسی ساختیافته به دانشجویان نبود. نسلهای پیاپی از دانشجویان بر روی پاسکال به عنوان یک زبان آغازین در دورههای کارشناسی کار کردند. همچنین نسخههای گوناگونی از پاسکال پیدرپی برای هر کاری از پروژههای تحقیقاتی گرفته تا بازیهای رایانهای و سیستمهای جاسازیشدهاستفاده شد. هماکنون کامپایلرهای تازهتر پاسکال موجود هستند که بهطور گسترده استفاده میشوند.
پاسکال نخستین زبان سطح بالا بود که برای توسعه و تکامل در Apple Lisa استفاده شد و در سالهای نخستین Mac، بخشهایی از سیستم عامل اصلی مکینتاش، از منابع پاسکال توسط دست به زبان اسمبلی 68000 Motorola برگردان شد. حروفچینی محبوب سیستم TeX توسط Donald E.Knuth در WEB (سیستم برنامهنویسی آموزش دیده اصلی) نوشته شد، که بر پایهٔ DEC PDP-10 Pascal است، آن هم در هنگامی که یک برنامه کاربردی مانند Total Commander در Delphi (پاسکال شی گرا) نوشته شد.
پاسکال نیز مانند بسیاری از زبانهای برنامهنویسی دیگر دارای کامپایلرهای زیادی است که از معروفترین آنها میتوان به کامپایلر توربو پاسکال (Turbo Pascal) که متعلق به شرکت بورلند (Borland) است، اشاره کرد. شرکت بورلند از پاسکال شیءگرا بهعنوان زبان برنامهنویسی محیط توسعهٔ نرمافزار خود به نام دلفی بهره گرفتهاست.
توربو پاسکال در سال ۱۹۸۳ معرفی شد و همیشه در بین زبانهای برنامهنویسی از فروش بسیار بالایی برخوردار بود.
توربو پاسکال مفهوم تازهای به نام Integrated Development Environment یا (IDE) به معنای «محیط برنامهنویسی مجتمع» را معرفی کرد. در محیط IDE شما میتوانید کد را ویرایش کنید (در یک ویرایشگر هماهنگ با wordstar)، کامپایلر را آغاز کنید، خطاها را ببینید و به خطهایی که حاوی آن خطاهاست بروید، البته این مسئله هماکنون بسیار بیمعنی به نظر میآید، اما در گذشته لازم بود که شما از ویرایشگر بیرون بروید و به DOS برگردید و سپس کامپایلر را به صورت خط فرمانی آغاز کنید، سپس شماره خطاهای خط را یادداشت کنید، دوباره ویرایشگر را باز کنید و به خطهای حاوی خطا بروید و دوباره همه چیز را از اول انجام دهید.
به علاوه بورلند توربو پاسکال خود را فقط ۴۹دلار میفروخت، در حالیکه مایکروسافت کامپایلر پاسکال خود را چند صد دلار به فروش میرساند، تداوم موفقیت چند ساله توربو پاسکال سبب شد که درآمدهای مایکروسافت از فروش کامپایلر پاسکال بسیار کاهش یابد.
بعد از ۹ نسخه از انتشار توربو پاسکال و بورلند پاسکال، که به تدریج زبانهای بسیار گستردهای شده بودند، بورلند در سال ۱۹۹۵ دلفی را معرفی نمود که پاسکال را به یک محیط برنامهنویسی دیداری (VISUAL) تبدیل میکرد. زبان شیءگرایی پاسکال که ما در دلفی از آن سود میجوییم در سال ۱۹۹۵ همراه با محیط برنامهنویسی دیداری (VISUAL) دلفی اختراع نشد. این زبان توسعهیافتهٔ زبان پاسکال شیءگرا بود که پیشتر در محصول بورلند پاسکال از آن استفاده شده بود، اما بورلند پاسکال آن را را اختراع نکرد بلکه تنها به گسترش و عمومی شدن آن کمک نمود.
قصد ورث، خلق یک زبان کار آمد بود (در هر دو مورد سرعت کامپایل و کد ساخته شده) که بر پایه به اصطلاح برنامهنویسی ساخت یافته (مفهومی که به تازگی محبوب شدهاست) باشد. اصول و ریشههای پاسکال برپایه زبان الگول ۶۰ پی ریزی شد، اما علاوه بر آن مفاهیم و مکانیزمهایی را مافوق اعداد و آرایههای الگول معرفی کرد که برنامه نویسان را قادر به تعریف انواع داده (ساختمان) پیچیده خودشان میکرد و همچنین ساخت ساختمان دادههای بازگشتی و پویا مانند لیستها، درختها و گرافها را آسانتر مینمود.
امکانات مهم که برای این امور اضافه شده بود، رکوردها، شمارشها، زیر حوزهها، متغیرهای اختصاص داده شده پویا همراه اشاره گرهای وابسته و مجموعهها میباشد. برای تحقق و معنی دار کردن این امر، پاسکال یک سیستم تایپ دهی قوی روی تمام اشیا دارد، به این معنی که یک نوع داده نمیتواند بدون تبدیل صریح، به عنوان نوع دیگر تفسیر یا تبدیل شود. امروزه در بسیاری از زبانهای برنامهنویسی مکانیزمهای مشابهی به صورت استاندارد میباشند. زبانهای دیگر که از توسعه پاسکال تأثیر گرفتند، کوبول، سیمولا ۶۷ و Algol W خود آقای Wirth میباشند.
پاسکال مانند بسیاری از زبانهای اسکریپتی امروزه (اما برخلاف زبانهای خانواده C) به تعریف پروسههای تودرتو تا هر عمقی و همچنین اکثر انواع تعریفها و اعلانها درون پروسهها و توابع اجازه میدهد. این امر یک نحو خیلی ساده و منسجم را امکانپذیر میسازد که یک برنامه کامل از نظر نحوی، خیلی نزدیک به یک تابع یا پروسه تنهاست (البته به استثنای خود کلمه کلیدی).
اولین کامپایلر پاسکال برای سری CDC 6000 خانواده کامپیوترهای پردازنده مرکزی در زوریخ طراحی شد. آقای Wirth گزارش میدهد که اولین کوشش برای پیادهسازی آن در فرترن در سال ۱۹۶۹ با توجه به نارسایی فرترن برای بیان ساختمان دادههای پیچیده، ناموفق بود. دومین تلاشها برای خود زبان پاسکال تنظیم و فرموله شد و در اواسط سال ۱۹۷۰ قابل استفاده شد. پس از آن بسیاری از کامپایلرهای پاسکال بهطور مشابه، خود میزبان بودند، به این معنا که خود کامپایلر در پاسکال نوشته شدهاست و کامپایلر هنگامی که امکانات جدید به زبان اضافه میشود یا به محیطی جدید منتقل میشود، معمولاً قادر به دوباره کامپایل کردن خود میباشد. کامپایلر GNU Pascal یک استثنای قابل توجه در این مورد میباشد که در C نوشته شدهاست.
اولین انتقال موفق کامپایلر CDC Pascal به یک کامپیوتر پردازنده مرکزی دیگر، توسط Welsh و Quinn در دانشگاه Queen در شهر Balfast در سال ۱۹۷۲ انجام گرفت. کامپیوتر هدف یک ICL 1900 بود.
اولین کامپایلر پاسکال که در آمریکای شمالی نوشته شد، در دانشگاه Illinois زیر نظر Donald B.Gillies برای PDP-11 و کد ماشین تولید شده محلی، ساخته شد. پاسکال در سراسر سالهای ۱۹۷۰ و ۱۹۸۰ از محبوبیتی بزرگ برخوردار بود.
به منظور انتشار سریع زبان، یک کامپایلر (porting kit) در زوریخ ساخته شد که شامل یک کامپایلر بود که برای یک ماشین پشته مجازی کد تولید میکرد (یعنی کدی که خودش را به یک تفسیر کارآمد معقول از خودش ارجاع میداد) به همراه یک مفسر برای این کد Pascal-P system. اگر چه کد SC (کامپیوتر استک) در ابتدا به قصد کامپایل به کد ماشین صحیح بود، حداقل یک سیستم (سیستم پادهسازی جالب توجه UCSD) از آن برای خلق مفسر UCSD P-system استفاده کرد. کامپایلرهای سیستم P، با P1 تا P4 نامیده میشوند. P1 به عنوان اولین نسخه و P4 به عنوان آخرین نسخه انتشار یافته از زوریخ.
کامپایلر/ مفسرP4 هنوز بر روی سیستمهای سازگار با پاسکال اصلی قابل اجرا و کامپایل است. با این حال خودش فقط یک زیرمجموعه از زبان پاسکال را قبول میکند. یک نسخه از P4 که زبان پاسکال کامل را قبول میکند و سازگار با ISO 7185 است، نیز ساخته شد و به نام کامپایلر P5 نامگذاری شد که به صورت منبع در دسترس و مهیاست. یک نسخه جایگزین از آن که به عنوان مدل پیادهسازی پاسکال شناخته میشود نیز پاسکال کامل را قبول میکند و با ISO 7185 سازگار است، اما در کامپیوترهای خواندنی فراهم نمیباشد.
یک نسخه از کامپایلرهای P4 که اعداد باینری محلی را خلق کرد، برای کامپیوتر پردازنده مرکزی IBM System 370 توسط کمیسیون انرژی اتمی استرالیا ارائه شد. این کامپایلر AAECPascal Compiler نامیده شد پس از حروف اختصاری نام کمیسیون. یک نسخه از P4 از ۶–۱۹۷۵ شامل منابع و اعداد باینری لازم برای کامپایلر و فایلهای کتابخانهای زمان اجرا، برای پردازنده مرکزی PDP-10 ممکن است از این پیوند قابل دریافت باشد.
در اوایل 1980 WatcomPascal نیز برای IBM System 370 توسعه داده شد.
IP Pascal یک پیادهسازی از زبان برنامهنویسی پاسکال بود که از Micropolis Dos استفاده میکرد، اما به سرعت به CP/M که بر روی Z80 اجرا میشد، حرکت کرد. بعدها نیز به انواع ماشینهای ۸۰۳۸۶ در سال ۱۹۹۴ حرکت کرد و امروزه به صورت پیادهسازی شده در Linux و Windows/XP وجود دارد. در سال ۲۰۰۸ سیستم به یک سطح جدید ارتقا یافت و زبان حاصله به عنوان Pascaline (بعد از Pascal’s Calculator) نامیده شد. آن زبان، شامل اشیا، کنترلهای فضای نام، آرایههای پویا، به همراه بسیاری الحاقات دیگر، و امکانات عمومی دارای کارکرد مشابه، و حفاظت نوع داده همانند C# میباشد. این تنها پیادهسازی است که با پیادهسازی پاسکال اصلی سازگارمی باشد (که در ISO 7185 استاندارد شدهاست).
در اوایل ۱۹۸۰ به منظور مهیا کردن یک جایگزین ساخت یافته برای مفسرهای پایه که با ماشینها آمدند، UCSD Pascal به کامپیوترهای Apple II,Apple III انتقال یافت.
کامپیوتر Apple, Lisa Pascal خودش را برای محیط کار Lisa در سال ۱۹۸۲ خلق کرد و این کامپایلر را به Apple Macintosh و MPW در سال ۱۹۸۵ منتقل کرد. در سال 1985 Larry Tesler در مشاوره با Niklaus Wirth پاسکال شی گرا را تعریف کردو این امکانات در هر دوی Lisa Pascal و Mac Pascal جای داده شدند.
در سالهای ۱۹۸۰، Anders Hejlsberg کامپایلر Blue Label را برای Nascom-2 نوشت. یک پیادهسازی مجدد از این کامپایلر برای IBM PC تحت نامهای Compas Pascal و PolyPascal قبل از اینکه توسط Borland شناسایی شود، در معرض فروش قرار داده شد. نامگذاری مجدد به Turbo Pascal موجب افزایش محبوبیت و قدردانی شد. قدردانی در یک قسمت به خاطر یک راهبرد قیمتگذاری جسورانه و پر پشتکار و در یک قسمت به خاطر داشتن یکی از نخستین محیطهای توسعه یکپارچه تمام صفحه. علاوه بر اینها، Turbo در زبان اسمبلی نوشته شد و تماماً به نحو احسن بهینه شد که سبب شد در رقابت بسیار کوچکتر و سریعتر شود. در سال ۱۹۸۶، Anders، توربو پاسکال را به Macintosh منتقل کرد و الحاقات پاسکال شی گرای Apple را با Turbo درآمیخت. این الحاقات سپس مجدداً به توربو پاسکال نسخه PC شماره ۵٫۵ اضافه شدند.
کامپایلر ارزان بورلند یک تأثیر شگرف بر جامعه پاسکال گذاشت که سبب تمرکز ویژه بر روی کامپیوترهای شخصی IBM در اواخر سالهای ۱۹۸۰ شد. بسیاری از علاقهمندان به کامپیوترهای شخصی که در جستجوی یک جایگزین ساخت یافته برای BASIC بودند، شروع به استفاده از این محصول کردند. همچنین این محصول توسط استفادهکنندگان حرفهای نیز کمکم مورد پذیرش قرار گرفت. درهمین حین، تعدادی مفاهیم از C، به منظور اجازه دادن به برنامه نویسان پاسکال برای استفاده مستقیم از APIهای Microsoft Windows که بر پایه C بودند، وارد پاسکال شدند. این الحاقات مشتمل بر رشتههای بدون پایان، اشاره گرهای عددی و حسابی، اشاره گرهای توابع، آدرس عملگرها و انواع دادهای ناامن میباشند.
با این حال، بورلند بعداً تصمیم گرفت که امکانات شی گرایی با دقت بیشتر و جزئیات دقیقتر میخواهد و آن را با استفاده از پیش نویسهای استاندارد پاسکال شی گرا که توسط Apple به عنوان اساس و پایه پیشنهاد شده بود، مجدداً در Delphi پیاده کرد (این پیشنویس Apple هنوز یک استاندارد رسمی نمیباشد). بنابراین اولین نسخههای زبان برنامهنویسی Delphi، پاسکال شی گرا (Object Pascal) نامیده شدند. الحاقات اصلی در مقایسه با پاسکال شی گرای قدیمیتر، مدل شی گرای مبتنی بر مرجع، سازندهها و مخربهای مجازی و جزئیات بودند. کامپایلرهای متعدد دیگر نیز این شیوه را اجرا و پیادهسازی کردند.
توربو پاسکال و دیگر مشتقات به همراه واحدها یا مفاهیم پیمانهای، هم از زبانهای پیمانهای هستند. با این حال، مفهوم پیمانه تودرتو یا ورود و خروج صحیح نمادهای ویژه را مهیا نمیکنند.
Super Pascal یک نوع دیگر بود که برچسبهای بدون عدد را اضافه کردکه یک دستور یا عبارت بازگشت به عنوان نامهایی از نوعها میباشد.
دانشگاههای زوریخ، Karlsruhe و Wuppertal، یک قابلیت را برای محاسبات علمی توسعه دادند (XSC Pascal) که یک راه حل مفید را برای برنامهریزی محاسبات عددی با دقت کنترل شده، مهیا میکند.
در سال ۲۰۰۵ در کنفرانس WEB 2.0، Marfic Technology ابزاری معرفی کرد که توسعه کاربردهای WEBکه تماماً در Marfic Pascal نوشته شده بود را مهیا میکرد. Marfic Pascal یک گونه از پاسکال شی گرا است که بسیار نزدیک به Delphi میباشد.
پاسکال در شکل اصلی خودش بهطور خالص یک زبان رویهای است و دارای آرایش سنتی الگول است که شبیه ساختارهای کنترل به همراه کلمات رزرو شده همچون if,then,else,while,for و … میباشد. با این حال پاسکال بسیاری امکانات ساخت یافته دادهای و انتزاعی را داراست که در الگول ۶۰ اصلی موجود نبودند. مانند تعاریف نوعها، رکوردها، اشاره گرها، شمارشها و مجموعهها. یک همچنین ساختارهایی تا یک اندازه از Simula 67 ،Algol 68، Algol W خود آقای Wirth و پیشنهادها C.A.R. Hoare الهام گرفته شده یا به ارث برده شدند.
برنامههای پاسکال توسط کلمه کلیدی Program به همراه لیستی از فایلهای خارجی به عنوان پارامترها شروع میشوند. سپس بلوک عبارت اصلی که توسط کلمات کلیدی Begin و End بستهبندی شدهاست را دنبال میکنند. علامت semicolon (;) عبارات را از هم جدا میکند و نقطه آخر برنامه تمام برنامه را خاتمه میدهد. در پاسکال، بزرگ و کوچکی حروف مطرح نیست. بعضی کامپایلرها مثل توربو پاسکال در میان آنها کلمه کلیدی Program را اختیاری در نظر میگیرند.
[3]
در اینجا یک مثال از کد برای یک برنامه خیلی ساده آورده شدهاست.
Program HelloWorld(output);
begin
writeLn('Hello, World!')
end.
یک تایپ در پاسکال و در عموم زبانهای برنامهنویسی محبوب دیگر، یک متغیر را به گونهای در نظر میگیرد که درآن، حوزهای از مقادیر قابل قبول تعریف میشود که متغیر قادر به ذخیره آن میباشد و همچنین مجموعهای از عملگرها را لحاظ میکند که بر روی آن متغیر با آن نوع مجاز است. انواع دادهها و توضیحی مختصر در مورد آنها در زیر آورده شدهاست.
نوع داده حوزه قابل ذخیره توسط متغیر
integer تمام اعداد از۳۲۷۶۸- تا ۳۲۷۶۸
byte اعداد صحیح از۰ تا ۲۵۵
real 1E-38 تا 1E+۳۸ اعداد اعشاری از
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” حل شد.
در پاسکال Jensen و Wirth رشتهها به صورت آرایه بستهبندی شدهای از کاراکترها نمایش داده میشوند؛ بنابراین آنها دارای طول ثابت اند و معمولاً دارای فضای خالی میباشند. بعضی گونهها یک نوع رشته سفارشی دارند.
پاسکال استفاده از اشاره گرها را پشتیبانی میکند.
type
a = ^b;
b = record
a: Integer;
b: Char;
c: a
end;
var
pointertob: a;
در اینجا متغیر اشاره گر به b، یک اشاره گر به نوع داده b که یک رکورد است، میباشد. اشاره گرها قبل از اینکه اعلان شوند، میتوانند استفاده شوند. این یک اعلان رو به جلو است، یک استثنا برای این قانون که اشیا قبل از استفاده باید تعریف شوند. برای ساخت یک رکورد جدید و اختصاص دادن مقدار ۱۰ و کاراکتر 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، ثوابت، تایپها، متغیرها و دیگر پردازهها و توابع را داشته باشد که همگی باید در آن دسته قرار گیرند. این ملزومات ترتیبی، در اصل به قصد اجازه به کامپایل یک طرفه کارآمد بود. با این حال در بعضی نسخهها، ملزومات الزامی ترتیبی قسمت اعلانها، مورد نیاز نمیباشد.
کامپایلرها و مفسرهای گوناگون پاسکال برای استفاده عمومی همگان مهیا است:
یک لیست بلند بالا را در Pascaland میتوان پیدا کرد. این Site در فرانسه است، اما اساساً یک لیست به همراه URLهایی به کامپایلرها است، با این حال یک مانع کوچک برای کسانی که فرانسوی زبان نیستند وجود دارد. این پایگاه و پایگاههای مرکز پاسکال، سایت مرکزی اطلاعاتی Mac Pascal و سایت advocacy، به همراه مجموعهای غنی از مقالات آرشیوی، به اضافه لینکهایی به بسیاری کامپایلرها و خودآموزها، نیز ممکن است جالب باشند.
در سال ۱۹۸۳، زبان در استاندارد بینالمللی ISO/ICE 7185 همانند استانداردهای ویژه کشورهای محلی، دارای استاندارد بود و در برگیرنده استاندارد آمریکایی ANSI/IEEE770X3.97-1983 و ISO7185:1993 بود. این دو استاندارد فقط در اینکه استاندارد ISO یک بسط “level 1” برای آرا یههای صریح داشت و ANSI اجازه امکان این توسعه را به برنامه اصلی (نسخه آقای Wirth) نمیداد، متفاوت بودند. در سال ۱۹۸۹ استاندارد ISO7185 برای تصحیح خطاهای متنوع و ابهاماتی که در سند اصلی موجود بود، بازنگری شد و منجر به ISO 7185:1990 شد.
در ۱۹۹۰ یک پاسکال استاندارد توسعه یافته به عنوان ISO/ICE 10206 ساخته شد. در سال ۱۹۹۳ استاندارد ANSI توسط خود سازمان ANSI، با “pointer” به استاندارد ISO 7185:1990 ارتقا یافت. در این استاندارد جدید، اتمام و انتهای وضعیت، بهطور محسوسی متفاوت میباشد.
قرار شد که ISO 7185 یک شرح روشنکننده و ابهام زدا برای زبان آقای Wirth در سال ۱۹۷۴ باشد، به همان صورتی که توسط دستورالعملهای راهنما و گزارش (Jenson & Wirth) شرح داده شدهاست. اما یک نکته قابل تأمل وجود دارد و آن اضافه نمودن پارامترهای آرایه همسان به عنوان level 1 برای این استاندارد و level 0 برای پاسکال بدون آرایههای همسان میباشد.
توجه کنید که خود Nikulas Wirth به زبان ۱۹۷۴ به عنوان استاندارد ارجاع داد، مثلاً برای تفاوت گذاشتن میان آن و امکانات مخصوص ماشین برای کامپایلر CDC6000. این زبان سال ۱۹۷۴ برای پاسکال حرفهای به صورت سند درآمد و قسمت دوم کتابچه راهنمای استفادهکنندگان پاسکال و گزارشهای مربوط به آن میباشد.
پاسکال بر روی ماشینهای بزرگ (پردازندههای مرکزی و کامپیوترهای کوچک) شروع به کار کرد، و استانداردها عموماً پیروی میشدند. اما بر روی کامپیوترهای شخصی 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، عمومیترین سیستم پاسکال بود که برای توسعه کاربردها بر روی سیستمهای ریزپردازندهای دارای منابع محدود در آن زمان مهیا بود.
پاسکال در جامعه رایانه واکنشهای متعددی را برانگیخت که هم به صورت موافق بودند و هم به صورت انتقادی.
اگرچه پاسکال بسیار محبوب است (هرچند در سالهای ۱۹۸۰ و اوایل ۱۹۹۰ خیلی بیشتر از حالا)، نسخههای ابتدایی پاسکال به علت نامناسب بودن به خاطر استفاده مشکل در کاربردی غیر از تدریس، بهطور گسترده مورد انتقاد قرار گرفتند.
Brian Kernighan که زبان برنامهنویسی C را محبوب کرد، در زودترین زمان ممکن در سال ۱۹۸۱، انتقادات قابل توجه خود را در مقاله خودش با عنوان «چرا پاسکال زبان برنامهنویسی محبوب من نیست»، مطرح کرد. از سوی دیگر بسیاری از عمده تلاشهای توسعه در سالهای ۱۹۸۰، همچون آنهایی که برای 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. این زبانها که بعضی از ایرادات و اشکالات پاسکال را دارا میباشند، به قصد رواج در میان استفادهکنندگان گوناگون و به اهدافی دیگر طراحی شده بودند، اما هیچیک نه تأثیری شگرف به وسعت پاسکال بر روی علم کامپیوتر و استفادهکنندگان آن گذاشتند و نه تاکنون در موفقیت تجاری مشابهی همانند موفقیت پاسکال دیده شدند.
تاکنون دهها زبان برنامهنویسی مختلف در جهان به وجود آمده و از بین رفتهاند که هر یک از آنها دارای مزایا و معایبی بودهاند، زبان پاسکال نیز همانند دیگر زبانهای برنامهنویسی دارای مزایا و معایبی است. مزایای زبان پاسکال از معایب آن بیشتر است و این امر باعث دوام چند دههای آن شدهاست.
از مهمترین مزایای پاسکال، قابل فهم بودن دستورها آن میباشد، چرا که دستورها پاسکال به زبان محاورهای نزدیک هستند. مزیت دیگر زبان پاسکال، داشتن توابع کتابخانهای است که باعث ایجاد سرعت و سهولت در برنامهنویسی میگردد. توابع کتابخانهای در حقیقت زیر برنامههایی هستند که از قبل نوشته شدهاند و شما میتوانید از آنها در برنامههایتان استفاده کنید. برای مثال اگر بخواهید قدرمطلق عددی را به دست آورید میتوانید از تابع مربوط که از قبل نوشته شدهاست، استفاده کنید. همچنین از دیگر مزیتهای زبان پاسکال پشتیبانی از انواع اطلاعات میباشد و این مزیتی است که باعت برتری زبان پاسکال نسبت به بسیاری از زبانهای برنامهنویسی میگردد. زبان پاسکال از اعداد صحیح، اعداد اعشاری، کاراکترها، مجموعهها، آرایهها و . . . پشتیبانی میکند. ساخت یافته (structure base) بودن زبان پاسکال نیز از مهمترین مزایای آن است. برنامه ساخت یافته به برنامهای گفته میشود که از بلوکهای پی در پی یا متداخل تشکیل شده باشد .
برنامهنویسی ساخت یافته دارای مزایای متفاوتی است:
آخرین مزیتی را که میتوان مورد اشاره قرار داد، داشتن محیط مجتمع برنامهنویسی است که بهطور خلاصه به آن IDE گفته میشود. مترجم پاسکال قابلیت ترجمه برنامهها را در دو حالت مجتمع و خط فرمان دارا میباشد. در حالت اول میتوان برنامه را درون ویراستار مخصوص پاسکال نوشته و اجرا کرد. این ویراستار دارای امکانات ویرایشی متعددی میباشد که موجب ایجاد سرعت و سهولت در نوشتن برنامه میگردد. در حالت دوم میتوان برنامه را با استفاده از هر ویراستاری تهیه نموده سپس عمل ترجمه را از طریق خط فرمان سیستمعامل ویندوز انجام داد. پس از ذکر مزایای زبان پاسکال بهتر است به معایب آن اشاره داشته باشیم. نداشتن قابلیت انعطاف، نداشتن قابلیت انتقال و عدم امکان تعریف رکورد با طول متغیر، از جمله معایب این زبان هستند.
یک برنامه به زبان پاسکال از قسمتهای مختلفی تشکیل میشود. کوچکترین واحدهای معنی دار در زبان پاسکال توکن (Token) نامیده میشود که عبارت اند از :
۱ - حروف: حروف الفبای بزرگ (از A تا Z) و حروف الفبای کوچک (a تا z)
۲ - ارقام مبنای ۱۰: ارقام ۰ تا ۹
۳ - ارقام مبنای ۱۶: ارقام ۰ تا ۹ و حروف A تا F یا a تا f
۴ - کاراکترهای تکی: +، /، *، = و . . .
۵ - جفت کاراکترها: مانند <>، =>، =<، = و . . .
۶ - شناسه (Identifier): از شناسهها برای نامگذاری استفاده میشود. شناسه ترکیبی از حروف، ارقام و کاراکتر زیر خط (-) است که میتواند دارای طول دلخواهی باشد اما پاسکال فقط ۶۳ کاراکتر اول را در نظر خواهد گرفت. شناسه حتماً باید با یک حرف یا علام زیر خط (-) آغاز شود.
شناسههای به دو دسته تقسیم میشوند:
لازم است ذکر شود که پاسکال در تعریف شناسهها تفاوتی میان حروف بزرگ و کوچک قائل نمیشود بنابراین شناسههای counter و COUNTER با یکدیگر معادل اند .
۷ - برچسب (برچسب): از برچسب برای مشخص نمودن خطوط خاصی از برنامه استفاده میشود. با استفاده از دستور goto میتوان کنترل برنامه را به خط مشخصی از برنامه منتقل نمود. برچسبها میتوانند عدد صحیح در محدوده ۰ تا ۹۹۹۹ یا یک شناسه باشد .
۸ - اعداد: اعداد میتوانند حقیقی یا صحیح، مثبت یا منفی باشند. هرکدام به چند نوع تقسیم میشوند. باید توجه داشت که اعداد صحیح میتوانند از نوع هگزادسیمال نیز باشند که در این صورت باید اولاً با علامت $ شروع شوند و ثانیاً طول آن نباید از هشت رقم هگزادسیمال بیشتر باشد بنابراین محدوده قابل قبول برای اعداد صحیح هگزادسیمال از ۰۰۰۰۰۰۰۰$ تا FFFFFFFF$ است و در ضمن نباید شامل علامت + یا – باشند .
۹ - ثابتهای رشتهای (string constants): ثابت رشتهای، عبارت از تعدادی کاراکتر است که درون دو علامت آپوستروف (') قرار میگیرند. استفاده از کاراکترهای کنترلی (کاراکترهایی که دارای کد اسکی (استاندارد) تا ۳۰ میباشند) در یک ثابت رشتهای مجاز است اما استفاده از کاراکترهای آپوستروف (') و carriage Return (<cr>) غیرمجاز است. همچنین در صورتی که از علامت # به همراه یک عدد مثبت بین ۰ تا ۲۵۵ استفاده شود باعث جایگزینی کاراکتر متناظر با عدد مربوط در جدول کدهای ASCII خواهد شد.
کلمات رزرو شده (Reserved words): به مجموعهای از کاراکترها گفته میشود که برای پاسکال دارای معنای خاصی میباشند و هرگز نمیتوان از آنها به عنوان شناسه غیراستاندارد استفاده نمود.
اجزای اصلی یک برنامه به زبان پاسکال عبارت اند از:
انتقال از مبنای ۲ به ۱۰
uses wincrt;
var
num: array[1..20] of integer; i,j,a,c: integer; s: longint;
begin
writeln('Enter Number in base 2'); readln(a); i:=۱; while a>0 do begin num[i]:=(a mod 10); a:=(a div 10); inc(i); end; s:=۰; c:=۱; for j:= 1 to i do begin s:=s+(num[j]*c); c:=c*۲; end; writeln; writeln('Number In 10 Base Is: ',s);
end.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.