На чем написан паскаль
50 лет Паскаля
В начале 1960-х в мире доминировали языки Фортран (Джон Бэкус из IBM) для научного и Кобол (Жан Саммет из IBM и Министерство обороны) для коммерческого применения. Программы писались на бумаге, затем перфорировались на картах, после чего результатов их выполнения ждали целый день. Языки программирования считались важными помощниками и ускорителями процесса программирования.
Постер диаграмм синтаксиса Pascal
Но по моему мнению, Алгол W был недостаточно хорошим. Из-за того, что изначально он разрабатывался комитетом, язык содержал в себе слишком много компромиссов. После моего возвращения в Швейцарию, я спроектировал язык в соответствии со своими предпочтениями: им стал Паскаль. С несколькими помощниками мы написали руководство пользователя и спроектировали компилятор. В процессе его создания мы решились на рискованный шаг: захотели описать компилятор на самом Паскале, затем транслировать его вручную на Фортран, и, наконец, скомпилировать первый из второго. Результатом стал сокрушительный провал, поскольку из-за отсутствия структур данных (записей) в Фортране трансляция получилась очень громоздкой. После этого неудачного дорогостоящего урока вторая попытка окончилась успехом — на этот раз мы использовали вместо Фортрана язык местной разработки Scallop (созданный М. Энгели).
Паскаль
Паскаль был прост в преподавании и мог использоваться в широком спектре применений, что было значительным преимуществом по сравнению с Алголом, Фортраном и Коболом. Модуль System Паскаля был эффективным, компактным и простым в применений. На язык сильно повлияла новая дисциплина структурированного программирования, основным проповедником которой был Э. Дейкстра, стремившийся таким образом избежать угрозы кризиса программного обеспечения (1968 год).
Паскаль был опубликован в 1970 году и впервые использовался на курсах обучения в Швейцарской высшей технической школе Цюриха (ETH). Мы даже определили подмножество Pascal-S и создали более компактный компилятор для экономии времени и пространства на нашем компьютере CDC и снижения времени цикла обработки для студентов. В те времена машинное время и память были в дефиците.
Распространение и популярность Паскаля
Вскоре Паскаль заметило несколько университетов и возрос интерес к его использованию в обучении. Мы получали просьбы о помощи в реализации компиляторов для других компьютеров. Я придумал идею постулирования гипотетического компьютера, который можно было бы легко реализовать на различных мейнфреймах, для которого мы бы создали в Высшей технической школе Цюриха компилятор. Этот гипотетический компьютер можно было бы легко реализовывать относительно небольшими трудозатратами при помощи уже готовых инструментов (ассемблеров). Таким образом возникла архитектура Pascal-P (P — «портируемый»), и эта техника оказалась чрезвычайно успешной. Первые наши клиенты были из Белфаста (Ч.Э.Р. Хоар). Два помощника привезли две тяжёлые картонные коробки перфокарт в Цюрих, на них был записан компилятор, спроектированный для компьютера ICL. На границе их подвергли допросу, потому что возникло подозрение, что перфокарты могут содержать секреты, подлежащие таможенным сборам. Всё это происходило без международных проектных организаций, без бюрократии и бюджетов на исследования. Сегодня это было бы невозможно.
Интересным следствием таких разработок стало появление пользовательских групп, в основном состоящих из молодых энтузиастов, желавших продвигать и распространять Паскаль. Ядром этих групп управлял Энди Микел из Миннеаполиса, где они регулярно публиковали новостную рассылку о Паскале (Pascal Newsletter). Это движение внесло значительный вклад в стремительное распространение Паскаля.
Несколькими годами позднее на рынке появились первые микрокомпьютеры. Это были небольшие компьютеры, процессор которых интегрирован в единый чип, и имевшие 8-битные шины данных, доступные по цене даже физическим лицам. Выяснилось, что благодаря своему небольшому компилятору, способному уместиться в малом объёме памяти (64 КБ), Паскаль подходит для их процессоров. Группа под руководством Кена Боулса из Университета Сан-Диего и Филипп Кан из Borland Inc. в Санта-Крузе создали для нашего компилятора простую операционную систему, текстовый редактор и процедуры для обнаружения и диагностики ошибок. Они продавали этот пакет на гибких дисках по 50 долларов (Turbo Pascal). Благодаря этому Паскаль распространялся мгновенно, особенно в школах и вузах, став для многих точкой входа в программирование и computer science. Наше руководство по Паскалю превратилось в бестселлер.
Такое распространение не ограничилось Америкой и Европой. Россия и Китай тоже с энтузиазмом восприняли Паскаль. Об этом я узнал только позже, во время моих первых поездок в Китай (1982 год) и СССР (1990 год), когда мне показали версию нашего руководства, написанного непонятными (для меня) символами и буквами.
Наследники Паскаля
Но время не стояло на месте. Компьютеры стремительно становились быстрее, поэтому требования к приложениям, как и к программистам, росли. Программы больше не разрабатывались одним человеком, теперь их создавали коллективы. В языках должны были появиться конструкции, поддерживающие командную работу. Один человек может спроектировать часть системы, называемую «модулем», достаточно независимо от остальных модулей. Позже модули могут быть скомпонованы и загружены автоматически. Даже в Фортране имелась уже такая функция, однако теперь компоновщик должен был проверять целостность типов данных между границами модулей. Это была непростая задача!
Модули с межграничной проверкой целостности типов стали основным расширением первого наследника Паскаля под названием Модула-2 4 (сокращение от modular language, 1979 год). Язык стал эволюционным развитием Паскаля, а также Mesa — языка, разработанного в Xerox PARC для системного программирования. Сам Mesa тоже произошёл от Паскаля. Однако Mesa развивался слишком хаотично и его нужно было «укротить». В Модула-2 также присутствовали элементы для системного программирования, допускавшие конструкции, зависящие от конкретных свойств компьютера, поскольку они были необходимы для интерфейсов с периферийными устройствами или сетями. Из-за этого пришлось пожертвовать самой сутью высокоуровневых языков, а именно машинонезависимым программированием. К счастью, такие части теперь можно было локализовать в конкретных «низкоуровневых» модулях, а значит, соответствующим образом изолировать.
Кроме того, Модула содержал конструкции для программирования параллельных процессов (или квазипараллельных потоков). «Параллельное программирование» было основной темой 1970-х. В целом, Модула-2 постепенно стал довольно комплексным и на мой взгляд переусложнённым для обучения программированию. Ощущалось, что языку нужно совершенствование и упрощение.
Даже сегодня Оберон успешно используется во множестве разных мест. Однако революции, как в случае с Паскалем, не произошло. Комплексные коммерческие системы используются слишком широко и потому укоренились. И всё же можно сказать, что на многие подобные языки наподобие Java (Sun Microsystems) и C# (Microsoft) значительное влияние оказали Оберон или Паскаль.
Примерно в 1995 году на рынке появились динамически перепрограммируемые на уровне логических вентилей электронные компоненты. Эти программируемые пользователем вентильные матрицы (field programmable gate arrays, FPGA) можно сконфигурировать в практически любую цифровую схему. Разница между программным и аппаратным становилась всё более размытой. Я разработал язык Lola (logic language) с похожими на Оберон элементами и аналогичной ему структурой для описания цифровых схем. Схемы всё чаще стали задаваться формальными текстами, заменяющими графические принципиальные схемы. Это упрощает проектирование оборудования и ПО, что на практике становится всё более важным.
Комментарии и выводы
Принципиальная задача высокоуровневых языков — повышение уровня абстракции со слоя машинных команд. Например, структуры данных вместо массивов слов в памяти или условные операторы и операторы цикла вместо команд перехода. Идеальный язык должен определяться в категориях математической логики, аксиом и правил вывода. Для его понимания не должно требоваться никакой отсылки к любому компьютеру или механизму. Это основа портируемости. Проектировщики Алгола видели эту цель, но сложнее всего достигнуть её, не жертвуя при этом мощью выразительности. Тем не менее, каждый новый язык следует измерять той степенью, в которой он приближается к этой цели. Последовательность «Паскаль—Модула—Оберон» стали свидетельством моего стремления достичь её. Оберон к ней близок, однако ничто не идеально.
Ссылки
1. Naur, P. Revised report on the algorithmic language Algol 60. Commun. ACM 6, (Jan. 1963), 1–17.
2. Wirth, N. and Hoare, C.A.R. A contribution to the development of ALGOL. Commun. ACM 9 (June 1966), 413–432.
3. Wirth, N. The programming langage Pascal. Acta Informatica 1, (1971), 35–63; https://doi.org/10.1007/BF00264291
4. Wirth, N. What can we do about the unnecessary diversity of notation for syntactic definitions? Commun. ACM 20, 11 (Nov. 1977).
5. Wirth, N. Programming in Modula-2. Springer-Verlag 1982.
6. Wirth, N. The Programming Language Oberon. Software–Practice and Experience 18, (Jul. 1988), 671–690; https://doi.org/10.1002/spe.4380180707
На правах рекламы
Серверы для разработки и размещения ваших проектов — это про наши эпичные! Все серверы «из коробки» защищены от DDoS-атак, скорость интернет-канала 500 Мегабит, автоматическая установка удобной панели управления VestaCP для размещения сайтов и даже автоматическая установка Windows Server на тарифах с 4 ГБ ОЗУ или выше. Лучше один раз попробовать 😉
На чем написан паскаль
лабы по информатике, егэ
лабораторные работы и задачи по программированию и информатике, егэ по информатике
Выберите интересующие Вас в pascal уроки:
Язык Pascal очень часто используется в сфере образования. Названием служит английское слово Pascal — имя знаменитого математика и философа из Франции — Блеза Паскаля, но с идеологией программирования это никак не связано.
История языка Паскаль
Pascal — это язык программирования, относящийся к структурной парадигме. Паскаль был разработан для обучения школьников и студентов в 70-х годах XX-го века.
Язык Pascal был создан ученым Никлаусом Виртом из Швейцарии, который был специалистом в области информатики и компьютерных наук, а также известным теоретиком в области разработки языков программирования.
Изначально pascal создавался путем переработки Алгол-60. Где-то в 1968 году проект был подготовлен, и разработчики приступили к созданию транслятора, предназначенного для использования на вычислительной машине CDC 6400. В 1971 было анонсировано официальное его описание (Wirth N. The Programming Language Pascal // Acta Informatica. — 1971. Vol1.N1.).
Сам Никлаус Вирт в своих трудах указывает на то, что целью его создания является «построение небольшого и эффективного языка, способствующего хорошему стилю программирования, использующему структурное программирование и структурированные данные».
Особо популярным периодом распространения Паскаля были 1972-1975 года. Удачные на то время характеристики языка Паскаль и его возможности позволили ему не только удостоиться всеобщего признания, но и сделали его основным средством для преподавания дисциплины «Программирование» и для разработки программ. В 1975 году появляется целая ассоциация пользователей Паскаля. Но позднее язык подвергся критике. Ограничения основных конструкций языка pascal оказались слишком строги, и это сильно не понравилось пользователям. В 1977 г. появляется группа по разработке стандарта Pascal. Руководителем группы являлся А.Эддиман (A.M.Addyman). 1 декабря 1983 г. был создан международный стандарт языка, носящий название ИСО 7185.
Изучение паскаля посредством уроков, представленных на сайте, позволит раскрыть достоинства и недостатки Pascal, разобраться как устроена структура программы, изучить основные операторы. Примеры программ и готовые задачи с решением рассчитаны как для начинающих изучение языка Pascal, так и для студентов и школьников.
Паскаль (язык)
Паскаль (англ. Pascal ) — высокоуровневый язык программирования общего назначения. Один из наиболее известных языков программирования, широко применяется в промышленном программировании, обучении программированию в высшей школе, является базой для большого числа других языков. Был создан Никлаусом Виртом в 1970, после его участия в работе комитета разработки стандарта языка Алгол-68.
Содержание
История
Паскаль был создан как язык для обучения процедурному программированию (хотя, по словам Вирта, язык нельзя считать только учебным, поскольку язык, непригодный для написания реальных программ, для обучения использоваться не должен). Название языку дано в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля. Один из первых языков, для которых была создана реализация «на самом себе» — компилятор Паскаля был написан на самом Паскале. В начале 1970-х годов для переноса Паскаль-систем на различные аппаратные платформы была создана система Pascal-P, в которой был единый компилятор Паскаля в промежуточный язык (P-код) и для каждой платформы создавался быстрый интерпретатор P-кода. Заимствование этой системы привело к созданию системы UCSD Pascal в Университете Сан-Диего (Калифорния, США), намного позже её идеи были заимствованы создателями языка байт-код, компиляция в байт-код, интерпретатор байт-кода).
Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком.
Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования» (интересно, что эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.
Необходимо заметить, что многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 70-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. В начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники академик А. П. Ершов разработал алголо-паскалеподобный «алгоритмический язык».
Никлаус Вирт понимал недостатки созданного им языка, но, следуя традициям академической среды и собственным принципам, согласно которым «неподходящий инструмент надо не исправлять, а заменять», не стал его развивать дальше, а разработал новые языки семейства: Модула-2 и Оберон. В противоположность этому промышленные традиции и достоинства языка побудили многие коммерческие и некоммерческие организации продолжать разрабатывать и развивать системы программирования именно на основе языка Паскаль, подвергая язык произвольному расширению, добавляя в него, часто совершенно механически, новые средства и синтаксические конструкции.
Особенности
Наиболее известной реализацией Паскаля, обеспечившая широкое распространение и развитие языка является Turbo Pascal фирмы Kylix — Delphi для Linux, в настоящее время оба этих проекта фактически заморожены).
Важным шагом в развитии языка является появление свободных реализаций языка Паскаль Free Pascal и GNU Pascal, которые не только вобрали в себя черты множества других диалектов языка, но и обеспечили чрезвычайно широкую переносимость написанных на нем программ (например GNU Pascal поддерживает более 20 различных платформ, под более чем 10 различными операционными системами,Free Pascal поддерживает некоторые мобильные платформы). Free Pascal обеспечивает специальные режимы совместимости с различными распространенными диалектами языка(Turbo Pascal(полная совместимость), Delphi и другими).
Диалекты Паскаля, применяемые в Turbo Pascal и Delphi стали де-факто стандартом в силу широкой распространенности этих средств разработки, и затем получили дальнейшее развитие в рамках свободных проектов.
Пользуются популярностью такие версии языка как Free Pascal, GNU Pascal и TMT Pascal. Продолжает использоваться и Borland Pascal.
Синтаксис и языковые конструкции
Паскаль, в его первоначальном виде, представляет собою чисто процедурный язык и включает в себя множество Алголоподобных структур и конструкций с зарезервированными словами наподобие if, then, else, while, for, и т. д. Тем не менее, Паскаль также содержит большое количество возможностей для структурирования информации и абстракций, которые отсутствуют в изначальном Алголе-60, такие как определение типов, записи, указатели, перечисления, и множества. Эти конструкции были частично унаследованы или инспирированы от языков Симула-67, Алгол-68, созданного Никлаусом Виртом AlgolW и предложены Хоаром. В современных диалектах (Free Pascal) доступны такие операции как перегрузка операторов и функций.
Hello world
Таким образом, простейшая программа на Паскале будет выглядеть следующим образом:
Программа не выполняет никаких действий и содержит пустой блок операторов.
Пример программы, выводящей строку ‘Hello, World!’:
Типы данных
Примитивные типы данных Паскаля: типы с плавающей запятой(real), целые(integer), char, boolean и перечисления (конструктор нового типа, введённый в Паскале):
Выделяется понятие порядковых типов данных (ordinal), к ним относятся целые типы(знаковые и беззнаковые), логический(boolean), символьный(char), перечислимые типы и типы-диапазоны.
Порядковые типы задаются целым числом(кодом), которое можно получить с помощью функции ord. Все операции, выполняемые над порядковыми типами, выполняются с их кодами.
Диапазоны содержат подмножество значений других порядковых типов:
В паскале в отличии от си-подобных языков с типами boolean, char арифметические целочисленные операции не определены.
В отличие от многих распространенных языков, Паскаль поддерживает специальный тип данных множество:
Множество — фундаментальное понятие в современной математике, которое может быть использовано во многих алгоритмах. В паскале тип множество может содержать только однотипные элементы порядкового типа. Эта особенность широко используется и обычно быстрее эквивалентной конструкции в языке, не поддерживающем множества. К примеру, для большинства компиляторов Паскаля:
обработается быстрее, чем
Для задания значения множества используется список элементов множества, отделенных запятыми и заключенный в квадратные скобки (как уже было показано выше):
Паскаль поддерживает использование указателей(типизированные ^тип и нетипизированные pointer):
Здесь переменная pointer_to_b — указатель на тип данных b, запись. Тип типизированного указателя может быть задан перед объявлением типа на который он ссылается. Это исключение к правилу, которое гласит, что любая вещь должная быть объявлена перед тем, как используется. Введение этого исключения позволило организовывать рекуррентные определения структур данных, в том числе такие, как линейные списки, стеки и очереди, включая указатель на запись в описании этой записи (см. также нулевой указатель(nil)).
Для типизированного указателя определена операция разыменования(ее синтаксис: указатель^)
Чтобы создать новую запись и присвоить значение 10 и символ A полям a и b в ней, необходимы следующие операторы:
Для целей обращения к полям записей и объектов можно также использовать оператор with, как показано в примере:
Операторы управления выполнением программы
Паскаль — язык структурного программирования, что означает, что программа состоит из выполняющихся последовательно отдельных стандартных операторов, в идеале — без использования команды
В операторах while,for,if,case в качестве выполняемого оператора может использоваться блок. Такая конструкция, представляющая собой обычный оператор или блок, называется сложным оператором.
Для управления процессом компиляции в паскале существуют директивы компилятора, они помещаются в комментарии и позволяют переключать режимы работы компилятора, например включать и отключать проверку операций ввода-вывода, проверки переполнения:
Процедуры и функции
В Паскале подпрограммы делятся на процедуры и функции:
Синтаксически процедуры и функции состоят из заголовка(содержащего ключевое слово procedure или function, имени, за которым может следовать описание передаваемых параметров в скобках, тип возвращаемого значения через символ двоеточия для функций и точки с запятой), после заголовка следует тело, после которого ставится символ ;.
Тело процедуры, так же как и программы в свою очередь может содержать описания процедур и функций, таким образом, процедуры и функции могут быть вложены друг в друга как угодно глубоко, при этом тело программы — самое верхнее в цепочке. Причем содержимое секций описания переменных, типов, констант, внешнего тела(процедуры, функции, программы) расположенных перед описанием процедуры/функции доступны внутри нее. Также в большинстве диалектов из процедуры можно обращаться к параметрам внешней процедуры.
Вслед за заголовком процедур/функций вместо тела может помещаться ключевое слово forward, это делается в том случае, если описание процедуры/функции располагается в программе после ее вызова, и связано с поддерживаемой в Паскале возможностью компиляции программы за один проход.
Модули
Современные реализации языка Паскаль (начиная с UCSD Pascal) поддерживают модули, концепция которых заимствована, с изменениями, из языка Modula. Программные модули могут быть двух видов: модуль главной программы, который, как обычно, начинается с ключевого слова program и тело которого содержит код, запускаемый после загрузки программы в память, и вспомогательных модулей, содержащих типы, константы, переменные, процедуры и функции, предназначенные для использования в других модулях, в том числе в главном модуле.
До появления модулей в их современном виде некоторые реализации Паскаля поддерживали модульность за счёт механизма включения заголовочных файлов, похожего на механизм #include в языке Си: с помощью специальной директивы, оформляемой в виде псевдокомментария, например, <$INCLUDE "файл">, содержимое указанного файла прямо включалось в текст программы в исходном, текстовом виде. Таким образом можно было разделить программный код на множество фрагментов, для удобства редактирования, но перед компиляцией они автоматически объединялись в один файл программы, который в итоге и обрабатывался компилятором. Такая реализация модульности примитивна и имеет множество очевидных недостатков, поэтому она была быстро заменена.
Структура
Общая структура подключаемого модуля на Паскале выглядит следующим образом:
Возможен также ещё один вариант:
Интерфейсная секция идёт первой, начинается с ключевого слова INTERFACE и заканчивается в том месте модуля, где начинается секция реализации или тело. В интерфейсной секции объявляются те объекты (типы, константы, переменные, процедуры и функции(для них помещаются заголовки)), которые должны быть доступны извне модуля. При этом допускается частичное объявление типов: они могут объявляться без указания структуры, одним только именем. При использовании такого типа во внешней программе допускается объявление переменных и параметров этого типа, присваивание значений, но невозможно получить доступ к деталям его реализации. Процедуры и функции в интерфейсной секции объявляются в виде форвардов — заголовков с параметрами, но без тела. Состав интерфейсной секции модуля таков, что его достаточно для генерации кода, использующего данный модуль. Переменные, объявленные в интерфейсной секции, являются глобальными, то есть существуют в единственном экземпляре и доступны во всех частях программы, использующих данный модуль.
Модуль заканчивается ключевым словом END с точкой.
Использование
Модули, подключённые в интерфейсной секции, могут использоваться во всём модуле — и в секции реализации, и в теле. Но секция реализации может иметь собственную инструкцию подключения (она следует за ключевым словом IMPLEMENTATION), содержащую имена подключаемых модулей, которые отсутствуют в интерфейсной секции, но нужны для секции реализации. Одним из поводов использования отдельного списка подключения для раздела реализации является ситуация, когда два или более модуля используют друг друга. Чтобы не возникали циклические ссылки в объявлениях использования таких модулей, по крайней мере один из них должен подключать другой в секции реализации.
Проблемы могут возникнуть, если появляется необходимость использования в программе двух разных одноимённых модулей. Если модули доступны только в откомпилированном виде (то есть поменять их имена невозможно), оказывается невозможным их одновременный импорт. Стандартного решения такой коллизии на уровне языка не существует, но конкретные компиляторы могут предлагать те или иные способы её обхода, в частности, средства назначения псевдонимов импортируемым модулям и прямого указания, какой модуль из какого файла брать.
Компиляция и компоновка
Модули спроектированы в расчёте на обеспечение раздельной компиляции — компилятор не должен компилировать импортированные модули для того, чтобы откомпилировать модуль, которых их использует. Однако, чтобы правильно компилировать модуль, компилятор должен иметь доступ к секции интерфейса всех используемых им модулей. Существует два разных, иногда совмещаемых подхода к организации такого доступа.
Загрузка и выгрузка модулей
Для нормальной работы модуля может потребоваться выполнить некоторые действия до начала его использования: инициализировать переменные, открыть нужные файлы, выделить память или другие ресурсы. Всё это может быть сделано в теле модуля, либо в секции инициализации. Действия, обратные инициализации, делаются в секции финализации.
Порядок инициализации и финализации модулей не определён никакими стандартами, но для статически откомпилированных программ (где модуль либо компилируется в один исполняемый файл с главной программой, либо находится в отдельной динамической библиотеке, но загружается на этапе первоначальной загрузки), компилятор всегда гарантирует, что инициализация будет выполнена до момента первого использования модуля. Финализация выполняется при завершении работы программы, после завершения главного модуля, так, что используемые модули финализируются позже, чем использующие их.
В случае динамической загрузки модулей, управляемой самим программистом, инициализаторы выполняются при загрузке, то есть в момент, когда команда загрузки модуля вернула управление, инициализатор его уже выполнен. Финализатор выполняется после выгрузки, обычно — при выполнении команды выгрузки модуля. Если эта команда не вызывается, динамически загруженные модули финализируются так же, как все остальные — при завершении программы.
Объектно-ориентированное программирование
В Object Pascal классы задаются с помощью типа object, аналогичного record, который кроме полей данных может содержать заголовки процедур и функций(называются методами). Имена описываемых методов следуют за именем класса через точку. Конструктор и деструктор задаются как обычные процедуры, но вместо идентификатора procedure задаются ключевые слова constructor и destructor. Соответственно, в отличии от C++-подобных языков они имеют имя отличное от имени класса, и деструкторов может быть несколько и они могут иметь параметры. Также, в отличии от C++-подобных языков в Object Pascal(fpc, tp) не предусматривается автоматического вызова деструктора.
Поддерживаются наследование(допускается наследование 1 класса), полиморфизм классов, механизм виртуальных методов(слово virtual после заголовка метода класса). В Delphi, FPC реализована перегрузка операций, абстрактные методы, директивы private, public(по умолчанию члены класса являются public):
В диалекте Delphi классы могут также конструироваться с помощью слова class(причем взаимное наследование с object-классами не допускается), и введены интерфейсы(interface)-все методы абстрактные и не могут содержать полей данных. Все классы(созданные с помощью class) являются наследниками TObject, все интерфейсы происходят от IUnknown. Классы(созданные с помощью class) могут реализовывать несколько интерфейсов. В Delphi интерфейсы были введены для поддержки COM технологии фирмы Microsoft.
Классы(Class) в отличии от обычных классов(Object) не нуждаются в явном выделении/освобождении памяти, память под них динамически выделяется конструктором с именем Create, вызываемым с именем класса, и освобождается при вызове деструктора с именем Destroy(могут иметь другие имена). Переменная такого класса в отличии от класса object хранит адрес экземпляра класса в памяти, значение nil используется для указания пустой ссылки, поэтому для освобождения объекта в TObject определен специальный метод free, проверяющий ссылку на nil и вызывающий виртуальный деструктор Destroy. Код с использованием таких классов будет выглядеть следующим образом: