پاسکال Passcal
پیش زمینه :
زبان برنامه نویسی رایانه ای پاسکال یکی از زبان های مشهور برنامه نویسی سطح بالای متداول است.
پاسکال به عنوان زبان ساده شده زبان ALgOL طراحی شد و مقاصد آموزشی داشت. این زبان توسط نیکلاوس ورث (Niklaus Wirth)پروفسور دانشگاه پلی تکنیک زوریخ/سوییس در اوایل سال های ۱۹۷۰ توسعه یافته و نام آن از نام بلز پاسکال، ریاضی دان فرانسوی، الهام گرفته شده است.
وقتی پاسکال اختراع شد زبان های برنامه نویسی بسیار زیادی وجود داشت ولی تنها چند تا از آنها بسیار استفاده می شدند که عباترتند از cobol,assembler,fortrant ایده اصلی زبان جدید نظم،مدیریت داده ها و نیاز به تعریف داده ها بود،این زبان از ابتدا به گونه ای طراحی شده بود که یک زبان آموزشی باشد.
استاندارد این زبان برنامه نویسی در سال ۱۹۸۳ نوشته شده است و دو سازمان IEEE و ANSI آن را تائید کرده اند. هم اکنون این زبان بیش تر به عنوان زبان برنامه نویسی ی آموزشی برای مبتدیان در دانشگاه ها تدریس می شود. سادگی و تجرید خوب این زبان امکان برنامه نویسی راحت بدون نیاز به آگاهی از ساختارهای پیچیدهٔ زیرین سیستم عامل را می دهد.
از خصوصیات این زبان می توان به سادگی فراگیری آن اشاره کرد. پاسکال نیز مانند بسیاری از زبان های برنامه نویسی دیگر دارای کامپایلرهای زیادی است که از معروف ترین آنها می توان به کامپایلر توربو پاسکال (Turbo Pascal) که متعلق به شرکت بورلند (Borland) است اشاره کرد. شرکت بورلند از پاسکال شی گرا به عنوان زبان برنامه نویسی محیط توسعه نرم افزار خود به نام دلفی استفاده کرده است.
توربو پاسکال کامپایلر مشهور پاسکال، که توربو پاسکال نام داشت در سال1983معرفی شد، توربو پاسکال همیشه در بین زبان های برنامه نویسی از فروش بسیار بالایی برخوردار بود.
توربو پاسکال مفهوم جدیدی را به نامIntegrated Development Environment ویا IDE را معرفی کرد، IDE یعنی محیط برنامه نویسی مجتمع،در واقع شما در این محیط می توانید کد را ویرایش کنید (در یک ویرایشگر هماهنگ با wordstar)، کامپایلر را آغاز کنید، خطاها را ببینید و به خط هایی که حاوی آن خطا هاست بروید،البته این مسئله هم اکنون بسیار بی معنی به نظر می آید،اما در گذشته لازم بود که شما از ويرایشگر بیرون بروید و به DOS برگردید و سپس کامپایلر را به صورت خط فرمانی آغاز کنید، سپس شماره خطاهای خط را یادداشت کنید، دوباره ویرایشگر را باز کنید و به خط های حاوی خطا بروید و دوباره همه چیز را از اول انجام دهید.
به علاوه بورلند توربو پاسکال خود را فقط 49دلار می فروخت، در حالیکه مایکروسافت کامپایلر پاسکال خود راچند صد دلار به فروش می رساند، تداوم موفقیت چند ساله توربو پاسکال سبب شد که درآمدهای مایکروسافت از فروش کامپایلر پاسکال بسیار کاهش یابد. پاسکال دلفی بعد از 9نسخه از انتشار توربو پاسکال و بورلند پاسکال، که به تدریج زبان های بسیار گسترده ای شده بود، بورلند در سال 1995 دلفی را معرفی کرد که پاسکال را به یک محیط برنامه نویسی دیداری(VISUAL) تبدیل کرده بود. زبان شیئ گرایی پاسکال که ما در دلفی از آن سود می جوییم در سال 1995 همراه با محیط برنامه نوسیس دیداری(VISUAL)دلفی اختراع نشد این زبان توسعه یافته زبان پاسکال شیئ گرا بود که قبلاً در محصول بورلند پاسکال از آن استفاده شده بود، اما بورلند پاسکال آن را را اختراع نکرد او تنها به گسترش وعمومی شدن آن کمک کرد.
پاسکال یک زبان برنامه نویسی امری و ساخت یافته تأثیر گذار می باشد که در سال 1968 طراحی شد و در سال 1970 توسط آقای Niklaus Wirth به عنوان یک زبان کارآمد و کوچک به منظور پیش برد و توسعه مهارت های برنامه نویسی با استفاده از برنامه نویسی ساخت یافته و ساختمان داده ها منتشر شد.
یک نسخه برگرفته که با عنوان Object Pascal شناخته می شود برای برنامه نویسی شی گرا طراحی شد.
تاریخچه :
پاسکال بر پایه یک زبان برنامه نویسی Algol می باشد و به افتخار ریاضی دان و فیلسوف فرانسوی Blaise Pascal نام گذاری شد. آقای Wirth متعاقباٌ Modula-2 و Obern که شبیه پاسکال بودند را توسعه داد. قبل از آن و برای تهیه مقدمات پاسکال، ایشان زبان Euler که از Algol-W پیروی می کرد را توسعه دادند.
در ابتدا پاسکال بسیار وسیع و جامع بود، اما تنها به منظور یاددادن برنامه نویسی ساخت یافته به دانشجویان نبود. نسلهای متمادی از دانشجویان بر روی پاسکال به عنوان یک زبان مقدماتی در دوره های لیسانس کار کردند. همچنین نسخه های متفاوتی از پاسکال مکرراً برای هر چیزی از پروژه های تحقیقاتی گرفته تا بازی های رایانه ای و سیستم های جاسازی شده استفاده شد. هم اکنون کامپایلر های جدید تر پاسکال موجود می باشند که که به طور وسیع و گسترده استفاده می شوند.
پاسکال نخستین زبان سطح بالا بود که برای توسعه و تکامل در Apple Lisa استفاده شد و در سال های اولیه Mac، قسمت هایی از سیستم عامل اصلی مکینتاش، از منابع پاسکال توسط دست به زبان اسمبلی 68000 Motorola ترجمه شد. حروفچینی محبوب سیستم TeX توسط Donald E.Knuth در WEB (سیستم برنامه نویسی آموزش دیده اصلی) نوشته شد، که بر پایه DEC PDP-10 Pascal می باشد، آن هم در هنگامی که یک برنامه کاربردی مانند Total Commander در Delphi (پاسکال شی گرا) نوشته شد.
چکیده :
صد آقای Wirth خلق یک زبان کار آمد بود (در هر دو مورد سرعت کامپایل و کد ساخته شده) که بر پایه به اصطلاح برنامه نویسی ساخت یافته (مفهومی که به تازگی محبوب شده است) می باشد. اصول و ریشه های پاسکال در زبان الگول 60 می باشد، اما علاوه بر آن مفاهیم و مکانیزم هایی را مافوق اعداد و آرایه های الگول معرفی کرد که برنامه نویسان را قادر به تعریف انواع داده (ساختمان) پیچیده خودشان می کرد و همچنین ساخت ساختمان داده های بازگشتی و پویا مانند لیست ها، درخت ها و گرافها را آسانتر می کرد.
امکانات مهم که برای این امور اضافه شده بود، رکوردها، شمارش ها، زیر حوزه ها، متغیر های اختصاص داده شده پویا همراه اشاره گر های وابسته و مجموعه ها می باشد. برای تحقق و معنی دار کردن این امر، پاسکال یک سیستم تایپ دهی قوی روی تمام اشیا دارد، به این معنی که یک نوع داده نمی تواند بدون تبدیل صریح، به عنوان نوع دیگر تفسیر و یا تبدیل شود. امروزه در بسیاری از زبان های برنامه نویسی مکانیزم های مشابهی به صورت استاندارد می باشند. زبان های دیگر که از توسعه پاسکال تأثیر گرفتند، کوبول، سیمولا 67 و Algol W خود آقای Wirth می باشند.
پاسکال مانند بسیاری از زبان های اسکریپتی امروزه ( اما بر خلاف زبان های خانواده C ) به تعریف پروسه های تودرتو تا هر عمقی و همچنین اکثر انواع تعریف ها و اعلان ها درون پروسه ها و توابع اجازه می دهد. این امر یک نحو خیلی ساده و منسجم را امکان پذیر می سازدکه یک برنامه کامل از نظر نحوی، خیلی نزدیک به یک تابع و یا پروسه تنهاست (البته به استثنای خود کلمه کلیدی).
ساختارهای زبان :
پاسکال در شکل اصلی خودش به طور خالص یک زبان رویه ای است و دارای آرایش سنتی الگول است که شبیه ساختارهای کنترل به همراه کلمات رزروشده همچون if,then,else,while,for و ... می باشد. با این حال پاسکال بسیاری امکانات ساخت یافته داده ای و انتزاعی را داراست که در الگول 60 اصلی موجود نبودند. مانند تعاریف نوع ها، رکوردها، اشاره گرها، شمارش ها و مجموعه ها. یک همچنین ساختار هایی تا یک اندازه از 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 تمام اعداد از32768- تا 32768 byte اعداد صحیح از0 تا 255 real 1E-38 تا 1E+38 اعداد اعشاری از 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” حل شد.
اشاره گرها
پاسکال استفاده از اشاره گر ها را پشتیبانی می کند.
کد:
type a = ^b;
b = record a: Integer;
b: Char;
c: a end;
var pointertob: a;
در اینجا متغیر اشاره گر به b، یک اشاره گر به نوع داده b که یک رکورد است، می باشد. اشاره گرها قبل از اینکه اعلان شوند، می توانند استفاده شوند. این یک اعلان رو به جلو است، یک استثنا برای این قانون که اشیا قبل از استفاده باید تعریف شوند. برای ساخت یک رکورد جدید و اختصاص دادن مقدار 10 و کاراکتر 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;
پردازه ها و توابع
پاسکال برنامه ها را به توابع و پردازه ها شکل دهی می کند.
[PHP]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.[/PHP]
پردازه ها و توابع می توانند تا هر عمقی به صورت تودرتو باشند و ساختار برنامه به صورت منطقی، بیرونی ترین بلوک در نظر گرفته می شود. هر پردازه یا تابع می تواند اعلان های خودش برای برچسب های goto، ثوابت، تایپ ها، متغیرها و دیگر پردازه ها و توابع را داشته باشد که همگی باید در آن دسته قرار گیرند. این ملزومات ترتیبی، در اصل به قصد اجازه به کامپایل یک طرفه کارآمد بود. با این حال در بعضی نسخه ها، ملزومات الزامی ترتیبی قسمت اعلان ها، مورد نیاز نمی باشد.