Основные конструкции языка программирования паскаль вариант 1

Pascal-это императивный и процедурный язык программирования, разработанный Никлаусом Виртом как небольшой эффективный язык. Предназначенный для поощрения хороших практик программирования с использованием структурированного программирования и структурирования данных. Он назван в честь французского математика. Философа и физика Блеза Паскаля.

Основываясь на книге Вирта Алгоритмы + структуры данных = программыязыка ALGOL 60. Вирт был вовлечен в процесс улучшения языка в рамках усилий ALGOL X и предложил версию под названием ALGOL W. Это не было принято. И процесс ALGOL X увяз. В 1968 году Вирт решил отказаться от процесса ALGOL X и еще больше усовершенствовать ALGOL W. Выпустив его как Pascal в 1970 году.

Помимо скаляров и массивов ALGOL, Pascal позволял определять сложные типы данных и строить динамические и рекурсивные структуры данных . Такие как списки, деревья и графики. Pascal имеет строгую типизацию для всех объектов. Что означает. Что один тип данных не может быть преобразован или интерпретирован как другой без явных преобразований. В отличие от C (и большинства языков семейства C), Pascal допускает вложенные определения процедур на любом уровне глубины. А также допускает большинство видов определений и объявлений внутри

подпрограмм (процедуры и функции). Таким образом. Программа синтаксически подобна отдельной процедуре или функции. Это похоже на блочную структуру ALGOL 60, но ограничено произвольными блочными операторами только процедурами и функциями.

Паскаль стал очень успешным в 1970-х годах. Особенно на растущем рынке миникомпьютеров. Компиляторы были также доступны для многих микрокомпьютеров, когда эта область появилась в конце 1970-х годов. В 1980-х годах он широко использовался в качестве учебного языка на курсах программирования университетского уровня. А также в производственных условиях для написания коммерческого программного обеспечения в тот же период.

Он был вытеснен языком программирования C в конце 1980-х и начале 1990-х годов. Когда системы на базе UNIX стали популярными. И особенно с выпуском C++.

Производная от Object Pascal, предназначенная для объектно-ориентированного программирования, была разработана в 1985 году. Он был использован Apple Computer и Borland в конце 1980-х годов. А затем развился в Delphi на платформе Microsoft Windows. Расширение понятий Паскаля привело к языкам Modula-2 и Oberon.

История

Более ранние усилия

Большая часть истории дизайна компьютерных языков в 1960-х годах может быть прослежена до

языка ALGOL 60. ALGOL был разработан в 1950-х годах с явной целью иметь возможность четко описывать алгоритмы. Он включал в себя ряд функций для структурированного программирования, которые остаются распространенными в языках по сей день.

Вскоре после его введения. В 1962 году Вирт начал работать над своей диссертацией с Гельмутом Вебером по языку программирования Эйлера. Эйлер был основан на синтаксисе АЛГОЛЯ и многих концепциях. Но не был производным. Его основной целью было добавление динамических списков и типов. Что позволяло использовать его в ролях, подобных

Lisp. Этот язык был опубликован в 1965 году.

К этому времени был выявлен ряд проблем в АЛГОЛЕ. В частности отсутствие стандартизированной струнной системы. Группа, которой было поручено поддерживать язык. Начала процесс ALGOL X для выявления улучшений. Призывая к представлению материалов. Вирт и Тони Хоар представили консервативный набор модификаций. Чтобы добавить строки и очистить часть синтаксиса. Они считались слишком незначительными. Чтобы их стоило использовать в качестве нового стандарта ALGOL. Поэтому Вирт написал компилятор для этого языка. Который стал называться

ALGOL W.

Усилия ALGOL X продолжались бы. Чтобы выбрать гораздо более сложный язык, ALGOL 68. Сложность этого языка привела к значительным трудностям в создании высокопроизводительных компиляторов. И он не был широко использован в промышленности. Это оставляло простор для новых языков.

Паскаль

Паскаль находился под влиянием усилий ALGOL W. С явными целями создания языка. Который был бы эффективен как в компиляторе. Так и во время выполнения. Позволяя разрабатывать хорошо структурированные программы и будучи полезным для обучения студентов структурированному программированию

.

Одним из первых успехов для языка было введение UCSD Pascal, версии. Которая работала на пользовательской операционной системе, которая могла быть портирована на разные платформы. Ключевой платформой стала Apple II, где она получила широкое распространение. Это привело к тому . Что Pascal стал основным языком высокого уровня. Используемым для разработки в Apple Lisa, а затем и в Macintosh. Части оригинальной операционной системы Macintosh были вручную переведены на язык ассемблера Motorola 68000 из исходного кода Pascal[5].]

Система верстки TeX Дональда Э. Кнута была написана в WEB, оригинальной грамотной системе программирования. Основанной на

DEC PDP-10 Pascal. Успешные коммерческие приложения. Такие как Adobe Photoshop[6], были написаны на Macintosh Programmer’s Workshop Pascal. В то время как такие приложения. Как Total Commander, Skype и Macromedia Captivate. Были написаны на Delphi (Object Pascal). Apollo Computer использовала Pascal в качестве языка системного программирования для своих операционных систем. Начиная с 1980 года.

Варианты Pascal также использовались для всего-от исследовательских проектов до компьютерных игр и встроенных систем. Существуют более новые компиляторы Pascal. Которые широко используются.

[7]

Объектный Паскаль

Во время работы над Lisa Ларри Теслер начал переписываться с Виртом по поводу идеи добавления объектно-ориентированных расширений к языку. Это привело первоначально к Clascal, введенному в 1983 году. Когда программа Lisa исчезла и была заменена Macintosh. Была создана еще одна версия. Названная Object Pascal. Он был представлен на Mac в 1985 году как часть платформы приложенийMacApp и стал основным языком разработки Apple в начале 1990-х годов.

Расширения Object Pascal были добавлены в

Turbo Pascal с выпуском версии 5.5 в 1989 году.[8] На протяжении многих лет Object Pascal стал основой системы Delphi для Microsoft Windows, которая до сих пор используется для разработки приложений Windows и может кросс-компилировать код в другие системы. Free Pascal-это кросс-платформенная альтернатива с открытым исходным кодом и собственной графической IDE под названием Lazarus.

Ранние компиляторы Паскаля

