Pascal (Паска́ль) — мова праграмаваньня агульнага прызначэньня, створаная Нікляўсам Ўіртам у 1970 годзе як мова структурнага праграмаваньня.
Pascal заснаваны на мове праграмаваньня Algol і названы ў гонар матэматыка і філёзафа Блеза Паскаля. Ўірт таксама стварыў мовы праграмаваньня Modula-2 і Oberon, падобныя на Pascal, аднак з дадатковымі сродкамі для аб’ектна-арыентаванага праграмаваньня.
Спачатку Pascal быў гіпатэтычнай мовай для навучаньня студэнтаў структурнаму праграмаваньню, і шмат студэнтаў вучыліся па ім. Варыянты Pascal выкарыстоўваюцца дагэтуль як у асьвеце, так і ў праграмаваньні.
Вялікая частка арыгінальнае апэрацыйнае сістэмы Macintosh была напісана на Pascal. Папулярная друкарская сістэма TeX напісана на мове пад назвай WEB, пры стварэньні якое Дональд Кнут шмат чаго пераняў з Pascal.
Усе праграмы на Pascal пачынаюцца з ключавога слова program
, неабавязковага сьпісу ўнутраных дэскрыптараў файла й блёку кода, які знаходзіцца паміж словамі begin
і end
. Розьніцы паміж вялікімі й маленькімі літарамі ў Pascal няма[1]. Кропка з коскай разьдзяляе выразы, а кропка заканчвае праграму (ці модуль).
program HelloWorld(Output);
begin
WriteLn('Hello, World!')
end.
Pascal, у сваёй арыгінальнай форме, — выключна працэдурная мова праграмаваньня са звыклымі для гэтага тыпу моваў канструкцыямі if
, while
, for
і падобнымі.
Pascal — структурная мова праграмаваньня, а гэта значыць, што ўвесь код разбіты на стандартныя выразы, лепей за ўсё без канструкцыяў безумоўнага пераходу (goto
).
while a <> b do
begin
WriteLn('Waiting');
end;
if a > b then
begin
WriteLn('Condition met');
end
else
begin
WriteLn('Condition false');
end;
for i := 1 to 10 do
WriteLn('Iteration: ', i:1);
repeat
a := a + 1;
until a = 10;
У Pascal праграмы разьбіваюцца на працэдуры й функцыі.
program Mine(Output);
procedure print(var i: integer);
function next(i: integer): integer;
begin
next := i + 1;
end;
begin
WriteLn('The total is: ', i);
i := next(i);
end;
begin
i := 1;
while i <= 10 do
print(i);
end.
Працэдуры й функцыі могуць быць укладзенымі да любой ступені, і канструкцыя program
— найвышэйшы блёк.
Кожны блёк мае свае аб’яўленьні метак goto
, канстантаў, тыпаў, зьменных і іншых працэдураў і функцыяў, якія маюць ісьці ў такім парадку, як тут пералічана.
У Pascal ёсьць наступныя тыпы зьвестак: цэлы лік, сымбаль і лягічная зьменная (простыя тыпы), а таксама новы тып, уведзены ў Pascal — пералічальны тып[2].
program Myprog;
var
a: integer;
b: char;
c: boolean;
d: (one, two, three, four, five);
Можна стварыць «дыяпазон» любога зь пералічаных тыпаў.
var
x: 1..10;
y: 'a'..'z';
z: two..four;
Можна ствараць новыя тыпы на падставе іншых за дапамогай аб’яўленьня тыпаў[3]:
program MyOtherProg;
type
x = integer;
y = x;
...
Болей складаныя тыпы можна стварыць за дапамогай простых тыпаў:
type
a = array [1..10] of integer;
b = record
a: integer;
b: char;
end;
c = file of a;
Радкі ў клясычным Pascal — гэта масівы сымбаляў[4].
program HelloWorld(input, output);
begin
WriteLn('Hello, World!');
end.
Першы кампілятар Pascal быў створаны ў Цюрыху ў 1970 для сямейства кампутараў CDC 6000. Першы паўночнаамэрыканскі кампілятар Pascal быў напісаны ў унівэрсытэце Ілінойса для PDP-11 і ствараў машынны код.
Для хуткага распаўсюджаньня мовы ў Цюрыху быў створаны «набор інструмэнтаў для партаваньня кампілятара», які ўлучаў кампілятар у код для віртуальнай машыны й праграму, якая выконвала гэты код. Гэты набор стаў называцца P-сыстэмай. Хаця зь яго дапамогай плянавалася стварэньне кампілятараў у машынны код, як мінімум адна сыстэма выкарыстоўвала яго для стварэньня інтэрпрэтуемай сыстэмы — UCSD p-System.
IP Pascal быў рэалізацыяй Pascal для Micropolis DOS, аднак ён хутка быў перанесены на CP/M для Z80.
У пачатку 1980-х гадоў UCSD Pascal быў перанесены на кампутары Apple II і Apple III як структурная мова праграмаваньня, бо ў той час з гэтымі кампутарамі пастаўляўся інтэрпрэтатар мовы BASIC.
У пачатку 1980-х гадоў Anders Hejlsberg напісаў кампілятар Blue Label Software Pascal для Nascom-2. Пазьней ён уладкаваўся на працу ў кампанію Borland і перапісаў свой кампілятар для IBM PC, і гэту вэрсію назваў Turbo Pascal. Гэты новы кампілятар каштаваў 49,95$, што было намнога меней за цану на кампілятар Blue Label Software Pascal.
Танны кампілятар Borland меў вялікі ўплыў на карыстальнікаў Pascal, якія ў канцы 1980-х гадоў карысталіся ў асноўным IBM PC. Шматлікія аматары праграмаваньня на PC, якія раней шукалі структурную замену для мовы праграмаваньня BASIC, пачалі карыстацца гэтым прадуктам. Turbo Pascal быў даступны толькі для адной архітэктуры, таму ён кампіляваў код наўпрост у машынныя коды працэсара Intel 8088, што дазваляла выконваць праграмы на Pascal хутчэй, чым праграмы на інтэрпрэтуемых мовах праграмаваньня.
Super Pascal быў вэрсіяй, якая дадала ня лічбавыя меткі, апэратар return і выразы як імёны тыпаў.
У 1990-х гадах кампілятары, на якіх можна скампіляваць код для розных сістэмаў, сталі выкарыстоўвацца часьцей, у тым ліку й Pascal, які дазваляў кампіляцыю ў машынны код і ў той жа час лёгка пераносіўся на новае апаратнае забесьпячэньне.
У вэрсіі Turbo Pascal 5.5 Borland дабавіла ў Pascal аб'ектна-арыентаванае праграмаваньне (ААП).
Аднак потым у Borland вырашылі, што патрэбны Pascal зь лепей прадуманай рэалізацыяй ААП, і пачалі распрацоўку Delphi, якая выкарыстоўвала ідэі Object Pascal, прапанаваныя Apple, як аснову (гэтыя ідэі Apple дагэтуль ня сталі фармальным стандартам). Borland таксама называў сваю рэалізацыю Object Pascal у першых вэрсіях Delphi, аднак зьмяніў назву на «мова праграмаваньня Delphi» у далейшым. Асноўнае дапаўненьне ў параўнаньні з папярэднімі вэрсіямі — заснаваная на спасылках (reference-based) аб’ектная мадэль, віртуальныя канструктары й дэструктары, а таксама ўласьцівасьці. Існуе некалькі кампілятараў, заснаваных на гэтым дыялекце.
Turbo Pascal і іншыя рэалізацыі з канцэпцыяй модуляў (units ці module) — гэта модульныя мовы. Turbo Pascal скапіяваў гэтая канцэпцыі ці з стандарту пашыранага Pascal, ці зь ягонага пасьлядоўніка Modula-2. Аднак у ім адсутнічае падтрымка канцэпцыі ўкладзеных модуляў і імпарту/экспарту асобных сымбаляў.
Для кампілятараў Turbo Pascal радок рrogram неабавязковы.
У 1983 мова была стандартызаваная ў міжнародным стандарце ISO/IEC 7185, а таксама ў частцы мясцовых стандартаў, у тым ліку ў амэрыканскім ANSI/IEEE770X3.97-1983. У 1990 быў створаны стандарт расшыранага Паскалю (extended Pascal) як ISO/IEC 10206.
ISO 7185 быў створаны для праясьненьня мовы Ўірта, створанай у 1974, у такім выглядзе, якой яна была апісаная ў кіраўніцтве карыстальніка й у Report [Jensen and Wirth], аднак з дабаўленьнем «Conformant Array Parameters» як узровень 1 стандарту, узровень 0 — Паскаль без Conformant Arrays.
На вялікіх кампутарах (мэйнфрэймах і мінікампутарах), адкуль пайшоў Паскаль, гэтыя стандарты выкарыстоўвалі. На IBM-PC — не выкарыстоўвалі. На IBM-PC найбольш пашыранымі былі стандарты Borland Turbo Pascal і Delphi. Таму важна знаць, якім стандартам адпавядае канкрэтны кампілятар — арыгінальнай мовы Паскаль ці дыялекту Borland.
Ёсьць некалькі кампілятараў Паскаля, даступных для агульнага выкарыстаньня:
Калі Паскаль быў вельмі папулярным (аднак ён быў яшчэ болей папулярным у 1980-х і на пачатку 1990-х, чым пад час напісаньня), раннія вэрсіі Паскаля шырока крытыкаваліся ў тым, што іх ня можна «сур’ёзна» выкарыстоўваць, акрамя як для навучаньня. Браян Кэрыган, знакаміты папулярызатар мовы Сі, апісаў свае аргумэнты ў 1981 годзе ў працы «Чаму Паскаль не зьяўляецца маёй улюбленай мовай праграмаваньня». Зь іншага боку, шмат вялікіх распрацовак 1980-х, такія як Apple Lisa і Macintosh, шмат у чым абапіраліся на Паскаль. У наступным дзесяцігодзьдзі пасьля гэтага Паскаль працягваў сваё разьвіцьцё, таму большасьць аргумэнтаў таго часу нельга выкарыстоўваць да ягогых сучасных рэалізацыяў. Аднак большасьць гэтых дапаўненьняў несумяшчальныя паміж кампілятарамі, хоць у апошнім дзесяцігодзьдзі яны, здаецца, аформіліся ў дзьве групы: ISO ці Borland-падобныя.
Выкарыстоўваючы досьвед, атрыманы пры стварэньні Паскаля, Нікляўс Ўірт стварыў яшчэ дзьве мовы праграмаваньня, Modula-2 і Oberon, якія былі яшчэ болей разьвітыя, аднак ня мелі камэрцыйнага посьпеху Паскаля.
type
TSpecInteger = type integer;
string
, які падтрымлівае большасьць апэрацыяў над радкамі сымбаляў, у тым ліку складаньне двух радкоў запісам S:=S1+S2;
. Пазьней гэты тып быў пашыраны для таго, каб падтрымліваць любую колькасьць сымбаляў (спачатку да 255 — Turbo Pascal 4.0, потым да сымбаляў — Object Pascal/Delphi 4.0).