Паскал (език за програмиране)

Паскал (Pascal) е структурен език за програмиране, създаден през 1970 г. от проф. Никлаус Вирт (Niklaus Wirth) от Швейцарския национален технологичен институт. Основната му цел е била да служи като език за обучение, т.е. да бъде лесен за научаване и да учи на добър стил на програмиране. Езикът, кръстен в памет на френския математик Блез Паскал, се използва от широк кръг програмисти, като добива особена популярност при студентите и учителите заради простотата си.

В края на 80-те години на ХХ век е разработена обектно-ориентирана версия, наречена Object Pascal от фирмата Борланд (Borland), използвана по-късно в средата за разработване Delphi, която е продукт на същата фирма. Навлиза и свободната реализация Free Pascal и визуална среда Lazarus, които са многоплатформени както откъм хардуер Intel x86, AMD64, ARM, така и от към ОС – Windows, Mac OS, Linux, Android.

Паскал напълно неоснователно е смятан от някои програмисти (познаващи само на теория така наречения ANSI Pascal – първоначална реализация на езика) на C или С++ за език играчка, тъй като поставя „ограничения“ върху това, което може да се постигне (макар че такива на практика отсъстват в почти всички съвременни реализации на езика), както и обезопасяването, което намалява бързодействието. С обезопасяването при работа с низове и масиви в паскал се избягват типични за програмите на С грешки от използване на незаделена или чужда памет. Поради по-близката си реализация до работата на процесорните инструкции, паскалските низове се обработват многократно по-бързо. Когато е нужно бързодействие, тези проверки в паскал могат да бъдат изключвани, чрез командни ключове на по-известните компилатори.

Примерни програми

Hello, world 
 program HelloWorld(input,output);
uses crt;
  begin
    Writeln('Hello, World!');
    Writeln('press any key to exit...');
    Readkey;
 end.

Самоизписваща се програма (quine) 
const a:string='const a:string=;begin insert(#39+a+#39,a,16);write(a) end.';begin insert(#39+a+#39,a,16);write(a) end.

Реализация

Ранни паскал компилатори 
Първият паскал компилатор е проектиран в Цюрих за серия мейнфрейм компютър семейството на CDC 6000.

Никлаус Вирт съобщава, че първият опит да го приложи във Fortran през 1969 г. е бил неуспешен поради неадекватност Fortran да изразява сложни структури от данни. Вторият опит е бил формулиран в самия език паскал и е пуснат в експлоатация до средата на 1970 г.

Много паскал компилатори, тъй като са били по подобен начин със самостоятелен хостинг – самият компилатор е написан на паскал, и компилаторът обикновено е способен да се компилира, когато се добавят нови функции към езика, или когато компилаторът бъде пренесен до нова среда. Компилаторът GNU Pascal е едно забележително изключение, който се пише на C.

Първият успешен порт на CDC паскал компилатор на друг мейнфрейм е завършен от Welsh и Куин в Университета на кралицата в Белфаст (QUB) през 1972 г.

Целта е била серията ICL 1900. Това от своя страна е била компилатор на родителя на паскал компилатор за информационни компютърни системи (ICS) Multum миникомпютър.

Портът Multum е разработена – с оглед на използването на паскал като език за програмиране системите – от Findlay, Cupples, Cavouras и Дейвис, работещи в Министерството на изчислителна науки на университета в Глазгоу.

Смята се, че Multum Pascal, който е завършен през лятото на 1973 г., може да е първата 16-битова имплементация.

Напълно новият компилатор е завършен от Welsh и др. в QB през 1977. Той предлага диагностична функция начален език (включващи профилиране, проследяване и типово запознати форматирани депа), които се прилагат от Findlay и Watt в университета на Глазгоу.

Това изпълнение се пренася през 1980 г. на поредицата ICL 2900 от екип на базата в Southampton University и университета на Глазгоу.

Изпълнението Standard Pascal Model също се основава на този компилатор, като са били адаптирани, от Welsh и Hay в университета в Манчестър през 1984 г., за да се провери щателно за съответствие с BSI 6192 / ISO 7185 стандарт и да се генерира код за преносима абстрактна машина.

Първият паскал компилатор, написан в Северна Америка, е създаден в Университета на Илинойс в рамките Donald B. Gillies за PDP-11 и генерира чист машинен код.

Pascal-P система 
За да пропагандира езика бързо, компилатор „пренасяне комплект“ е създаден в Цюрих, който включва компилатор, който генерира код за „виртуална“ стек машина, т.е. код, който придава самата разумно ефективна интерпретация, заедно с преводач за този код – системата Pascal-P.

Компилаторите на P-системи са наречени Pascal-P1, Pascal-P2, Pascal-P3 и P4-Pascal. Pascal-P1 е първата версия и Pascal-P4 бил последният, който идва от Цюрих.

Pascal-P4 компилатор / интерпретатор може да се стартирате и компилира на системи, съвместими с оригиналния паскал. Въпреки това той приема само подмножество на езика паскал Pascal-P5, създаден извън групата Цюрих, приема пълния език паскал и включва ISO 7185 съвместимост.

Компилаторът, базиран на Pascal-P4, който е създаден родните бинарни файлове, е бил освободен за IBM System / 370 мейнфрейм компютър от Australian комисия за атомна енергия; той е наречен „AAEC Pascal Compiler“ по съкращението на името на Комисията.

В началото на 1980 Watcom Pascal е разработен само за IBM System 370.

Пример за образователни цели. През 1990 паскал все още работи на VAX терминали в GMU. Паскал книгите са продавани и учени да изпълняват изискването за програмиране.

Object Pascal, Turbo Pascal 
Apple Computer създават свой собствен Lisa Pascal за Lisa семинара през 1982 г. и пренасят този компилатор на Apple Macintosh и MPW през 1985 г. През 1985 г. Лари Теслър, в консултации с Никлаус Вирт, дефинира Object Pascal и тези разширения биват включени както в Lisa Pascal, така и в Mac Pascal компилатори.

През 1980 Андърс Хейлсберг написва Blue Label Pascal компилатора за Nascom-2. Нова имплементация на този компилатор за IBM компютъра се предлага на пазара под имената Compas Pascal и PolyPascal преди да е бил придобит от Borland. Преименуван е на Turbo Pascal. Той става изключително популярен, благодарение отчасти на агресивна ценова стратегия и отчасти на факта, че притежава един от първите на цял екран Интегрирани среди за развитие и бърза обработка (само за няколко секунди се компилира, свързва и пуска). Освен това той е написан и силно оптимизиран изцяло на асемблерен език, което го прави по-малък и по-бърз, отколкото голяма част от конкуренцията. През 1986 г. Андерс пренася Turbo Pascal на Macintosh и включва Object Pascal разширения на Apple в Turbo Pascal. След това тези разширения са добавени обратно в компютърната версия на Turbo Pascal за версия 5.5. В същото време Microsoft също имплементира Object Pascal компилатора. Turbo Pascal 5.5 има голямо влияние върху Pascal общността, която се съсредоточава главно върху IBM компютъра в края на 1980-те. Множество PC ентусиасти в търсене на по-структуриран заместител на BASIC използват този продукт. Той също започва да се приема от професионални разработчици. По същото време редица концепции са били внесени от C, за да използват паскал програмисти C-базирани APIs директно от Microsoft Windows. Тези разширения включват нулеви низове, указателна аритметика, функционални указатели, адрес на оператори и необезопасени typecasts.

Въпреки това по-късно Borland решава, че иска по-сложни обектно-ориентирани функции, и започва отначало в Delphi с помощта на Object Pascal проекта за стандарт, предлаган от Apple като основа. (Този проект на Apple все още не е официален стандарт). Delphi продуктът е пълна среда за разработка и пълен набор от предварително кодирана адаптивни обекти (повечето от тях са екранни джаджи за Windows), известен като „Visual Component Library“ (VCL). Основният език е Object Pascal. Основните допълнения в сравнение с по-старите разширения на ООП са указателно-базирани обектни модели, виртуални конструктори и деструктори и свойства. Няколко други компилатори също въвеждат този диалект.

Turbo Pascal и други производни с дялове или модулни концепти са модулни езици. Въпреки това той не предоставя вложена модулна концепция или квалифициран внос и износ на специфични символи.

Други разновидности 
Super Pascal е разновидност, която добавя нецифрови етикети, декларация за връщане и изрази като имена на типове.

Университетите на Уисконсин, Цюрих, Карлсруе и Вупертал разработват Pascal-НС и Pascal-XSC (EXtension for Scientific Computing) компилатори, насочени към програмиране на числени пресмятания. TMT Pascal първият Borland-съвместим компилатор за 32-битов MS-DOS защитен режим, OS/2 и Win32 операционни системи. Също езика TMT Pascal е първият, който позволява претоварване на функция и оператор. Pascal-SC е първоначално насочен към процесора Z80, но по-късно е пренаписан за DOS (x86) и 68000. Pascal-XSC многократно е пренасян на UNIX (Linux, SunOS, HP-UX, AIX) и Microsoft / IBM (MS- DOS с EMX, OS / 2, Windows) операционни системи. Той работи чрез генериране на междинен C изходен код, който след това се компилира до локален файл. Някои от езикови разширения на Pascal-SC са приети от GNU Pascal.

Pascal Sol е проектиран около 1983 г. от френски екип за имплементиране на Unix системи наречени Sol. Това е стандартен Pascal ниво-1 (с параметъризирани граници на масив), но определението позволява алтернативни ключови думи и предварително определени идентификатори на френски и езикът включва няколко разширения за облекчаване на система за програмиране (например еквивалентно на lseek). Екипът на Sol по-късно предприема проекта ChorusOS да изработи разпределени операционна система.

IP Pascal е имплементация на езика за програмиране Pascal, използвайки Micropolis DOS, но е преместен бързо на CP/M, работещ на Z80. Той е преместен в машинните типове 80386 през 1994 г. и днес съществува като Windows/XP и Linux приложения. През 2008 г. системата е доведена до едно ново ниво и в резултат на това езикът, наречен „Паскалин“ (калкулаторът на Паскал). Той включва обекти, namespace контроли, динамични масиви, заедно с много други разширения, и като цяло се характеризира със същата функционалност и защита на типовете, като C#. Тя е единствената такава имплементация, която е съвместима и с оригиналната Pascal имплементация, която е стандартизирана като ISO 7185.

Езикови концепти 
Pascal в оригиналния си вид е чисто процедурен език и включва традиционната гама от АЛГОЛ-подобни структури за контрол с ключови думи като if, then, else, while, for и така нататък. Въпреки това Pascal също има много съоръжения за структуриране на данни и други абстракции, които не са били включени в първоначалния Algol 60, като определения на типове, записи, показатели, енумерации, както и сетове. Такива конструкции са отчасти наследени или вдъхновени от Simula 67, ALGOL 68, ALGOL W и предложения от CAR Hoare.

Hello, world 
 Program HelloWorld(output);
 Begin
   Write('Hello, world!')
   {no ";" is required after the last statement of a block -
    adding one adds a „null statement“ to the program;}
 End.

Типове данни 

 type
   byte        = 0..255;
   signed_byte = -128..127;
   string      = packed array[1..255] of char;

Данни в диапазон 
 var
   x : 1..10;
   y : 'a'..'z';

Данни от тип set 
 var
   Set1 : set of 1..10;
   Set2 : set of 'a'..'z';

 if i in [5..10] then ...

 if (i > 4) and (i < 11) then ...

 if i in [0..3, 7, 9, 12..15] then ...

Декларация на типове данни 
 type
   x = integer;
   y = x;
 ...

 type
   a = array[1..10] of integer;
   b = record
         x : integer;
         y : char
       end;
   c = file of a;

Указателни типове 
 type
   pNode = ^Node;
   Node  = record
           a : integer;
           b : char;
           c : pNode {extra semicolon not strictly required}
           end;
 var
   NodePtr : pNode;
   IntPtr : ^integer;

 New(NodePtr);
 ...
 NodePtr^.a := 10;
 NodePtr^.b := 'A';
 NodePtr^.c := NIL;
 ...

 New(NodePtr);
 ...
 with NodePtr^ do
 begin
   a := 10;
   b := 'A';
   c := NIL
 end;
 ...

Контролни структури 
 while a <> b do WriteLn('Waiting');

 if a > b then WriteLn('Condition met') {no semicolon allowed!}
            else WriteLn('Condition not met');

 for i := 1 to 10 do {no semicolon for single statements allowed!}
   WriteLn('Iteration: ', i);

 repeat
   a := a + 1
 until a = 10;

 case i of
   0 : Write('zero');
   1 : Write('one');
   2 : Write('two');
   3,4,5,6,7,8,9,10: Write('?')
 end;

Процедури и функции 
 program Mine(output);

 var i : integer;

 procedure Print(var j : integer);
 begin
 ...
 end;

 begin
 ...
 Print(i);
 end.

Стандарти 
Езикови стандарти са разработени така, че когато код е написан на един вид компютър, той може да бъде пренесен към друг компютър или компилатор и да се компилира и върви правилно. Това не е съвсем безопасен план, тъй като има много уникални поведения на различни компютри. Програма, която извиква уникално поведение на даден компютър, ще трябва да бъде променена, за да работи на друг. Освен това повечето компютърни среди предлагат библиотеки за извършване често използвани функции. Ако програмата прави няколко обаждания до системните библиотеки, тези разговори най-вероятно ще трябва да бъдат заменени, когато кодът се пренася на друг компютър, дори ако компилаторът е в пълно съответствие с неговите езици стандарти.

Въпреки че стандартите не решават тези въпроси, те предоставят определено количество на последователност в рамките на езикова конструкция. Един и същи код може да не функционира, или дори компилира, когато се пренесе директно към друг компютър или компилатор, но заради съществуването стандартите, програмист запознат с този език ще има основни познания за това какво прави кодът. Като се има предвид разбирането на библиотеките и уникалните свойства на компютъра, към който кода се пренесе, задачата за пренасяне на кода е по-лесна, отколкото ако нямаше никакви езикови стандарти.

Първият стандарт, написан за паскал, е разработен през 1983 г. и е известен като неразширен паскал (ISO 7185). През 1990 г. – същата година, когато неразширеният стандарт паскал е актуализиран, е създаден разширен паскал стандарт (ISO 10206). Неразширеният паскал стандарт включва основната функционалност на оригиналния паскал, докато разширеният паскал стандарт е въведен, за да донесе повече съответствие с нуждите на модерното програмиране, осигурявайки по-мощен инструмент за програмиране, без да се жертва елегантността на паскал.

За да отговори на нуждите на по-нататъшно нарастващата технология в компютърното програмиране, някои паскал компилатори са създадени за подпомагане на обектно-ориентираното програмиране. Въпреки че официално стандарт за обектен паскал не е установен, през 1993 г. Комитетът по паскал стандарти публикува „обектно ориентирани разширения на паскал“ – технически доклад, който съдържа предложени стандарти. Членовете на комитета, които написват този доклад са дошли от различни организации – Университет Пейс и Военновъздушните сили на САЩ, Апъл, Майкрософт, и Дижитъл Екуипмент Корпорейшън.

През 1995 г. Джон Рейгън, член на комисията по ISO стандарти и компилаторен архитект на паскал в Дижитъл Екуипмент Корпорейшън (сега Компак), създава паскал стандарти  – често задавани въпроси, адресиращ въпроси като:
 Какви са различните паскал стандарти?
 Кой създава стандартите?
 Какви са необходимите интерфейси за разширяване паскал?
 Каква е историята на паскал стандартите?

Ресурси 
Компилатори и Интерптетатори

Delphi е rapid application development (RAD) продукт Embarcadero. Той използва Object Pascal език (наречен „Delphi“ от Borland), произлязъл от Pascal, за създаване на приложения в платформата на Windows. Подкрепата на .NET, която е била от D8, D2005, D2006 и D2007, след това тя е прекратен и заменен с нов език, защото не е напълно съвместим. През последните години бяха добавени D2009, D2010, Delphi XE.

Free Pascal е мултиплатформен компилатор за писмено на Object Pascal. Той е насочена към осигуряване на удобен и мощен компилатор, както можете да компилирате и утвърдени приложения и да бъде средство за развиване на нови такива. Той се разпространява под GNU GPL, а пакети и изпълними библиотеки идват в модифицирани GNU LGPL. Отделно от режима на съвместимост на Turbo Pascal, Delphi и Mac Pascal, той също има своите собствени процедурни и разширени функции като оператор претоварване. Той поддържа много платформи и операционни системи.

Turbo51 е безплатен Pascal компилатор за семейството на микроконтролери, с Turbo Pascal 7 синтаксис.

Oxygene (известен преди като Chrome) е Object Pascal компилатор за платформите .NET и Моно. Той е създадена и се продава от RemObjects Software, и неотдавна от Embarcadero като бекенд съставител на Prism.

Kylix е потомък на Delphi, с поддръжка на операционната система Linux и подобрена обектна библиотека. Тя вече не се поддържа. Compiler и IDE са на разположение сега за некомерсиална употреба.

GNU Pascal Compiler (GPC) е Pascal компилатор на Compiler Collection на GNU (GCC). Самият компилатор е написан на С, изпълнимата библиотека най-вече в Pascal. Разпределени в рамките на GNU General Public License, той работи на много платформи и операционни системи. Той поддържа ANSI / ISO стандарт езици и има частична Turbo Pascal диалект подкрепа. Един от най-болезнените пропуски е липсата на 100% Turbo Pascal-съвместим. Подкрепа за Borland Delphi и други езикови вариации е доста ограничено. Има известна подкрепа за Mac-Pascal обаче.

DWScript известен още като DelphiWebScript, е преводач, създаден от Matthias Ackermann и Hannes Hernler през 2000 г. Текуща версия работи на Object Pascal голяма степен съвместима с Delphi, но също така поддържа езикови елементи, въведени в Prism. DWScript код може да се вгражда в Delphi приложения, подобни на PascalScript, компилиран в самостоятелно приложение, използвайки SimpleMobileStudio или компилирано в JavaScript код и се поставя на една уеб страница.

Dr. Pascal е интерпретатор, който работи за Standard Pascal. Известни са в режим на „видима изпълнение“, който показва стартирана програма и неговите променливи и изчерпателна проверка на грешка при изпълнение. Работи под DOS, Windows в прозорец DOS, и стари Macintosh.

Extended Pascal Compiler Dr. Pascal тестван на DOS, Windows 3.1, 95, 98, NT.

Virtual Pascal е създаден от Виталий Миранов през 1995 г. като родния OS / 2 компилатор съвместима с Borland Pascal синтаксис. След това, той е бил развита с търговска цел от FPrint, добавянето на поддръжка Win32, а през 2000 г. става безплатна. Днес той може да работи за Win32, OS / 2 и Linux, и е най-вече е съвместим с Borland Pascal и Delphi. Развитие бе спряно на 4 април 2005.

P4 компилатор, основа за много следващи Pascal-изпълнявани-в-Pascal компилатори. Той реализира подмножество на пълна Pascal.

P5 компилатор, е адаптация на P4.

Turbo Pascal е доминиращият Pascal компилатор за персонални компютри през 80-те и началото на 90-те години на 20 век, както поради своите мощни разширения и изключително кратко време на компилация.

IP Pascal осъществява езикът „Паскалин“ (кръстен калкулатор Паскал), който е силно удължен Pascal съвместим с оригиналния Pascal, съгласно ISO 7185. Той разполага модули с контрол пространство от имена, включително паралелни възлагане на задачи, обекти, динамични масиви от всякакъв размери, които се разпределят по време на изпълнение, претоварвания, замени, както и много други разширения. IP Pascal има вградена преносима библиотека, която е по поръчка, съобразени с езика Pascal. Например стандартно приложение текст извежда от 1970 оригинален Pascal може да се прекомпилират да работят в един прозорец и дори имат добавени графични конструкции.

Pascal-XT е създаден от Siemens за тяхните мейнфрейм операционни системи BS2000 и SINIX.

PocketStudio е подмножество Pascal компилатор и RAD инструмент за Palm OS и MC68xxx процесори с някои собствени разширения за подпомагане на взаимодействие с Palm OS API. Той прилича на Delphi и Лазар по дизайнер, обект инспектор и изходния код редактор.

MIDletPascal – Е Pascal компилатор и IDE, който генерира малък и бърз Java байткод специално предназначена за създаване на софтуер за мобилни телефони
Vector Vector Pascal Pascal е език за SIMD инструкции комплекти като MMX и AMD 3d, поддържащо всички процесори на Intel и AMD, и PlayStation 2 Emotion Engine на Sony.

Morfik Pascal позволява разработването на уеб приложения, изцяло написани на Object Pascal (и двата сървъра и странични браузър).

WDSibyl – Visual Environment развитие и Pascal компилатор за Win32 и OS / 2

AmigaPascal – AmigaPascal, безплатна Pascal-Compiler за Amiga-Computer.

IDE's

Dev-Pascal Е Pascal IDE, който е проектиран в Borland Delphi и който подкрепя Free Pascal Абонамент GNU Pascal.

Lazarus е безплатна Delphi междуплатформено IDE за бърза разработка на приложения (RAD). Въз основа на Free Pascal, Lazarus е достъпна за множество платформи, включително Linux, FreeBSD, Mac OS X и Microsoft Windows.

Code Typhon е Pascal IDE построен като дълга версия на Lazarus с много пакети, изпратени и скриптове. Code Typhon е проектирана през свободното паскал и поддържа Object Pascal, Turbo Pascal и Delphi също. Програмистите могат да изградят всяка програма за всяко устройство.

Външни препратки 
 taoyue.com: Learn Pascal tutorial – Въведение в Pascal
 Open Directory Project: Pascal tutorials directory  – Други уроци по Pascal
 Pascal Game Development – Сайт за правене на игри на Pascal (Free Pascal, Delphi и Kylix)
 pascal-central.com – created for the Pascal community  – създаден за общността на езика паскал

Езици за програмиране