Первый компилятор Pascal был разработан в Цюрихе для семейства мэйнфреймов серии CDC 6000. Никлаус Вирт сообщает. Что первая попытка реализовать его в FORTRAN 66 в 1969 году была неудачной из-за неадекватности FORTRAN 66 для выражения сложных структур данных.

Вторая попытка была реализована на C-подобном языке (Гребешок Макса Энгели). А затем переведена вручную (Р. Шильдом) на сам Pascal для привязки ботинок.[9] Он был введен в эксплуатацию к середине 1970 года. Многие компиляторы Pascal с тех пор были аналогично самохостинг, то есть компилятор сам написан на Паскале. И компилятор обычно способен перекомпилировать себя. Когда новые функции добавляются в язык или когда компилятор должен быть перенесен в новую среду. Компилятор GNU Pascal является одним заметным исключением. Будучи написанным на языке C.

Первый успешный перенос компилятора CDC Pascal на другой мэйнфрейм был завершен Уэлшем и Куинном в Королевском университете Белфаста (QUB) в 1972 году. Целью была компания International Computers Limited (ICL) серии 1900. Этот компилятор. В свою очередь. Был родителем компилятора Pascal для миникомпьютера Multum Information Computer Systems (ICS). Порт Multum был разработан – с целью использования Pascal в качестве языка системного программирования – Финдли, Капплсом. Кавурасом и Дэвисом. Работающими на кафедре вычислительной техники Университета Глазго. Считается, что Multum Pascal. Который был завершен летом 1973 года, возможно. Был первой 16-битной реализацией.

Совершенно новый компилятор был завершен Welsh et al. в ГУБ в 1977 году. Он предлагал диагностическую функцию исходного языка (включающую профилирование. Трассировку и форматированные посмертные дампы с учетом типа) . Которая была реализована Финдли и Уоттом в Университете Глазго. Эта реализация была перенесена в 1980 году в серию ICL 2900 командой. Базирующейся в Саутгемптонском университете и Университете Глазго. Стандартная реализация модели Pascal также была основана на этом компиляторе. Адаптированном валлийским и Хэем из Манчестерского университета в 1984 году. Чтобы тщательно проверить соответствие стандарту BSI 6192/ISO 7185 и сгенерировать код для портативной абстрактной машины.

Первый компилятор Pascal, написанный в Северной Америке. Был сконструирован в Университете Иллинойса под руководством Дональда Б. Джиллиса для PDP-11 и сгенерировал собственный машинный код.

Система Pascal-P

Для быстрого распространения языка в Цюрихе был создан набор для переноса компилятора. Который включал компилятор. Генерирующий так называемый p-код для виртуальной стековой машины. То есть код. Который поддается достаточно эффективной интерпретации. А также интерпретатор этого кода – Pascal-P система. Компиляторы P-системы были названы Pascal-P1, Pascal-P2, Pascal-P3 и Pascal-P4. Паскаль-П1 был первой версией. А Паскаль-П4-последней из Цюриха. Версия. Названная Pascal-P1, была придумана постфактум для многих различных источников Pascal-P. Которые существовали. Компилятор был переработан для повышения переносимости и выпущен как Pascal-P2. Позже этот код был усовершенствован, чтобы стать Pascal-P3, с промежуточным кодом, обратно совместимым с Pascal-P2, и Pascal-P4, который не был обратно совместим.

Компилятор-интерпретатор Pascal–P4 все еще может быть запущен и скомпилирован в системах. Совместимых с оригинальным Pascal. Однако он принимает только подмножество языка Паскаль.

Pascal-P5, созданный за пределами Цюрихской группы. Принимает полный язык Pascal и включает совместимость с ISO 9185.

UCSD Pascal ответвлялся от Pascal-P2, где Кеннет Боулз использовал его для создания интерпретирующей UCSD p-системы. Это была одна из трех операционных систем. Доступных на момент запуска оригинального персонального компьютера IBM.[10] UCSD Pascal использовал промежуточный код. Основанный на байтовых значениях. Иим образом. Был одним из самых ранних компиляторов байт-кода . Pascal-P1 через Pascal-P4 не было. А скорее основывалось на CDC 6600 60-битной длине слова.

Компилятор, основанный на компиляторе Pascal-P5 . Который создавал собственные двоичные объектные файлы, был выпущен для мэйнфрейма IBM System/370 Австралийской комиссией по атомной энергии; он был назван компилятором AAEC Pascal 8000 по аббревиатуре названия комиссии.[11]

Объект Pascal и Turbo Pascal

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

В 1980-х годах Андерс Хейльсберг написал компилятор Blue Label Pascal для Nascom-2. Реимплементация этого компилятора для IBM PC продавалась под названиями Compas Pascal и PolyPascal. Прежде чем он был приобретен Borland и переименован в Turbo Pascal.

Turbo Pascal стал чрезвычайно популярным благодаря агрессивной ценовой стратегии. Одной из первых полноэкранных IDE и очень быстрому времени выполнения (всего несколько секунд на компиляцию. Связывание и запуск). Он был написан и высоко оптимизирован полностью на языке ассемблера, что делало его меньше и быстрее. Чем большинство конкурентов.

В 1986 году Андерс портировал Turbo Pascal на Macintosh и включил расширения Apple Object Pascal в Turbo Pascal. Затем эти расширения были добавлены обратно в компьютерную версию Turbo Pascal для версии 5.5. В то же время Microsoft также реализовала компилятор Object Pascal.] Turbo Pascal 5.5 оказал большое влияние на сообщество Pascal. Которое начало концентрироваться в основном на IBM PC в конце 1980-х годов. Многие любители ПК в поисках структурированной замены БАЗОВОМУ пользовались этим продуктом. Его также начали перенимать профессиональные разработчики. Примерно в то же время ряд концепций был импортирован из языка Си, чтобы позволить программистам Pascal напрямую использовать интерфейс прикладного программирования (API) на основе языка Си Microsoft Windows. Эти расширения включали строки с нулевым завершением, арифметикууказателей . Указатели функций, оператор адреса и небезопасныетипы .

Turbo Pascal и другие производные с единичными или модульными структурами являются модульными языками программирования. Однако он не обеспечивает концепцию вложенного модуля или квалифицированный импорт и экспорт конкретных символов.

Другие варианты

Super Pascal-это вариант. Который добавляет нечисловые метки. Оператор return и выражения в качестве имен типов.

