Класс языка: | |
---|---|
Появился в: | |
Автор(ы): | |
Расширениефайлов: | |
Типизация данных: | |
Основные реализации: | CDC 6000, ICT 1900, Pascal-P,PDP-11, PDP-10, IBM System/370, HP, Free Pascal,GNU |
Диалекты: | |
Испытал влияние: | |
Повлиял на: | Modula-2, Oberon, Oberon-2,Component Pascal, Ada, Object Pascal, Java[1][2][3], Oxygene |
Паскаль (англ. Pascal) — язык программирования общего назначения. Один из наиболее известных языков программирования, широко применялся в промышленном программировании[4], обучении программированию в высшей школе, является базой для ряда других языков.
Содержание[убрать] |
[править]Предыстория
Язык назван в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа.
Паскаль был создан Никлаусом Виртом в 1968-69 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Он был опубликован в 1970 году Виртом как небольшой и эффективный язык, чтобы способствовать хорошему стилю программирования, использовать структурное программирование и структурированные данные.
Последующая работа Вирта была направлена на создание на основе Паскаля языка системного программирования, с сохранением возможности вести на его базе систематический, целостный курс обучения профессиональному программированию [5]. Результат этой работы — язык Модула-2.
[править]Реализации
[править]UCSD Pascal
В 1978 году в Университете Сан-Диего (Калифорния, США) была разработана система UCSD p-System, включавшая порт виртовского компилятора с языка Паскаль в переносимый p-код, редактор исходных кодов, файловую систему и пр.[6], а также реализовывавшая значительное число расширений языка Паскаль, такие как модули, строки символов переменной длины, директивы трансляции, обработка ошибок ввода-вывода, обращение к файлам по именам и пр. Впоследствии основные реализации языка Паскаль основывались на этом диалекте.
[править]Object Pascal от Apple
В 1986 году фирма Apple Computer разработала объектное расширение языка Паскаль, получив в результате Object Pascal. Он был разработан группой Ларри Теслера, который консультировался с Никлаусом Виртом.
[править]Turbo Pascal и Object Pascal от Borland, Microsoft Pascal
В 1989 году объектное расширение языка было добавлено фирмой Borland в Turbo Pascal версии 5.5 (начиная со следующей версии среда была переименована в Borland Pascal). Объектные средства были позаимствованы из Object Pascal от Apple, языковые различия между объектным Turbo Pascal 5.5 и Object Pascal от Apple крайне незначительны.
Почти в то же самое время, что и Borland, Microsoft выпустил свою версию объектно-ориентированного языка Паскаль.[7][8] Эта версия Паскаля не получила широкого распространения.
Дальнейшее развитие реализации Паскаля от Borland породило Object Pascal от Borland, впоследствии, в ходе развития среды программирования Delphi, получивший одноимённое название.
[править]Современные версии Object Pascal
Важным шагом в развитии языка является появление свободных реализаций языка Паскаль Free Pascal и GNU Pascal, которые не только вобрали в себя черты множества других диалектов языка, но и обеспечили чрезвычайно широкую переносимость написанных на нём программ (например GNU Pascal поддерживает более 20 различных платформ, под более чем 10 различными операционными системами, Free Pascal обеспечивает специальные режимы совместимости с различными распространёнными диалектами языка, такими как Turbo Pascal (полная совместимость), Delphi и другими.
В настоящее время, начиная с Delphi 2003, создана реализация языка для платформы Net, хотя разработчики продолжают использовать Delphi более ранних версий.
О коммерческих разработках на Free Pascal, GNU Pascal и TMT Pascal на данный момент известно мало.
Кроме того, в Южном федеральном университете разрабатывается язык и система программирования PascalABC.NET, ориентированная на обучение современному программированию. Язык системы — это Object Pascal для платформы Microsoft .NET, который содержит все основные элементы современных языков программирования: модули, классы, перегрузку операций, интерфейсы, исключения, обобщённые классы, сборку мусора, а также некоторые средства параллельного программирования.
[править]Особенности языка
Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком.
Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы сдинамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования»[9] (эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.
Необходимо заметить, что многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 1970-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. В начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники академик А. П. Ершов разработал алголо-паскалеподобный «алгоритмический язык».
Наиболее известной реализацией Паскаля, обеспечившая широкое распространение и развитие языка, является Turbo Pascal фирмы Borland, выросшая затем в объектный Паскаль для DOS (начиная с версии 5.5) и Windows и далее в Delphi, в которой были внедрены значительные расширения языка.
Диалекты Паскаля, применяемые в Turbo Pascal для DOS и Delphi для Windows, стали популярны из-за отсутствия других успешных коммерческих реализаций.
[править]Стандарты
После начала использования Паскаля в 1970 году и появления реализаций, расходящихся не только в дополнениях, но и в синтаксисе, был поднят вопрос о стандартизации языка. Стандарт языка был разработан Никлаусом Виртом в 1974 году совместно с Кетлин Йенсен (Kathleen Jensen).[10] В дальнейшем, были приняты международный стандарт от ISO и американский от ANSI. На данный момент, выделяют три принципиально разных стандарта: Unextended Pascal (исходный), Extended Pascal (расширенный), Object-Oriented Extensions to Pascal (объектно-ориентированное расширение Паскаля).
Название | Вариант | Кем/где разработан | Год создания |
---|---|---|---|
Pascal Standard | исходный | Н. Вирт, Кетлин Йенсен | 1974 |
Pascal Standard | исходный | ISO 7185:1983 ANSI/IEEE 770X3.97:1983 | 1982 |
Unextended Pascal | исходный | ISO 7185:1990 | 1989 |
Extended Pascal | расширенный | ANSI/IEEE 770X3.160:1989 | 1989 |
ISO/IEC 10206 | 1991 | ||
Object-Oriented Extensions to Pascal | объектно-ориентированное расширение | ANSI/X3-TR-13:1994 | 1993 |
Одним из главных дополнительных свойств объектно-ориентированного расширения Extended Pascal стала модульность и средства, облегчающие раздельную компиляцию.
Стандартизация языка была запаздывающей по отношению к реальному появлению в языке тех или иных возможностей. Коммерческие реализации расширяли стандартный Паскаль; так было сделано в UCSD Pascal, модификации Object Pascal фирмой Apple, Turbo Pascal от Borland (незначительно модифицированная версия Apple) и его ответвлений. Ни одна из распространённых коммерческих реализаций Паскаля не соответствует в точности ни одному из официальных стандартов языка.
[править]Синтаксис и языковые конструкции
Паскаль, в его первоначальном виде, представляет собою чисто процедурный язык и включает в себя множество алголоподобных структур и конструкций с зарезервированными словами наподобие if
, then
, else
, while
, for
, и т. д. Тем не менее, Паскаль также содержит большое количество возможностей для структурирования информации и абстракций, которые отсутствуют в изначальном Алголе-60, такие как определение типов, записи, указатели, перечисления, и множества. Эти конструкции были частично унаследованы или инспирированы от языков Симула-67, Алгол-68, созданного Никлаусом Виртом AlgolW и предложены Хоаром.
В современных диалектах (Free Pascal) доступны такие операции как перегрузка операторов и функций.
[править]Hello world
Программы на Паскале начинаются с ключевого слова program
и следующего за ним имени программы с точкой с запятой (в некоторых диалектах является необязательным), за именем может в скобках следовать список внешних файловых дескрипторов в качестве параметров; за ним следует тело программы, состоящее из секций описания переменных, типов и констант, объявлений процедур и функций и следующего за ними блока операторов, являющегося точкой входа в программу. В языке Паскаль блок ограничивается ключевыми словами begin
и end
. Операторы разделяются точками с запятой, после тела помещается точка, служащая признаком конца программы. Регистр символов в Паскале не имеет значения.
Таким образом, простейшая программа на Паскале будет выглядеть следующим образом:
program p;beginend.
Программа не выполняет никаких действий и содержит пустой блок операторов.
Пример программы, выводящей строку «Hello, World!»:
Program HelloWorld(output);begin writeln('Hello, World!') { оператор вывода строки }end.
[править]Типы данных
Простые типы данных Паскаля: числа с плавающей запятой (real
), целые (integer
), символьный (char
), логический (boolean
) и перечисления (конструктор нового типа, введённый в Паскале):
Тип | Диапазон | Формат | Размер в байтах |
---|---|---|---|
ShortInt | −128..127 | Знаковый | 1 |
Integer | −32768..32767 | Знаковый | 2 |
LongInt | −2147483648..2147483647 | Знаковый | 4 |
Byte | 0..255 | Беззнаковый | 1 |
Word | 0..65535 | Беззнаковый | 2 |
var { секция объявления переменных } r: Real; { переменная вещественного типа } i: Integer; { переменная целого типа } c: Char; { переменная-символ } b: Boolean; { логическая переменная } s: String; { переменная строки } t: Text; { переменная для обьявления текстового файла } e: (apple, pear, banana, orange, lemon); { переменная типа-перечисления }
Выделяется понятие порядковых типов данных (ordinal), к ним относятся целые типы (знаковые и беззнаковые), логический (boolean
), символьный (char
), перечислимые типы и типы-диапазоны.
Порядковые типы задаются целым числом (кодом), которое можно получить с помощью функции ord. Все операции, выполняемые над порядковыми типами, выполняются с их кодами.
Диапазоны содержат подмножество значений других порядковых типов:
var x: 1..10; y: 'a'..'z'; z: pear..orange;
Для порядковых типов определены операции inc
, dec
, succ
, pred
, ord
, операции сравнения (=
>
<
=>
<=
<>
), их можно использовать в операторах case
, for
(как счётчик цикла), как границы массивов, для задания элементов множеств и типов-диапазонов.
В Паскале, в отличие от Си-подобных языков, с типами boolean
и char
арифметические целочисленные операции не определены.
В отличие от многих распространённых языков, Паскаль поддерживает специальный тип данных множество:
var set1: set of 1..10; set2: set of 'a'..'z'; set3: set of pear..orange;
Множество — фундаментальное понятие в современной математике, которое может быть использовано во м