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

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене
Паскал
LagrangePAS.jpg
Парадигма Императивен/структуриран
Реализиране през 1970 г. (преди 46 г.)
Софтуерен разработчик Никлаус Вирт
Типизация на данните Статична/ силна/ безопасна
Програмни диалекти UCSD, Turbo, Delphi, Borland
Повлиян от ALGOL W
Език на имплементация Ada Component Pascal Java[1][2][3] Modula / -2 / -3 Oberon / -2 Object Pascal Oxygene Seed7
Файлово разширение .pas
Паскал в Общомедия

Паскал (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( previously FORTRAN, derived from Formula Translating System) през 1969 г. е бил неуспешен поради неадекватност Fortran да изразява сложни структури от данни. Вторият опит е бил формулиран в самия Паскал език и е пуснат в експлоатация до средата на 1970

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

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

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

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

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

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

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

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

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

Паскал-P система[редактиране | редактиране на кода]

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

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

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

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

В началото на 1980, Watcom Паскал е разработен, само за 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.

Типове данни[редактиране | редактиране на кода]

Тип данни Тип данни, които променливата може да съхрани
integer integer (whole) numbers
real floating-point numbers
boolean the value True or False
char a single character from an ordered character set
string a group or "string" of characters
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-Паскал обаче.

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, Лазар е достъпна за множество платформи, включително Linux, FreeBSD, Mac OS X и Windows Microsoft.

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


Външни препратки[редактиране | редактиране на кода]