TMT Pascal был первым Borland-совместимым компилятором для 32-разрядных операционных систем DOS protected mode, OS/2и Win32. Язык TMT Pascal был первым. Который разрешил перегрузку функций и операторов.

Университеты Висконсин-Мэдисон, Цюрих, Карлсруэи Вупперталь разработали Pascal-SC[14][15] и Pascal-XSC[16][17][18] (Расширения для научных вычислений) компиляторы. Предназначенные для программирования численных вычислений. Разработка для Pascal-SC началась в 1978 году с поддержкой ISO 7185 Pascal level 0, но поддержка уровня 2 была добавлена на более позднем этапе.[19] Pascal-SC первоначально предназначался для процессора Z80, но позже был переписан для DOS (x86) и 68000. Pascal-XSC в разное время был портирован на Unix (Linux, SunOS, HP-UX, AIX) и Microsoft/IBM (DOS с EMX, OS/2, Windows) операционные системы. Он работает. Генерируя промежуточный исходный код C. Который затем компилируется в собственный исполняемый файл. Некоторые расширения языка Pascal-SC были приняты GNU Pascal.

Pascal Sol был разработан примерно в 1983 году французской командой для реализации Unix-подобной системы под названием Sol. Это был стандартный Pascal level-1 (с параметризованными границами массива). Но определение допускало альтернативные ключевые слова и предопределенные идентификаторы на французском языке. А язык включал несколько расширений для облегчения системного программирования (например. Эквивалент lseek).[20] Позже команда Sol перешла к проекту ChorusOS для разработки распределенной операционной системы.]

IP Pascal был реализацией языка программирования Pascal с использованием Micropolis DOS, но быстро был перенесен на CP/M-80, работающий на Z80. Он был перенесен в типы машин 80386 в 1994 году и существует сегодня как реализации Windows/XP и Linux. В 2008 году система была выведена на новый уровень. И получившийся язык получил название калькулятора Паскаля). Он включает в себя объекты. Элементы управления пространствами имен, динамические массивыи многие другие расширения и . Как правило. Обладает той же функциональностью и защитой типов, что и C# Это единственная такая реализация. Которая также совместима с оригинальной реализацией Pascal. Которая стандартизирована как ISO 7185.

Языковые конструкции

Pascal в своей первоначальной форме является чисто процедурным языком и включает в себя традиционный массив алголоподобныхуправляющих структур с зарезервированными словами. Такими какif,then,else,while,for, иcase, начиная с одного оператора или блока abeginendоператоров. Pascal также имеет конструкции структурирования данных , не включенные в исходные типы ALGOL 60, такие как записи, варианты , указатели, перечисления, наборы и указатели процедур. Такие конструкции были частично унаследованы или вдохновлены Simula 67, ALGOL 68, собственным ALGOL W Никлауса Вирта и предложениями C. A. R. Hoare.

Программы Pascal начинаются с program ключевого слова со списком внешних файловых дескрипторов в качестве параметров[22] (не требуется в Turbo Pascal и т. Д.); Затем следует основной блок, заключенный в квадратные скобки beginendключевыми словами and. Точки с запятой разделяют операторы, а точка с запятой (точка) завершает всю программу (или единицу). Буквенный регистр игнорируется в источнике Pascal.

Вот пример исходного кода. Используемого для очень простой программы :

program HelloWorld(output); begin Write('Hello. World!') {No ";" требуется после последнего оператора блока -  добавление одного добавляет в программу "null-оператор". Который игнорируется компилятором.} end. 

Типы данных

Тип в Pascal и в некоторых других популярных языках программирования определяет переменную таким образом. Что он определяет диапазон значений. Которые переменная способна хранить. А также определяет набор операций. Которые допустимы для выполнения над переменными этого типа. Предопределенные типы:

Тип данных Тип значений. Которые переменная способна хранить
целое число целочисленные (целые) числа
реальный числа с плавающей запятой
логический значения True или False
обуглить один символ из упорядоченного набора символов
набор эквивалентно упакованному массиву булевых значений
массив счетная группа любого из предыдущих типов данных
строка последовательность или

Диапазон значений. Разрешенных для каждого из них (кроме логических). Определяется реализацией. Для некоторых преобразований данных предусмотрены функции. Для преобразования realв integerдоступны следующие функции: round(которые округляются до целого числа с помощью округления банкира) и trunc(округляются до нуля).

Программист имеет свободу определять другие часто используемые типы данных (например, байт. Строка и т. Д.) В терминах предопределенных типов. Используя, например. Средство объявления типов Pascal

введите byte = 0..255; signed_byte = -128..127; string = упакованный массив[1..255] из char; 

(Часто используемые типы. Такие как byte и string. Уже определены во многих реализациях.)

Типы поддиапазонов

Поддиапазоны любого порядкового типа данных (любого простого типа. Кроме реального) также могут быть сделаны:

var x : 1..10; y : 'a'..; 

Типы наборов

В отличие от других языков программирования того времени. Pascal поддерживает тип набора:[23]

var Set1 : набор из 1..10; Set2 : набор  ..; 

Множество-это фундаментальное понятие для современной математики. И они могут быть использованы во многих алгоритмах. Такая функция полезна и может быть быстрее. Чем эквивалентная конструкция в языке. Который не поддерживает наборы. Например, для многих компиляторов Pascal:

если я в [5..10] затем ... 

выполняется быстрее, чем:

если (i >> 4) и (i  11) , то ... 

Наборы несмежных значений могут быть особенно полезны как с точки зрения производительности. Так и с точки зрения читабельности:

если я в [0..3, 7, 9, 12..15] тогда ... 

Для этих примеров. Которые включают наборы над небольшими доменами. Улучшенная производительность обычно достигается компилятором. Представляющим переменные набора в виде битовых векторов. Затем операторы набора могут быть эффективно реализованы в виде операций побитового машинного кода.

Типы соединений

В Паскале есть два способа создания союзов. Один из них — стандартный путь через вариантную запись. Второе — это нестандартное средство объявления переменной как абсолютной. То есть она помещается в ту же ячейку памяти. Что и другая переменная. Или по абсолютному адресу. В то время как все компиляторы Pascal поддерживают записи вариантов. Только некоторые поддерживают абсолютные переменные.

