پاسکال (زبان برنامه‌نویسی)

پاسکال یکی از زبان‌های مشهور برنامه‌نویسی سطح بالای متداول است. پاسکال به عنوان زبان ساده‌شده ALgOL طراحی شد و کاربردهای آموزشی داشت. این زبان را نیکلاوس ویرت، پروفسور دانشگاه پلی‌تکنیک زوریخ سوییس در سال‌های ۱۹۶۸ و ۱۹۶۹ میلادی طراحی کرد و در سال ۱۹۷۰ به عنوان یک زبان کارآمد و کوچک به منظور پیشبرد و توسعه مهارت‌های برنامه‌نویسی با بهره‌گیری از برنامه‌نویسی ساخت‌یافته و ساختمان داده‌ها، منتشر گردید. نام زبان پاسکال از نام بلز پاسکال، ریاضی‌دان فرانسوی، بر گرفته شده‌است.
پاسکال یک زبان برنامه‌نویسی امری و ساخت‌یافته تاثیرگذار است که از ویژگی‌هایش می‌توان به سادگی فراگیری آن اشاره کرد.
استاندارد این زبان برنامه‌نویسی در سال ۱۹۸۳ نوشته شده و دو سازمان IEEE و ANSI آن را تایید کرده‌اند. هم‌اکنون این زبان بیش‌تر به‌عنوان زبان برنامه‌نویسی آموزشی برای تازه‌کاران در دانشگاه‌ها آموزش داده می‌شود. سادگی و تجرید خوب این زبان امکان برنامه‌نویسی آسان بدون نیاز به آگاهی از ساختارهای پیچیده زیرین سیستم‌عامل را می‌دهد.
یک ویرایش برگرفته از پاسکال که با عنوان Object Pascal شناخته می‌شود، برای برنامه‌نویسی شیءگرا طراحی شد.
تاریخچه
نیکلاوس ورث پیش از پاسکال و برای فراهم‌آوری مقدمات آن، زبان Euler و سپس Algol-W را گسترش داد و سپس زبان‌های Modula-2 و Obern که همانند پاسکال بودند را ساخت. در زمان اختراع پاسکال، زبان‌های برنامه‌نویسی بسیار زیادی وجود داشت ولی تنها شماری از آن‌ها بسیار استفاده می‌شدند که عبارت بودند از Fortran, Assembler و Cobol. ایده اصلی زبان جدید نظم، مدیریت داده‌ها و نیاز به تعریف داده‌ها بود. این زبان از آغاز به گونه‌ای طراحی شده بود که زبانی آموزشی باشد.
در آغاز پاسکال بسیار وسیع و جامع بود، اما تنها به منظور یاد دادن برنامه‌نویسی ساخت‌یافته به دانشجویان نبود. نسل‌های پیاپی از دانشجویان بر روی پاسکال به عنوان یک زبان آغازین در دوره‌های کارشناسی کار کردند. همچنین نسخه‌های گوناگونی از پاسکال پی‌درپی برای هر کاری از پروژه‌های تحقیقاتی گرفته تا بازی‌های رایانه‌ای و سیستم‌های جاسازی‌شده استفاده شد. هم‌اکنون کامپایلرهای تازه‌تر پاسکال موجود هستند که به‌طور گسترده استفاده می‌شوند.
پاسکال نخستین زبان سطح بالا بود که برای توسعه و تکامل در 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 الهام گرفته شده یا به ارث برده شدند.
Hello World
برنامه‌های پاسکال توسط کلمه کلیدی Program به همراه لیستی از فایل‌های خارجی به عنوان پارامترها شروع می‌شوند. سپس بلوک عبارت اصلی که توسط کلمات کلیدی Begin و End بسته‌بندی شده‌است را دنبال می‌کنند. علامت semicolon (;) عبارات را از هم جدا می‌کند و نقطه آخر برنامه تمام برنامه را خاتمه می‌دهد. در پاسکال، بزرگ و کوچکی حروف مطرح نیست. بعضی کامپایلرها مثل توربو پاسکال در میان آن‌ها کلمه کلیدی Program را اختیاری در نظر می‌گیرند.
در اینجا یک مثال از کد برای یک برنامه خیلی ساده آورده شده‌است.
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 then
بسیار سریع‌تر است از
if (i>4) and (i
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
، =
0 do
begin
numi:=(a mod 10);
a:=(a div 10);
inc(i);
end;
s:=۰;
c:=۱;
for j:= 1 to i do
begin
s:=s+(numj*c);
c:=c*۲;
end;
writeln;
writeln(Number In 10 Base Is: ,s);
end.