Pascal
end.; |- |Неправильно ставити крапку з комою |У Pascal крапка з комою розділяє оператори |- |Не оголошувати змінні |Змінні мають бути описані перед використанням |- |Плутати процедури й функції |Функція повертає значення, процедура без ускладнень виконує дію |- |Неправильно працювати з індексами масивів |У Pascal індекси можуть починатися не тільки з 0, а з будь-якого заданого діапазону |}
end;
Процедура з параметром:
Pascal історично мав зручні засоби для роботи з файлами.; uses == переважні аспекти Pascal ==
Sum := 0; A [4] := 12;begin
A [3] := 4;Pascal розвивав ідеї мов ALGOL і ALGOL W, але мав простіший і практичніший синтаксис для навчання.; Pascal став важливою мовою в історії програмування, освіти, компіляторів, алгоритмів і розвитку таких мов і середовищ, як '''[[Object Pascal]]''', '''[[Delphi]]''', '''[[Free Pascal]]''' і '''[[Lazarus]]'''.; Delphi виріс із Pascal через Object Pascal.; program SumToN;
A [2] := 5;SayHello('Anna');
<blockquote>'''Для багатьох програмістів саме Turbo Pascal був першою реальною мовою програмування.'''</blockquote>
- навчання;
- cross-platform desktop;
- open source Pascal-проєктів;
- міграції частини старих Delphi-проєктів;
- створення простих і середніх застосунків.;<pre>
!Тип
begin == Змінні == !Порівняння з Pascal begin function Add(A, B: Integer): Integer; |- |'''Освіта''' |Навчання основам програмування |Алгоритми, задачі, курси програмування |- |'''Алгоритми''' |характеристика логіки й структур даних |Масиви, сортування, пошук |- |'''Олімпіадне програмування''' |Історично використовувався для задач |Turbo Pascal, Free Pascal |- |'''Desktop''' |Через Object Pascal і Delphi |Windows-застосунки, бізнес-програми |- |'''Legacy''' |супровід старих систем |Старі навчальні, облікові або desktop-програми |- |'''Компілятори''' |Вивчення побудови мов і трансляторів |Pascal-P, навчальні компілятори |- |'''Бізнес-системи''' |Через Delphi/Object Pascal |ERP, CRM, складський облік, документи |}
SysUtils;
Pascal історично активно використовувався в олімпіадному програмуванні.; var
begin begin Масив — це набір елементів одного типу.; begin
- Firebird;
- InterBase;
- SQLite;
- PostgreSQL;
- MySQL;
- Microsoft SQL Server;
- Oracle Database.;== Приклад першої програми ==
begin
<pre>
Writeln('Неповнолітній');
Age := 17;
- послідовність дій;
- умови;
- цикли;
- процедури;
- функції.; var
'''Функція''' повертає результат.; Змінні в Pascal зазвичай оголошуються до використання.; Причини: Мова оперативно стала популярною в освіті, з цієї причини що дозволяла навчати:
begin Pascal є собою мовою зі статичною типізацією.;<pre> == Цикл repeat until == |- |'''Pascal''' |Класична структурна й процедурна мова програмування |- |'''Object Pascal''' |еволюція Pascal з класами, обʼєктами, властивостями й інтерфейсами |- |'''Delphi''' |IDE, компілятор, платформа й програмний пакет, що використовує Object Pascal |- |'''Free Pascal''' |Відкритий компілятор Pascal/Object Pascal |- |'''Lazarus''' |Відкрита IDE для Free Pascal, схожа за ідеєю на Delphi |} Типові бази:
var {| class="wikitable" У Pascal і його діалектах модулі дозволяють розділяти програму на частини.; if N = 0 then Класичний Pascal сам по собі не був мовою баз даних, але через Delphi, Object Pascal і Free Pascal він активно використовувався в програмах, які працюють із базами.;<blockquote>'''Pascal — це мова, яка навчила програмістів писати не без ускладнень працюючий, а зрозумілий і впорядкований код.'''</blockquote>
A [1] := 5;
Writeln('Max = ', MaxValue);
→ компілятор
Задача: знайти суму чисел від 1 до N.; Writeln(I);
'''Pascal''' — одна з найважливіших мов в історії програмування.; |- | style="background:#f8d7da; color:#721c24; font-weight:bold;" |Увага |'''Pascal сьогодні менш популярний у промисловій розробці''' |Для нових web, AI або mobile-проєктів частіше використовують Python, JavaScript, TypeScript, Java, C# або Go.;<pre> Pascal був створений Ніклаусом Віртом приблизно у 1970 році.; Writeln('Привіт, ', Name);
MaxValue: Integer;
Мінімальний набір для практики Pascal
- =
Age: Integer;
implementation
User.Email := 'anna@example.com'; if Monday in Days then
Writeln(Add(5, 7)); program ProgramName;
N: Integer;
Коротко
Sets
Pascal має тип set — множину значень.; |-
|Плутати := і =
|:= — присвоєння, = — порівняння
|-
|Забувати крапку в кінці програми
|Класична Pascal-програма завершується end.; end.; Мова виникла в контексті пошуку кращих способів навчання програмуванню та створення зрозумілих алгоритмів.; for I := 2 to 5 do
Age: Integer;
begin
else
procedure SayHello(Name: string);
|-
|Turbo Pascal
|Дуже популярне середовище Borland для DOS, особливо в освіті й олімпіадному програмуванні
|-
|Borland Pascal
|еволюція Turbo Pascal
|-
|Delphi
|IDE та платформа для Object Pascal
|-
|Free Pascal
|Відкритий компілятор Pascal/Object Pascal
|-
|Lazarus
|IDE для Free Pascal
|-
|GNU Pascal
|Реалізація Pascal у GNU-екосистемі
|-
|UCSD Pascal
|Історична реалізація Pascal із p-code
|}
Lazarus
begin
!Чи підходить Pascal?; Мова названа на честь французького математика, філософа й винахідника Блеза Паскаля.; !Мова
end;
Головна ідея Pascal
|-
|Назва
|Pascal
|-
|Автор
|Ніклаус Вірт
|-
|Перший реліз
|Приблизно 1970 рік
|-
|Тип
|Високорівнева, структурна, процедурна, компільована мова програмування
|-
|Основна ідея
|Навчання добрим практикам програмування й структурному мисленню
|-
|Названа на честь
|Блеза Паскаля
|-
|Стандарт
|ISO 7185
|-
|Популярні реалізації
|Turbo Pascal, Borland Pascal, Free Pascal, GNU Pascal, UCSD Pascal
|-
|еволюція
|Object Pascal, Delphi, Free Pascal, Lazarus
|-
|Основні сфери
|Освіта, алгоритми, desktop, навчальні програми, legacy-системи
|-
|Складність для новачків
|Низька
|}
program VariablesExample;
interface
end;
- чітка структура програми;
- зрозуміле оголошення змінних;
- поділ програми на процедури й функції;
- використання типів даних;
- контроль логіки через умови й цикли;
- читабельність коду;
- дисципліна програмування.; {| class="wikitable"
Основна структура програми Pascal
!Задача
код Pascal
!Що означає
Lazarus застосовується для:
!Реалізація
end.; else
end.;
Pascal не намагається бути наймоднішою мовою.; function Factorial(N: Integer): Integer;
!Компонент
var
Процедури
Він підтримує роботу багато платформ і діалектів, зокрема режими сумісності з Turbo Pascal і Delphi.; Object Pascal — еволюція.;
Pascal — це мова, яка навчила кілька поколінь програмістів писати код структуровано, зрозуміло й дисципліновано.
|-
|program
|Назва програми
|-
|uses
|Підключення модулів
|-
|var
|Оголошення змінних
|-
|begin
|Початок основного блоку
|-
|end.
|Кінець програми
|}
Коли Pascal — хороший вибір
Writeln(I);
У Pascal оператор присвоєння — це:
Add := A + B;
Приклад:<pre>
!Етап
== Pascal і Delphi ==
== Case ==
Name: string;
Сьогодні Pascal рідше використовують для нових великих промислових систем, але він залишається важливим для освіти, історії програмування, підтримки старого коду й розуміння того, як формувалась культура якісного програмування.; {| class="wikitable"
== Pascal, Object Pascal і Delphi ==
'''Lazarus''' — це open source IDE для Free Pascal.; Рекурсія — це коли функція викликає сама себе.; I, J, Temp: Integer;
begin
end.; program BubbleSortExample;
Writeln(Line);
Приклад пошуку максимуму:<pre>
- класи;
- компоненти;
- форми;
- Object Inspector;
- VCL;
- FireMonkey;
- роботу з базами даних;
- події;
- візуальну розробку.; Assign(F, 'output.txt');
Компілятор перевіряє синтаксис, типи й структуру програми.; !Теза
!Пояснення
repeat
переважні аспекти статичної типізації:
begin
case DayNumber of
end;
end.; !Для чого
А знак рівності =застосовують, коли потрібно переважно для порівняння.; |-
| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове
|Pascal вплинув на інші мови
|Object Pascal, Delphi, Modula-2, Oberon та інші мови повʼязані з ідеями Pascal.; !Що вивчати
У Delphi/Object Pascal для цього використовують компоненти доступу до даних, SQL-запити, datasets і data-aware компоненти.; Окремо варто відзначити розроблена для навчання структурному програмуванню, зрозумілого опису алгоритмів і побудови надійних програм виступає ключовою рисою Pascal.;
User.Age := 17;
!Приклади
Виклик:
Writeln(Counter);
== Pascal і бази даних ==
Name: string;
Це означає, що типи змінних відомі ще до виконання програми.; !Статус
|-
|1
|Структура програми: program, begin, end
|-
|2
|Змінні й типи даних
|-
|3
|Введення й виведення
|-
|4
|Умови if і case
|-
|5
|Цикли for, while, repeat
|-
|6
|Масиви
|-
|7
|Процедури
|-
|8
|Функції
|-
|9
|Records
|-
|10
|Файли
|-
|11
|Рекурсія
|-
|12
|Базові алгоритми сортування й пошуку
|-
|13
|Перехід до Object Pascal або Delphi
|}
I: Integer;
function Add(A, B: Integer): Integer;
== Історичний розвиток ==
Numbers [1] := 10;
|-
|'''Компілятор'''
|Free Pascal
|-
|'''IDE'''
|Lazarus або простий редактор + компілятор
|-
|'''Перші задачі'''
|Виведення тексту, сума чисел, максимум у масиві
|-
|'''Далі'''
|Процедури, функції, масиви, файли
|-
|'''Для розвитку'''
|Object Pascal, Delphi або Lazarus
|}
Writeln('Невідомий день');
1: Writeln('Понеділок');
== Turbo Pascal ==
for I := 1 to 5 do
Приклад unit:
{| class="wikitable sortable"
begin
TDay = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
У Pascal слова then і else роблять структуру умови дуже явною.; Writeln(Numbers [I]);
Pascal в олімпіадному програмуванні
begin
end;
Counter := Counter + 1;
→ запуск програми
Writeln(Age);
Для чого застосовується Pascal
var
begin
Pascal у порівнянні з іншими мовами
- менше випадкових помилок;
- краще розуміння структури даних;
- компілятор має змогу знаходити помилки раніше;
- код легше читати й підтримувати.; User.Name := 'Anna';
A: array [1..5] of Integer;
Sum: Integer;
Джерела
end.; {| class="wikitable"
program HelloWorld;
!Приклад
TWorkDays = set of TDay;
!Пояснення
type
Чому мова називається Pascal
Вона дала програмістам:
for I := 1 to 5 do
Writeln('Привіт, ', Name);
Write('Введіть N: ');
end.;== Умови ==
→ виконуваний файл або проміжний код
- складський обліковий облік;
- бухгалтерські програми;
- CRM;
- ERP;
- касові системи;
- електронний документообіг;
- програми для виробництва;
- торгові системи;
- програми для роботи з обладнанням.;
end;
|-
|'''Читабельність'''
|Код без зайвих зусиль читати й пояснювати
|-
|'''Добрий для навчання'''
|Підходить для основ алгоритмів і структурного програмування
|-
|'''Сувора структура'''
|Привчає до дисципліни в коді
|-
|'''Статична типізація'''
|Компілятор сприяє знаходити помилки
|-
|'''Процедури й функції'''
|Добре пояснює поділ програми на частини
|-
|'''Історичне значення'''
|Вплинув на еволюція інших мов і середовищ
|-
|'''еволюція через Object Pascal'''
|Ідеї Pascal живуть у Delphi, Free Pascal і Lazarus
|}
F: Text;
(* Це додатково коментар *)
== Недоліки Pascal ==
Line: string;
|-
|'''Менша популярність сьогодні'''
|У сучасній промисловій розробці Pascal застосовується рідше
|-
|'''Менше вакансій'''
|ринковий сегмент менший, ніж для JavaScript, Python, Java, C# або Go
|-
|'''Не ключовий вибір для web'''
|Для web частіше використовують JavaScript, TypeScript, PHP, Python, Java, C#
|-
|'''Не ключовий вибір для AI'''
|Для AI переважно використовують Python
|-
|'''Стара репутація'''
|Часто асоціюється зі школою, університетом або legacy
|-
|'''Різні діалекти'''
|Standard Pascal, Turbo Pascal, Free Pascal і Delphi мають відмінності
|}
{| class="wikitable"
while Counter < 10 do
begin
Writeln(Counter);
Counter := Counter + 1;
end;
Цикл while виконується, поки умова істинна.; |-
| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове
|Pascal був дуже популярний в освіті
|Багато університетів і шкіл використовували Pascal для навчання програмуванню.; Writeln('Понеділок є собою робочим днем');
!Як застосовується Pascal
!Пояснення
Цикл у зворотному напрямку:
2: Writeln('Вівторок');
TUser = record
<blockquote>'''У старих Pascal-системах цінність часто не в самій технології, а в бізнес-логіці, яка роками накопичувалась у коді.'''</blockquote>
== Типові помилки новачків ==
{| class="wikitable"
Багато старих Pascal, Turbo Pascal, Borland Pascal і Delphi-систем досі можуть використовуватись або підтримуватись.; Legacy-код має змогу містити:
Pascal добре підходить для демонстрації алгоритмів.;<blockquote>'''Delphi зробив Pascal не тільки навчальною мовою, а й практичним інструментом для бізнес-розробки.'''</blockquote>
else
У Pascal видно чітку структуру:
program MaxExample;
== Популярні реалізації Pascal ==
A [J] := A [J + 1];
== Важливі акценти ==
end.; |-
| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове
|'''Pascal має дуже читабельний синтаксис'''
|Код Pascal часто без зайвих зусиль зрозуміти навіть новачкам.; Reset(F);
uses
var
Приклад запису у файл:
|-
| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове
|Pascal створювався для навчання
|Мова добре підходить для пояснення алгоритмів, типів, процедур і структурного програмування.; |-
| style="background:#fff3cd; color:#856404; font-weight:bold;" |істотно
|Класичний Pascal — не те саме, що Delphi
|Delphi використовує Object Pascal, який є собою розвитком Pascal з обʼєктно-орієнтованими можливостями.; * швидку компіляцію;
- просте середовище;
- доступність;
- навчальні курси;
- використання в школах і університетах;
- олімпіадне програмування.; for J := 1 to 5 - I do
- зрозумілий синтаксис;
- структурний підхід;
- дисципліну типів;
- хорошу основу для алгоритмів;
- сильний освітній фундамент;
- еволюція у вигляді Object Pascal і Delphi.; Result := A + B;
Free Pascal
Pascal вчить не без ускладнень писати код, а думати про програму як про впорядковану систему.
Pascal — це мова, яка вчить програміста думати акуратно.;Основні частини:
Приклад факторіалу:- старі алгоритми;
- бізнес-правила;
- роботу з файлами;
- роботу з базами;
- інтеграції з обладнанням;
- специфічну логіку підприємства.; Pascal зазвичай компілюється.; Delphi — практична платформа для створення застосунків.'''</blockquote>
У Pascal важливі:
== Складові модулі ==
Name: string;
Numbers [2] := 20;
program
!характеристика
'''Record''' — це структура з кількома полями.;== Функції ==
end.; Його сила — у простоті, структурі й навчанні правильному мисленню.'''</blockquote>
== Цикл for ==
Records корисні для опису складніших даних.; MaxValue := A [I];
Частина
команди
Close(F);
A [5] := 7;
Блез Паскаль створив механічну обчислювальну машину, з цієї причини його імʼя символічно повʼязане з історією обчислень і програмування.; Name := 'Anna';
Turbo Pascal — одна з найвідоміших реалізацій Pascal.; end.; A [J + 1] := Temp;
оголошення
{ Це коментар }
- швидка компіляція;
- простий синтаксис;
- зручні масиви;
- добра читабельність;
- дисципліна типів.; begin
Ця програма виводить текст на екран.; end;
Основні типи даних
begin
Numbers [3] := 30;
begin
F: Text;
end.;Pascal добре підходив для цього підходу, бо його синтаксис змушував програміста писати код зрозуміло.;<pre>
* дерев;
* графів;
* математичних задач;
* перебору;
* алгоритмів “розділяй і володарюй”.; |}
== Файли ==
A [1] := 10;
Типові системи:
Name: string;
* змінним;
* типам даних;
* умовам;
* циклам;
* процедурам;
* функціям;
* масивам;
* записам;
* файлам;
* структурному програмуванню.;== Pascal і типізація ==
У сучасних діалектах часто застосовується Result:Temp := A [J];
!Перевага
Використання:Result := 0
Приклад читання:== Pascal в освіті ==
Writeln(F, 'Hello, file!');
== Цикл while ==
Writeln(Name);
var
Мова названа на честь '''Блеза Паскаля''' — французького математика, фізика, філософа й винахідника.; Age: Integer;
Writeln(Add(2, 3));
!Пояснення
Виклик:Result := A + B;
!Термін
until Counter >= 10;
begin
3: Writeln('Середа');
Класична Pascal-програма має таку структуру:<pre>
== Масиви ==
== Pascal і структурне програмування ==
unit MathUtils;
Writeln('Сума = ', Sum);
Pascal добре підходить для тем:
Pascal довго був однією з головних мов для навчання програмуванню.; var
end;
Pascal був створений швейцарським вченим '''Ніклаусом Віртом''' приблизно у 1970 році.; program Example;
== Pascal і рекурсія ==
Days := [Monday, Tuesday, Wednesday, Thursday, Friday];
'''Free Pascal''' — це сучасний відкритий компілятор Pascal/Object Pascal.;<pre>
{| class="wikitable"
== Records ==
це високорівнева мова програмування.; end.; for I := 1 to 4 do
{| class="wikitable"
|-
|Навчання основам програмування
| style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре
|-
|Алгоритмічні задачі
| style="background:#d4edda; color:#155724; font-weight:bold;" |Добре
|-
|Вивчення структурного програмування
| style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре
|-
|супровід старого Pascal-коду
| style="background:#d4edda; color:#155724; font-weight:bold;" |Добре
|-
|Delphi/Object Pascal desktop
| style="background:#d4edda; color:#155724; font-weight:bold;" |Добре через Object Pascal
|-
|Новий web frontend
| style="background:#f8d7da; color:#721c24; font-weight:bold;" |Не ключовий вибір
|-
|AI / Data Science
| style="background:#f8d7da; color:#721c24; font-weight:bold;" |Не ключовий вибір
|-
|High-load backend
| style="background:#fff3cd; color:#856404; font-weight:bold;" |Можливо, але частіше обирають інші мови
|}
for I := 1 to N do
== Pascal і legacy ==
end;
I: Integer;
|-
|'''Object Pascal'''
|Object Pascal додає класи, обʼєкти й сучасні функціональні можливості
|-
|'''Delphi'''
|Delphi — це практична платформа на основі Object Pascal
|-
|'''C'''
|C ближча до системного програмування; Pascal читабельніший для навчання
|-
|'''C++'''
|C++ значно складніша й потужніша; Pascal простіший для старту
|-
|'''Python'''
|Python популярніший сьогодні й простіший для сучасних задач; Pascal краще показує структурну дисципліну
|-
|'''Java'''
|Java сильна в enterprise; Pascal історично сильний в освіті й desktop через Delphi
|-
|'''C#'''
|C# сучасніша для .NET; Pascal має історичний і навчальний фундамент
|}
Numbers: array [1..5] of Integer;
Free Pascal застосовується для:
end.; Просте сортування методом бульбашки:<pre>
var
end;
переважні аспекти для задач:
Assign(F, 'input.txt');
begin
<pre>
== Простими словами ==
Rewrite(F);
!Значення
{| class="wikitable"
|-
|'''Integer'''
|Цілі числа
|<code>10</code>
|-
|'''Real'''
|Дробові числа
|<code>3.14</code>
|-
|'''Boolean'''
|Логічні значення
|<code>True</code>, <code>False</code>
|-
|'''Char'''
|Один символ
|<code>'A'</code>
|-
|'''String'''
|Рядок тексту
|<code>'Hello'</code>
|}
'''Структурне програмування''' — це підхід, у якому програма будується з чітких блоків:
function SumToN(N: Integer): Integer;
User: TUser;
Приклад проходу по масиву:I: Integer;
Writeln(A [I]);
var
<pre>
if N <= 1 then
Result := 1
else
Result := N * Factorial(N - 1);
end;
if A [I] > MaxValue then
Рекомендований шлях навчання Pascal
Sum := Sum + I;
Writeln('Hello, Pascal!');
Призначення
MathUtils;
Name := 'Anna';
Result := N + SumToN(N - 1);
Помилка
Pascal і компіляція
if Age >= 18 then
Рекомендація
Readln(N);
Сьогодні на олімпіадах частіше використовують C++, Python або Java, але Pascal відіграв дуже важливу роль в історії навчального програмування.;
* змінні;
* типи;
* умови;
* цикли;
* масиви;
* процедури;
* функції;
* рекурсія;
* файли;
* записи;
* базові алгоритми.; A [5] := 3;
== Pascal у бізнес-системах ==
Close(F);
== Коментарі ==
{| class="wikitable"
function Add(A, B: Integer): Integer;
A [2] := 2;
procedure SayHello;
Оператор <code>case</code> застосовується для вибору з кількох варіантів.;<pre>
* навчання;
* open source-проєктів;
* desktop-застосунків;
* консольних програм;
* cross-platform розробки;
* Lazarus-проєктів.;<pre>
// Це однорядковий коментар у сучасних діалектах
== Приклад навчальної задачі ==
Це означає:<pre>
На відміну від while, цикл repeat until виконується хоча б один раз.;
A [3] := 30;
begin
for I := 1 to 5 do
Pascal — це основа.; end.; {| class="wikitable sortable"
Він схожий за ідеєю на Delphi й надає можливість створювати desktop-застосунки з формами.; Ці поняття істотно розрізняти.; !Параметр
Email: string;
Процедура — це блок коду, який виконує дію.;== Pascal і алгоритми ==
- зрозумілий синтаксис;
- сувора структура;
- явне оголошення змінних;
- хороша супровід процедур і функцій;
- просте пояснення алгоритмів;
- зручність для навчальних задач.; У Pascal є собою кілька стилів коментарів.; MaxValue := A [1];
Якщо Pascal — це структурна мова, то Delphi додав:
if A [J] > A [J + 1] then
Приклад сортування масиву
var
A [4] := 1;
Умова if:
Days: TWorkDays;
!Напрям
begin
A: array [1..5] of Integer;
for I := 5 downto 1 do
type
Рекурсія корисна для:
завдяки наявності Pascal створювався як мова, що користувачі можуть програмісту мислити структуровано.;== Висновок ==
function Add(A, B: Integer): Integer;
Writeln('Дорослий')
end.; Readln(F, Line);
while not Eof(F) do
Він став популярним через:
Writeln('Hello, world!');
begin
Writeln('Hello!');
var
Через Delphi і Object Pascal мова Pascal стала основою багатьох бізнес-систем.; begin
Недолік
- Pascal — Britannica: https://www.britannica.com/technology/Pascal-computer-language
- Niklaus Wirth — Pascal Revised Report: https://mirrors.apple2.org.za/ftp.apple.asimov.net/documentation/programming/pascal/Pascal-Wirth-PascalRevisedReport.pdf
- ISO 7185:1990 — Pascal: https://www.iso.org/standard/13802.html
- Free Pascal: https://www.freepascal.org/
- Free Pascal Documentation: https://www.freepascal.org/docs.html
- Lazarus IDE: https://www.lazarus-ide.org/
- Modern Object Pascal Introduction for Programmers: https://castle-engine.io/modern_pascal