Для целей этого примера ниже приведены все целочисленные типы: байт-8 бит. Слово-16 бит. А целое число-32 бита.

В следующем примере показана нестандартная абсолютная форма:

VAR A: Целоечисло ; B: Массив[1..4]   абсолютного байта A; C: Целочисленного абсолютного 0; 

В первом примере каждый из элементов массива B сопоставляется с одним из конкретных байтов переменной A. Во втором примере переменная C присваивается точному адресу машины 0.

В следующем примере запись имеет варианты. Некоторые из которых имеют то же расположение. Что и другие:

Тип TSystemTime = запишите год, месяц, день недели, День : слово; час, минута, секунда, миллисекунда: слово; конец ; TGender = (мужчина, женщина, TransFemale, TransMale, другие); TPerson = записать имя,фамилия: строка; Дата рождения: TSystemTime; на иждивении: целое число; HourlyRate: валюта; чехол пол:TGender из женщин, TransMale: (isPregnant: логические; DateDue:TSystemTime); мужчина, TransFemale: (HasPartner, isPartnerExpecting:логические; PartnerDate: TSystemTime); конец; 

В приведенном выше примере запись Tperson имеет поле тега Пол, и тег делит людей на два класса: женский или транс-мужской (человек с гендерной идентичностью мужчины. Но родился с женским телом) и мужской или трансфемальный (человек с гендерной идентичностью женщины. Но родился в мужском теле). В этой записи, hasPartner и isPregnant занимают одно и то же место. В то время как Дата и время isPartnerExpecting разделяют одно и то же местоположение. В то время как запись имеет поле тега Пол, компилятор не навязывает доступ в соответствии со значением тега: можно получить доступ к любому из полей варианта независимо от значения тега, например. Если пол другое-это значение поля тега Пол, любое из полей варианта все еще может быть доступно.

Объявления типов

Типы могут быть определены из других типов с помощью объявлений типов:

тип x = целоечисло ; y = x; ... 

Кроме того, сложные типы могут быть построены из простых типов:

введите a = array[1..10] of integer; b = запись x : integer; y : char  end; c = файл  a; 

Тип файла

Как показано в приведенном выше примере, файлы Pascal представляют собой последовательности компонентов. Каждый файл имеет буферную переменную. Которая обозначается символом f^. Процедуры get (для чтения) и put (для записи) перемещают буферную переменную в следующий элемент. Read вводится таким образом. Что read(f, x) совпадает с x := f^; get(f);. Write вводится таким образом. Что write(f, x) совпадает с f^ := x; put(f); Типаж text предопределен как файл char. Хотя буферную переменную можно было использовать для проверки следующего символа (проверка на цифру перед чтением целого числа). Это приводило к серьезным проблемам с интерактивными программами в ранних реализациях. Но позже было решено с помощью концепции

В Jensen & Wirth Pascal строки представляются в виде упакованных массивов символов; поэтому они имеют фиксированную длину и обычно заполняются пробелами.

Типы указателей

Pascal поддерживает использование указателей:

тип pNode = ^Node; Node = запись a : integer; b : char; c : pNode end; var NodePtr : pNode; IntPtr : ^integer; 

Здесь переменная NodePtr является указателем на узел типа данных, запись. Указатели можно использовать до того. Как они будут объявлены. Это прямое объявление, исключение из правила. Что вещи должны быть объявлены. Прежде чем они будут использованы.

Чтобы создать новую запись и присвоить значение 10 и символ A полям a и b в записи. А также инициализировать указатель c нулевым указателем («NIL» в Паскале). Операторы будут:

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

Это также можно сделать withс помощью следующего оператора:

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

Внутри области действия оператора with a и b ссылаются на подполя указателя записи NodePtr, а не на узел записи или тип указателя pNode.

Связанные списки, стеки и очереди могут быть созданы путем включения в запись поля типа указателя (c).

В отличие от многих языков. Которые содержат указатели. Pascal позволяет указателям ссылаться только на динамически созданные переменные. Которые являются анонимными. И не позволяет им ссылаться на стандартные статические или локальные переменные. Указатели также должны иметь связанный тип. И указатель на один тип несовместим с указателем на другой тип (например. Указатель на символ не совместим с указателем на целое число). Это помогает устранить проблемы безопасности типов. Присущие другим реализациям указателей. Особенно тем. Которые используются для PL/I или C. Это также устраняет некоторые риски. Вызванные болтающимися указателями но возможность динамически ссылаться освободить пространство с помощью распоряжаться функцию (которая имеет тот же эффект. Как бесплатная библиотека функцию нашли в С) означает. Что риск висячие указатели не был полностью ликвидирован[24] , как это было в таких языках. Как Java и C#. Которые обеспечивают автоматическую сборку мусора (но не полностью исключить. Связанных с проблемой утечки памяти).

Некоторые из этих ограничений могут быть сняты в новых диалектах.

Структуры управления

Pascal-это структурированный язык программирования. Означающий . Что поток управления структурирован в стандартные операторы, обычно без команд goto

в то время как в  б сделать WriteLn('ожидание'); если А > Б , то WriteLn('выполнено условие')  еще WriteLn('условие не выполнено'); Для я := 1 до 10 делаем  WriteLn('итерация: ', я); повторить с := а + 1 до А = 10; случай я в 0 : писать('ноль'); 1 : писать('один'); 2 : писать('два'); 3,4,5,6,7,8,9,10: писать('?') конец; 

Процедуры и функции

Паскаль структурирует программы в процедуры и функции. Как правило. Процедура используется для ее побочных эффектов. В то время как функция используется для ее возвращаемого значения.

программа печати; ВАР я : целое число; процедура PrintAnInteger(от J : целое число); начать ... конец; функция тройной(константный х: целое число): целое число; начать тройной := х * 3; конец; начать  ... PrintAnInteger(я); PrintAnInteger(трехместный(я)); конец. 

Процедуры и функции могут быть вложены на любую глубину. И конструкция

По умолчанию параметры передаются по значению. Если ‘var’ предшествует имени параметра. Он передается по ссылке.

Каждая процедура или функция может иметь свои собственные объявления меток goto. Констант, типов. Переменных и других процедур и функций. Которые все должны быть в этом порядке. Это требование к порядку изначально было предназначено для обеспечения эффективной однопроходной компиляции. Однако в некоторых диалектах (таких как Delphi) строгое требование упорядочения разделов декларации было смягчено.

