Pascal

**Pascal** (Паска́ль) — мова праграмаваньня агульнага прызначэньня, створаная Нікляўсам Ўіртам у 1970 годзе як мова структурнага праграмаваньня.

*Pascal* заснаваны на мове праграмаваньня *[[Algol]]* і названы ў гонар матэматыка і філёзафа Блеза Паскаля. Ўірт таксама стварыў мовы праграмаваньня *[[Modula-2]]* і *[[Oberon]]*, падобныя на *Pascal*, аднак з дадатковымі сродкамі для аб’ектна-арыентаванага праграмаваньня.

Спачатку *Pascal* быў гіпатэтычнай мовай для навучаньня студэнтаў структурнаму праграмаваньню, і шмат студэнтаў вучыліся па ім. Варыянты *Pascal* выкарыстоўваюцца дагэтуль як у асьвеце, так і ў праграмаваньні.

Вялікая частка арыгінальнае апэрацыйнае сістэмы *[[Apple Macintosh|Macintosh]]* была напісана на *Pascal*. Папулярная друкарская сістэма *[[TeX]]* напісана на мове пад назвай *[[WEB]]*, пры стварэньні якое Дональд Кнут шмат чаго пераняў з *Pascal*.

## Мова
Усе праграмы на *Pascal* пачынаюцца з ключавога слова *<code>program</code>*, неабавязковага сьпісу ўнутраных дэскрыптараў файла й блёку кода, які знаходзіцца паміж словамі *<code>begin</code>* і *<code>end</code>*. Розьніцы паміж вялікімі й маленькімі літарамі ў *Pascal* няма. Кропка з коскай разьдзяляе выразы, а кропка заканчвае праграму (ці модуль).

`
 '''program''' HelloWorld(Output);
 '''begin'''
     WriteLn('Hello, World!')
 '''end'''.
`

*Pascal*, у сваёй арыгінальнай форме, — выключна працэдурная мова праграмаваньня са звыклымі для гэтага тыпу моваў канструкцыямі *<code>if</code>*, *<code>while</code>*, *<code>for</code>* і падобнымі.

*Pascal* — структурная мова праграмаваньня, а гэта значыць, што ўвесь код разбіты на стандартныя выразы, лепей за ўсё без канструкцыяў безумоўнага пераходу (*<code>goto</code>*).

`
 '''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'''.
`

Працэдуры й функцыі могуць быць укладзенымі да любой ступені, і канструкцыя *<code>program</code>* — найвышэйшы блёк.

Кожны блёк мае свае аб’яўленьні метак *<code>goto</code>*, канстантаў, тыпаў, зьменных і іншых працэдураў і функцыяў, якія маюць ісьці ў такім парадку, як тут пералічана.

У *Pascal* ёсьць наступныя тыпы зьвестак: цэлы лік, сымбаль і лягічная зьменная (простыя тыпы), а таксама новы тып, уведзены ў *Pascal* — пералічальны тып.

`
 '''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;
`

Можна ствараць новыя тыпы на падставе іншых за дапамогай аб’яўленьня тыпаў:

`
 '''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* — гэта масівы сымбаляў.

## Hello World
`
 '''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 (мова праграмаваньня)|Delphi]]*, якая выкарыстоўвала ідэі *[[Object Pascal]]*, прапанаваныя *[[Apple Inc.|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.

## Даступныя кампілятары
Ёсьць некалькі кампілятараў Паскаля, даступных для агульнага выкарыстаньня:
* P4 compiler, аснова шматлікіх кампілятараў Паскаля, напісаных на Паскалі, у тым ліку UCSD p-System.
* Free Pascal напісаны на Паскалі (таму можа скампіляваць сам сябе), і ягоная мэта — стварэньне зручнага й магутнага кампілятара, які можа кампіляваць гатовыя праграмы й ствараць новыя. Ен таксама вольна распаўсюджваецца па ўмовах GNU GPL. Ён дазваляе зьмешваць код Turbo Pascal і Delphi, а таксама падтрымлівае шмат плятформаў і апэрацыйных сыстэмаў.
* Turbo Pascal быў асноўным кампілятарам Паскалю ў 80-х і на пачатку 90-х, які выкарыстоўвалі, таму што ў яго былі магутныя расшырэньні й вельмі малы час кампіляцыі. Зараз старыя вэрсіі Turbo Pascal (да 5.5) даступныя для загрузкі з сайта Borland (патрэбная рэгістрацыя).
* Chrome — гэта кампілятар Паскалю для новага пакаленьня мовы Object Pascal для .NET і Mono, створаны RemObjects Software.
* GNU Pascal Compiler (GPC) — гэта кампілятар Паскалю з GNU Compiler Collection (GCC, Калекцыі кампілятараў GNU). Сам кампілятар напісаны на Сі, бібліятэка часу выкананьня — у асноўным на Паскалі. Вольна распаўсюджваецца згодна з умовамі GNU General Public License, і запускаецца на шматлікіх плятформах і апэрацыйных сыстэмах. Ён падтрымлівае як мову стандартаў ANSI/ISO, так і мову Borland/Turbo Pascal. Падтрымка Borland Delphi і іншых вэрсіяў мовы пакуль што вельмі малая.
* Delphi — гэта прадукт Borland з падтрымкай RAD (хуткага стварэньня праграаўм). Ён выкарыстоўвае мову праграмаваньня Delphi, якая пайшла ад мовы 'Pascal', для стварэньня праграмаў для Windows. Апошняя вэрсія таксама падтрымлівае кампіляцыю для плятформы .NET.
* Kylix — гэта найноўшая распрацоўка Borland сярод іхніх паскальных прадуктаў. Гэта пасьлядоўнік Delphi з падтрымкай апэрацыйнае сыстэмы Linux і палепшанай бібліятэкай аб’ектаў. Кампілятар і IDE (серадовішча разробкі) цяпер даступныя для некамэрцыйнага выкарыстаньня. Цяпер гэты праект закінуты.
* Dr. Pascal — гэта інтэрпрэтатар, які выконвае стандартны Паскаль. Варта адзначыць рэжым «бачнага выкананьня», у якім паказваецца выконваемая праграма і ейныя зьменныя, а таксама разьвітую праверку на памылкі пад час выкананьня. Выконвае праграмы, але не стварае асобных выконваемых двайковых файлаў. Працуе ў MS-DOS, у Windows у вакне эмуляцыі DOS і на старых Macintosh.
* Virtual Pascal быў створаны Vitaly Miryanov у 1995 як кампілятар для OS/2 з падтрымкай сынтаксысу Borland Pascal. Потым яго камэрцыйна разьвінула fPrint, дадала падтрымку Win32, і ў 2000 ён стаўся freeware. Сёньня ён можа кампіляваць праграмы для Win32, OS/2 і Linux і большай часткай сумяшчальны з Borland Pascal і Delphi.
* IP Pascal быў арыгінальна Паскалем для Z80/CP/M. Потым ён быў перанесены на Intel 80386/PC. У IP Pascal ёсьць убудаваная бібліятэка для партаваньня. Напрыклад, стандартную праграму вываду тэксту на Паскалі 1970-х гадоў можна перакампіляваць, і яна будзе працаваць у вакне, нават з дадатковымі графічнымі канструкцыямі. IP Pascal падтрымлівае ISO 7185 з часткай лягічных дапаўненьняў. Напрыклад, «padded right» радкі стандартнага Паскалю падтрымліваюцца й інтэграваныя ў дынамічныя радкі. Статычныя масівы стандартнага Паскалю дапоўненыя дынамічнымі масівамі, якія цалкам сумяшчальныя са статычнымі масівамі, і так далей.
* Pocket Studio — гэта кампілятар/RAD мовы Object Pascal для ARM/Palm з часткай уласных дадаткаў.
* Lazarus — гэта кросплятформавая вэрсія візуальнага RAD IDE. Lazarus выкарыстоўвае кампілятар Free Pascal.

## Крытыка ў мінулым
Калі Паскаль быў вельмі папулярным (аднак ён быў яшчэ болей папулярным у 1980-х і на пачатку 1990-х, чым пад час напісаньня), раннія вэрсіі Паскаля шырока крытыкаваліся ў тым, што іх ня можна «сур’ёзна» выкарыстоўваць, акрамя як для навучаньня. Браян Кэрыган, знакаміты папулярызатар мовы Сі, апісаў свае аргумэнты ў 1981 годзе ў працы «Чаму Паскаль не зьяўляецца маёй улюбленай мовай праграмаваньня». Зь іншага боку, шмат вялікіх распрацовак 1980-х, такія як Apple Lisa і Macintosh, шмат у чым абапіраліся на Паскаль. У наступным дзесяцігодзьдзі пасьля гэтага Паскаль працягваў сваё разьвіцьцё, таму большасьць аргумэнтаў таго часу нельга выкарыстоўваць да ягогых сучасных рэалізацыяў. Аднак большасьць гэтых дапаўненьняў несумяшчальныя паміж кампілятарамі, хоць у апошнім дзесяцігодзьдзі яны, здаецца, аформіліся ў дзьве групы: ISO ці Borland-падобныя.

Выкарыстоўваючы досьвед, атрыманы пры стварэньні Паскаля, Нікляўс Ўірт стварыў яшчэ дзьве мовы праграмаваньня, Modula-2 і Oberon, якія былі яшчэ болей разьвітыя, аднак ня мелі камэрцыйнага посьпеху Паскаля.

## Глядзіце таксама
* Сапраўдныя праграмоўцы не ўжываюць Паскаль

## Крыніцы і заўвагі

## Літаратура
* Kathleen Jansen and Niklaus Wirth: *PASCAL — User Manual and Report.* Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 and ISBN 0-540-97649-3 https://web.archive.org/web/20050314152247/http://www.cs.inf.ethz.ch/~wirth/books/Pascal/
* Niklaus Wirth: *The Programming Language Pascal.* Acta Informatica, 1, (Jun 1971) 35-63
* N. Wirth, M. Broy, ed, and E. Denert, ed: ''Pascal and its Successors'' in *Software Pioneers: Contributions to Software Engineering.* Springer-Verlag, 2002, ISBN 3-540-43081-4
*: also in N. Wirth, and A. I. Wasserman, ed: *Programming Language Design.* IEEE Computer Society Press, 1980
* ISO/IEC 10206: *Extended Pascal.* https://web.archive.org/web/20070315072645/http://pascal-central.com/standards.html
* ISO/IEC 7185: *Programming Languages — PASCAL.* https://web.archive.org/web/20070223234523/http://www.moorecad.com/standardpascal/
* Brian W. Kernighan, Why Pascal is Not My Favorite Programming Language
* Bill Catambay, The Pascal Programming Language

## Вонкавыя спасылкі
* How To Code: Pascal