Точки с запятой как разделители операторов

Pascal перенял многие синтаксические особенности языка ALGOL, включая использование точки с запятой в качестве разделителя операторов. Это в отличие от других языков. Таких как PL/I и C, которые используют точку с запятой в качестве терминатора оператора. Точка с запятой не требуется перед endключевым словом объявления типа записи. Блока или оператора case; перед untilключевым словом оператора repeat; и перед elseключевым словом оператора if.

Наличие дополнительной точки с запятой не допускалось в ранних версиях Pascal. Однако добавление ALGOL-подобных пустых утверждений в Пересмотренном отчете 1973 года и более поздние изменения языка в ISO 7185:1983 теперь допускают необязательные точки с запятой в большинстве этих случаев. Точка с запятой по-прежнему не допускается непосредственно перед elseключевым словом в операторе if. Поскольку elseоно следует за одним оператором. А не за последовательностью операторов. В случае вложенных ifs точка с запятой не может быть использована. Чтобы избежать болтающегося else проблема (где внутреннее if не имеет else. Но внешнее if имеет). Предполагая завершение вложенного if точкой с запятой – это вместо этого завершает оба предложения if. Вместо beginэтого необходимо использовать явный …end блок.[25]

Компиляторы и интерпретаторы

Несколько компиляторов и интерпретаторов Pascal доступны для общего использования:

  • Delphi-это флагманский продукт Embarcadero (ранее Borland/CodeGear) для быстрой разработки приложений (RAD). Для создания приложений для Windows, macOS. IOS и Android он использует язык Object Pascal (Борланд назвал его Delphi). Происходящий от языка Pascal . Поддержка .NET, существовавшая с D8 по D2005, D2006 и D2007, была прекращена и заменена новым языком (Prism. Который переименован в Oxygene, см. В последние годы была добавлена поддержка Unicode и дженериков (D2009, D2010, Delphi XE).
  • Free Pascal-это кросс-платформенный компилятор. Написанный на Object Pascal (и являющийся самостоятельным хостингом). Он нацелен на предоставление удобного и мощного компилятора. Способного как компилировать устаревшие приложения. Так и быть средством разработки новых. Он распространяется под лицензией GNU General Public License (GNU GPL). В то время как пакеты и библиотеки времени выполнения выпускаются под модифицированной лицензией GNU Lesser General Public License (GNU LGPL). В дополнение к режимам совместимости Turbo Pascal, Delphi и Mac Pascal он имеет свои собственные процедурные и объектно-ориентированные синтаксические режимы с поддержкой расширенных функций. Таких как перегрузка операторов. Он поддерживает множество платформ и операционных систем. Текущие версии также имеют режим ISO.
  • Modern Pascal-это кросс-платформенный интерпретатор и компилятор p-кода. Написанный на свободном языке Pascal. Он направлен на предоставление альтернативных решений для PHP и Node.js, используя либо стандартный диалект ISO Pascal. Либо гибрид. Поддерживающий операторы JavaScript/C. Из CLI это полезно как бесплатный интерпретатор Pascal.
  • Turbo51-это бесплатный компилятор Pascal для семейства микроконтроллеров Intel 8051 с синтаксисом Turbo Pascal 7.
  • Oxygene (ранее называвшийся Chrome) — это объектный компилятор Pascal для платформ .NET и Mono. Он был создан и продается компанией RemObjects Software. А также некоторое время продавался компанией Embarcadero в качестве бэкэнд-компилятора Prism.
  • Kylix был потомком Delphi, с поддержкой операционной системы Linux и улучшенной библиотекой объектов. Он больше не поддерживается. Компилятор и IDE теперь доступны для некоммерческого использования.
  • GNU Pascal Compiler (GPC) — это компилятор Pascal из коллекции GNU Compiler Collection (GCC). Компилятор написан на языке Си. Библиотека времени выполнения в основном на языке Паскаль. Распространяемый под лицензией GNU General Public License, он работает на многих платформах и операционных системах. Он поддерживает стандартные языки ANSI/ISO и имеет частичную поддержку диалекта Turbo Pascal. Одним из наиболее болезненных упущений является отсутствие 100% Turbo Pascal-совместимого (короткого)строкового типа. Поддержка Borland Delphi и других языковых вариантов довольно ограничена. Однако существует некоторая поддержка Mac-pascal.
  • Virtual Pascal был создан Виталием Мирьяновым в 1995 году как нативный компилятор OS/2, совместимый с синтаксисом Borland Pascal. Затем он был коммерчески разработан компанией FPrint, добавив поддержку Win32, а в 2000 году стал бесплатным. Сегодня он может компилироваться для Win32, OS/2 и Linux и в основном совместим с Borland Pascal и Delphi. Разработка была отменена 4 апреля 2005 года.
  • Компилятор P4, основа для многих последующих компиляторов. Реализованных на языке Pascal. Он реализует подмножество полного Паскаля.
  • Компилятор P5-это адаптация P4 по стандарту ISO 7185 (full Pascal).
  • Smart Mobile Studio-это компилятор Pascal to HTML5/Javascript
  • Turbo Pascal был доминирующим компилятором Pascal для ПК в 1980-х и начале 1990-х годов. Популярным как из-за его мощных расширений. Так и из-за чрезвычайно короткого времени компиляции. Turbo Pascal был компактно написан и мог компилировать. Запускать и отлаживать все из памяти без доступа к диску. Медленные дисководы были обычным делом для программистов в то время. Что еще больше увеличивало преимущество Turbo Pascal в скорости. В настоящее время более старые версии Turbo Pascal (до 5.5) доступны для бесплатной загрузки с сайта Borland.
  • IP Pascal реализует язык калькулятора Паскаля), который является очень расширенным Паскалем. Совместимым с оригинальным Паскалем в соответствии с ISO 7185. Он включает в себя модули с управлением пространством имен, включая параллельные модули задач с семафорами, объекты, динамические массивы любых измерений. Которые выделяются во время выполнения, перегрузки. Переопределения и многие другие расширения. IP Pascal имеет встроенную библиотеку переносимости. Которая специально адаптирована к языку Pascal. Например, стандартное приложение для вывода текста из оригинального Pascal 1970-х годов можно перекомпилировать для работы в окне и даже добавить графические конструкции.
  • Pascal-XT был создан компанией Siemens для своих мэйнфреймовых операционных систем BS2000 и SINIX.
  • PocketStudio-это компилятор подмножества Pascal и инструмент RAD для процессоров Palm OS и MC68xxx с некоторыми собственными расширениями для облегчения взаимодействия с API Palm OS. Он напоминает Delphi и Lazarus с визуальным дизайнером форм. Инспектором объектов и редактором исходного кода.
  • MIDletPascal – Это компилятор Pascal и IDE. Который генерирует небольшой и быстрый байт-код Java. Специально разработанный для создания программного обеспечения для мобильных телефонов.
  • Vector Pascal-это язык для наборов команд SIMD. Таких как MMX и AMD 3d Now. Поддерживающий все процессоры Intel и AMD. А также эмоциональный движок Sony PlayStation 2.
  • Morfik Pascal позволяет разрабатывать веб-приложения. Полностью написанные на объектном Паскале (как на стороне сервера. Так и на стороне браузера).
  • WDSibyl – Визуальная среда разработки и компилятор Pascal для Win32 и OS/2.
  • PP Compiler-компилятор для Palm OS. Работающий непосредственно на карманном компьютере.
  • Компилятор CDC 6000 Pascal является исходным кодом для первого (CDC 6000) компилятора Pascal.
  • Паскаль-С[26]
  • AmigaPascal-это бесплатный компилятор Pascal для компьютера Amiga.
  • VSI Pascal (первоначально VAX Pascal) — это компилятор. Совместимый со стандартом ISO Pascal для операционной системы OpenVMS.
  • Stony Brook Pascal+ был 16-битным (позже 32-битным) оптимизирующим компилятором для DOS и OS/2, продававшимся как прямая замена Turbo Pascal. Но производившим код. Который выполнялся по крайней мере в два раза быстрее.

ИДЫ

Библиотеки

  • Библиотека WOL для создания графических приложений с помощью бесплатного компилятора Pascal.

ISO/IEC 7185:1990 Pascal

В 1983 году язык был стандартизирован в международном стандарте IEC/ISO 7185[27] и нескольких местных страновых стандартах. Включая американский ANSI/IEEE770X3.97-1983 и ISO 7185:1983. Эти два стандарта отличались только тем. Что стандарт ISO включал расширение В 1989 году ISO 7185 был пересмотрен (ISO 7185:1990). Чтобы исправить различные ошибки и двусмысленности. Обнаруженные в оригинальном документе.

ISO 7185 был заявлен как уточнение языка Вирта 1974 года. Как подробно описано в Руководстве пользователя и отчете [Jensen and Wirth]. Но также был примечателен добавлением Это дополнение было сделано по просьбе К. А. Р. Хоараи с одобрения Никлауса Вирта. Причиной этого было то. Что Хоар хотел создать паскаль-версию библиотеки численных алгоритмов (NAG) , который первоначально был написан на ФОРТРАНЕ. И обнаружил. Что это невозможно сделать без расширения. Которое позволяло бы использовать параметры массива различного размера. Аналогичные соображения мотивировали включение в ИСО 7185 объекта для определения типов параметров процедурных и функциональных параметров.

Например, сам Никлаус Вирт называл язык 1974 года CDC 6000. Этот язык был задокументирован в Отчете Pascal[28], второй части

На больших машинах (мэйнфреймах и миникомпьютерах) Паскаль возник дальше, стандарты. Как правило. Соблюдались. На IBM PCих не было. На компьютерах IBM наибольшее число пользователей имеют стандарты Borland Turbo Pascal и Delphi. Таким образом. Обычно важно понять. Соответствует ли конкретная реализация оригинальному языку Паскаль или его борландскому диалекту.

Версии языка IBM PC стали отличаться с появлением UCSD Pascal. Интерпретируемой реализации. Которая включала в себя несколько расширений языка. А также несколько пропусков и изменений. Многие особенности языка UCSD сохранились и сегодня. В том числе в диалекте Борланда.

ISO/IEC 10206:1990 Extended Pascal

[значок]
Этот раздел нуждается в расширении. Вы можете помочь, добавив к нему. (февраль 2018)

В 1990 году был создан расширенный стандарт Pascal как ISO/IEC 10206,[29] который идентичен по техническому содержанию[30] IEEE/ANSI 770X3.160-1989[31] С 2019 года планируется поддержка расширенного Pascal в компиляторе FreePascal.[32]

Вариации

Цюрихская версия Pascal Никлауса Вирта была выпущена за пределами ETH в двух основных формах: исходный код компилятора CDC 6000 и комплект портирования под названием Pascal-P system. Компилятор Pascal-P упустил несколько особенностей полного языка. Которые не требовались для начальной загрузки компилятора. Например, процедуры и функции, используемые в качестве параметров, неразличимые записи вариантов, упаковка, утилизация. Межпроцедурные goto и другие функции полного компилятора были опущены.

UCSD Pascalпод руководством профессора Кеннета Боулзабыл основан на наборе Pascal-P2 и . Следовательно. Разделял некоторые ограничения языка Pascal-P. UCSD Pascal позже был принят как Apple Pascal и продолжался там в нескольких версиях. Хотя UCSD Pascal фактически расширил подмножество Pascal в наборе Pascal-P. Добавив обратно стандартные конструкции Pascal. Это все еще не была полная стандартная установка Pascal.

В начале 1990-х годов Алан Бернс и Джефф Дэвис разработали Pascal-FC. Расширение Pl/0 (из книги Никлауса Алгоритмы + структуры данных = программыБыло добавлено несколько конструкций для использования Pascal-FC в качестве учебного инструмента для параллельного программирования (например, семафоры. Мониторы, каналы. Удаленный вызов и ресурсы). Чтобы продемонстрировать параллелизм. Выходные данные компилятора (своего рода P-код) могут быть выполнены на виртуальной машине. Эта виртуальная машина не только имитировала нормальную – справедливую – среду. Но и могла имитировать экстремальные условия (несправедливый режим).

Borland-подобные компиляторы Pascal

Turbo Pascal Борланда, написанный Андерсом Хейльсбергом, был написан на ассемблере независимо от UCSD и цюрихских компиляторов. Однако он принял большую часть того же подмножества и расширений. Что и компилятор UCSD. Вероятно, это связано с тем. Что система UCSD была наиболее распространенной системой Pascal. Подходящей для разработки приложений на ограниченных в ресурсах микропроцессорных системах. Доступных в то время.

Термоусадочная версия Turbo Pascal версии 3 и более поздние воплощения. Включая Object Pascal Борланда и Delphi и не-Borland near-compatibles. Стали популярными среди программистов. Включая авторов условно-бесплатных программ. И поэтому библиотека SWAG кода Pascal содержит большое количество кода. Написанного с учетом таких версий. Как Delphi.

Программные продукты (компиляторыи IDE/Rapid Application Development (RAD)) в этой категории:

  • Турбо Паскаль … TURBO.EXETurbo Pascal для Macintosh.
  • Borland Pascal 7 – Профессиональная версия линейки Turbo Pascal. Ориентированная как на DOS. Так и на Windows.
  • Object Pascal – расширение языка Pascal . Которое было разработано в Apple Computer командой под руководством Ларри Теслера в консультации с Никлаусом Виртом, изобретателем Pascal; его функции были добавлены в Turbo Pascal Borland для Macintosh и в 1989 году для Turbo Pascal 5.5 для DOS.
  • Delphi – Object Pascal, по сути. Является его базовым языком.
  • Free Pascal compiler (FPC) – Free Pascal принял де-факто стандартный диалект программистов Pascal. Borland Pascal и. Позже, Delphi. Freepascal также поддерживает оба стандарта ISO.
  • PascalABC.NET – язык программирования нового поколения Pascal. Включающий компилятор и IDE.
  • Borland Kylix-это компилятор и IDE. Ранее продававшиеся компанией Borland. Но позже снятые с производства. Это Linux — версия среды разработки программного обеспечения Borland Delphi и C++Builder.
  • Lazarus – похожий на Kylix по функции. Представляет собой свободную кросс-платформенную визуальную IDE для RAD с использованием компилятора Free Pascal. Который в той или иной степени поддерживает диалекты Object Pascal.
  • Virtual Pascal – VP2/1– это полностью совместимый с Borland Pascal и Borland Delphi 32–битный компилятор Pascal для OS/2 и Windows 32 (с версией Linux [33]
  • Sybil-это Delphi-подобная IDE и компилятор с открытым исходным кодом; реализации включают в себя:
    • WDSibyl[34] для Microsoft Windows и OS/2, коммерческой среды. Совместимой с Borland Pascal. Выпущенной компанией Speedsoft. Которая позже была разработана в Delphi-подобную среду быстрой разработки приложений (RAD) под названием Sybil. А затем с открытым исходным кодом под GPL. Когда эта компания закрылась;
    • Открыть Сибил. Которая представляет собой постоянный проект, с открытым исходным кодом инструмент для OS/2 и ECS. Который изначально был основан на Speedsoft по WDsybl Сивилла портативные классы компонентов (СК) и Сивилла визуальное средство разработки (SVDE) источников. Но теперь ее ядром является система IBM объектной модели (сом). WPS и OpenDoc.[35]

Список связанных стандартов

  • ISO 8651-2:1988 Системы обработки информации – Компьютерная графика – Привязки языка графической системы ядра (GKS) – Часть 2: Pascal

Паскаль вызвал широкий спектр откликов в компьютерном сообществе. Как критических. Так и комплиментарных.

Ранняя критика

Несмотря на большую популярность в 1980-х и начале 1990-х годов. Реализации Pascal. Которые тесно следовали первоначальному определению языка Вирта. Широко критиковались как непригодные для использования вне обучения. Брайан Керниган, популяризировавший язык Си, изложил свою наиболее заметную критику Паскаля еще в 1981 году в статье [36] Самая серьезная проблема. Описанная им. Заключалась в том. Что размеры массивов и длина строк были частью типа. Поэтому было невозможно написать функцию. Которая принимала бы массивы переменной длины или даже строки в качестве параметров. Это делало невозможным написание, например. Сортировочной библиотеки. Керниган также критиковал непредсказуемый порядок вычисления булевых выражений. Плохую поддержку библиотек и отсутствие статических переменных, и поднял ряд более мелких вопросов. Кроме того, он заявил. Что язык не предоставляет никаких простых конструкций. Чтобы Более общие жалобы от других источников[24][37] отмечено. Что объем заявления не были четко определены на языке оригинала, четкости. Которая иногда имеет серьезные последствия при использовании форвардных деклараций определить типы указателей. Или при записи объявлений привело к взаимной рекурсии, или когда идентификатор может или не может быть использован в перечислении списка. Другая трудность заключалась в том, что, как ALGOL 60, язык не позволял процедурам или функциям. Передаваемым в качестве параметров. Предопределять ожидаемый тип их параметров.

Несмотря на первоначальную критику. Паскаль продолжал развиваться. И большинство пунктов Кернигана не относятся к версиям языка. Которые были улучшены. Чтобы быть пригодными для разработки коммерческих продуктов. Таких как Turbo Pascal Борланда Как и предсказывал Керниган в своей статье. Большинство расширений для устранения этих проблем были несовместимы от компилятора к компилятору. Однако с начала 1990-х годов большинство разновидностей, похоже. Сгущаются в две категории: ISO и Borland-like. Расширенный Паскаль обращается ко многим из этих ранних критических замечаний. Он поддерживает строки переменной длины. Инициализацию переменных. Отдельную компиляцию. Булевы операторы короткого замыкания и предложения default (otherwise) для операторов case.[38]

  1. ^
  2. ^ TechMetrix Research (1999). (PDF). Отчет Серверов Приложений Java. Архивирован из оригинала (PDF) на 2010-12-29 гг. Проект шел под названием UCSD Pascal, которая позволяет генерировать интерпретирующий код
  3. ^ . Архивирован с оригинала 16 июля 2015года . Проверено 11 августа 2015года .
  4. ^ Essential Pascal Archived 2017-04-18 at the Wayback Machine by Marco Cantù
  5. ^ Герцфельд, Эндиfolklore.org Архив 2015-11-18 в the Wayback Machine: Macintosh Stories. Проверено 2012-03-06.
  6. ^ https://www.computerhistory.org/atchm/adobe-photoshop-source-code/ Архивировано 2014-05-07 на Wayback Machine, Исходный код Adobe Photoshop
  7. ^ tiobe.com Архивирован 2012-03-15 в Wayback Machine, Индекс сообщества программирования за январь 2011 года.
  8. ^ .
  9. ^ Компьютеры и вычислительная техника. Личная перспектива. Архивировано 2017-05-10 в the Wayback Machine Никлаусом Виртом
  10. ^ cbi.umn.edu, [постоянная мертвая ссылка], p15, Charles Babbage Institute, 2004
  11. ^ Австралийское исследовательское учреждение Комиссии по атомной энергии. Лукас Хайтс. Отчет Отделения ядерной науки и техники. Отдел исследований (PDF). Международное агентство по атомной энергии (IEAE) (Доклад). 1977. с. 22.
  12. ^ Джон Юделл. Крах объектно-ориентированных паскалей, БАЙТ. Июль 1989 г.
  13. ^ М. И. Трофимов. Конец Паскаля?, БАЙТ. Март 1990 г., с. 36.
  14. ^ Rall, L. B. (1987). 14: 53–69. doi:10.1016/0898-1221(87)90181-7.
  15. ^ ПИ (1986-08-29). [Cadmus now comes with Kulisch arithmetic — University Karlsruhe delivers Pascal compiler to Munich]. Computerwoche (по-немецки). Мюнхен – Карлсруэ, Германия: IDG Business Media GmbH. Архивирован с оригинала на 2016-05-30. Извлечено 2016-05-30.
  16. ^ . Архивирован с оригинала 2014-01-05.
  17. ^ . Архивирован с оригинала 1 ноября 2015года . Проверено 11 августа 2015года .
  18. ^ . Архивирован с оригинала 6 ноября 2015года . Проверено 11 августа 2015года .
  19. ^ Bamberger, Lothar; Davenport, James H.; Fischer, Hans-Christoph; Kok, Jan; Schumacher, Günter; Ullrich, Christian; Wallis, Peter J. L.; Winter, Dik T.; Wolff von Gudenberg. Jürgen (1990). Уоллис, Питер Дж. Л. (ред.). Совершенствование программирования с плавающей запятой (1-е изд.). Бат, Великобритания: John Wiley & Sons Ltd. ISBN 0-471-92437-7.
  20. ^ Michel Gien,
  21. ^ cs.berkeley.edu Архив 2015-02-07 на машине Wayback
  22. ^ Pascal ISO 7185:1990 Архивирован 2012-06-17 на Wayback Machine 6.10
  23. ^ Манделл, Стивен Л. (1987). Программирование На Паскале Сегодня. Западная издательская компания. ISBN 978-0-314-33935-5.
  24. ^ b J. Welsh, W. J. Sneeringer и C. A. R. Hoare, Software Practice and Experience 7, pp. 685-696 (1977)
  25. ^ Pascal, Nell Dale and Chip Weems, p. 160-161 Archived 2017-03-18 at the Wayback Machine
  26. ^
  27. ^ ISO/IEC 7185:1990 Pascal (PDF). Архивирован из оригинала (PDF) 27 января 2016года . Проверено 16 сентября 2014года .
  28. ^ Wirth, Niklaus (July 1973). Язык программирования Pascal (Пересмотренный отчет). ETH Zürich. doi:10.3929/ethz-a-000814158.
  29. ^ Расширенный паскаль: ISO/IEC 10206:1990. Архивировано с оригинала на 2016-03-27. Проверено 16 сентября 2014года .
  30. ^ . Архивирован с оригинала 2014-07-14. Проверено 16 сентября 2014года .
  31. ^ 770X3.160-1989 — Стандарт IEEE/ANSI для языка программирования Extended Pascal. 1990. doi:10.1109/IEEESTD.1990.101061. ISBN 978-0-7381-4247-0.
  32. ^ http://wiki.freepascal.org/Extended_Pascal
  33. ^ . Архивирован с оригинала 30 августа 2011года . Извлечено 3 апреля 2016года .
  34. ^ Вольфганг (15 октября 2020 года). . WDSibyl.org. Архивирован с оригинала 2020-02-12. Проверено 2020-04-20.
  35. ^ . Архивирован с оригинала 4 марта 2016года . Извлечено 3 апреля 2016года .
  36. Брайан У. Керниган (1981). . Архив 2009-04-28 на машине Wayback
  37. ^ O. Lecarme, P. Desjardins, Acta Informatica 4, pp. 231-243 (1975).
  38. ^ . Архивирован с оригинала на 2015-10-18 годы.

Дальнейшее чтение

В Wikibooks есть книга на тему: Pascal
  • Никлаус Вирт: Язык Программирования Паскаль. 35-63, Acta Informatica. Том 1, 1971.
  • С. А. Р. Хоар: В O.-J. Dahl, E. W. Dijkstra and C. A. R. Hoare, editors, Structured Programming, pages 83-174. Академическая пресса, 1972.
  • C. A. R. Hoare. Niklaus Wirth: Аксиоматическое определение языка программирования Pascal. 335-355, Acta Informatica. Том 2, 1973.
  • Kathleen Jensen and Niklaus Wirth: Pascal – Руководство пользователя и отчет. Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 и ISBN 3-540-97649-3.
  • Никлаус Вирт: Алгоритмы + Структуры данных = Программы. Прентис-Холл, 1975, ISBN 0-13-022418-9.
  • Никлаус Вирт: Оценка языка программирования Паскаль. 23-30 ACM SIGPLAN Notices Том 10, Выпуск 6, июнь 1975 г.
  • N. Wirth, and A. I. Wasserman, ed: Programming Language Design. IEEE Computer Society Press, 1980
  • Д. У. Баррон (ред.): Паскаль – Язык и его реализация. Джон Уайли 1981, ISBN 0-471-27835-1
  • Питер Грогоно: Программирование на Паскале, Пересмотренное издание. Аддисон-Уэсли, 1980
  • Ричард С. Форсайт: Паскаль в работе и игре, Чепмен и Холл, 1982
  • Н. Вирт, М. Брой. Эд и Э. Денерт, эд: Паскаль и его преемники в пионерах программного обеспечения: Вклад в разработку программного обеспечения. Springer-Verlag, 2002, ISBN 3-540-43081-4
  • Н. Вирт: Воспоминания о развитии Pascal. ACM SIGPLAN Notices, Том 28, № 3, март 1993 г.