PascalABC.NET
| PascalABC.NET | |
|---|---|
| Семантика | императивная |
| Класс языка | мультипарадигменный: структурное, объектно-ориентированное, обобщённое, процедурное программирование, функциональное программирование |
| Тип исполнения | компилятор |
| Появился в | 2007 |
| Автор | PascalABC.NET Compiler Team |
| Расширение файлов |
.pas |
| Выпуск | 3.11.0 сборка 3702 (17.11.2025) |
| Система типов | статическая |
| Основные реализации |
PascalABC.NET, Pascal ABC (поддержка прекращена) |
| Испытал влияние | Паскаль, Delphi, C#, Python, Kotlin |
| Лицензия | LGPL |
| Сайт | pascalabc.net |
| Платформа | .NET CLR (WinXP и старше), Mono (Linux, MacOS) |
PascalABC.NET — язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: внутриблочные описания, автоопределение типа, кортежи, срезы, классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, лямбда-выражения, средства параллельного программирования.
PascalABC.NET позиционируется разработчиками как язык программирования для сферы образования и научных исследований
PascalABC.NET является мультипарадигменным языком: на нём можно программировать в структурном, объектно-ориентированном и функциональном стилях.
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм, функционирующая на Windows и Linux Кроме того, консольный компилятор PascalABC.NET функционирует на MacOS под Mono.
История развития
В 2003 году на факультете математики, механики и компьютерных наук ЮФУ была создана учебная среда программирования Pascal ABC. Система представляла собой интегрированную оболочку со встроенным интерпретатором языка программирования Паскаль, близкого к языку Delphi. Несмотря на неполную реализацию языка, она стала удачной заменой устаревшей системе Turbo Pascal в первоначальном обучении программированию. Как учебную систему её использовали во многих регионах СНГ.
В 2005—2006 годах система была полностью переработана: изменена её архитектура — на полноценный компилятор языка, близкого к Delphi, с расширениями, связанными с платформой .NET. Новая система получила название PascalABC.NET. В июне 2009 года появилась первая стабильная версия PascalABC.NET 1.2.
В сентябре 2009 г. появилась веб-среда разработки WDE, не требующая установки PascalABC.NET на локальный компьютер и позволяющая запускать программы на PascalABC.NET непосредственно из окна браузера. Веб-среда разработки была закрыта в октябре 2017 года.
В августе 2011 г. осуществлен переход на .NET 4.0 (версия 1.8).
В феврале 2013 г. вышла версия PascalABC.NET 2.0 с дизайнером форм и поддержкой проектов.
15 мая 2013 г. вышла версия 2.1 с английской локализацией интерфейса и сообщений об ошибках.
15 февраля 2014 г. вышла версия PascalABC.NET 2.2. Многократно ускорено обращение к символам строки на запись.
28 августа 2015 г. вышла версия PascalABC.NET 3.0. PascalABC.NET стал свободным и распространяется под лицензией LGPLv3.
12 февраля 2016 г. вышла версия PascalABC.NET 3.1. Появились кортежи и срезы, значительно обновлена стандартная библиотека.
29 августа 2016 г. вышла версия PascalABC.NET 3.2. Появились операторы yield и yield sequence, обновлена стандартная библиотека.
30 августа 2017 г. вышла версия PascalABC.NET 3.3. Появились стандартные модули GraphWPF и Graph3D (для Windows Vista и выше), упрощенный цикл loop, операция безопасного среза, кортежное присваивание, поддержка Nullable-типов. Добавлена украинская локализация интерфейса и сообщений об ошибках.
11 февраля 2018 г. вышла версия PascalABC.NET 3.3.5. Добавлен стандартный модуль NumLibABC (учебная библиотека численных методов), реализованы форматные строки и операция возведения в степень. В полную версию дистрибутива (для Windows Vista и выше) интегрирована .NET 4.7.1, для Windows XP оставлен дистрибутив с .NET 4.0.
25 мая 2018 г. вышла версия PascalABC.NET 3.4. Реализовано некоторое подмножество Pattern Matching, расширенный оператор is.
1 сентября 2018 г. вышла версия PascalABC.NET 3.4.2. Реализованы расширенные свойства, расширенные индексные свойства и автосвойства, добавлен модуль WPFObjects как замена устаревшему ABCObjects.
25 мая 2019 г. вышла версия PascalABC.NET 3.5. В Pattern Matching добавлена возможность сопоставления со списками, кортежами и константами.
16 января 2020 г. вышла версия PascalABC.NET 3.6.0. Реализована операция .., возвращающая IntRange или CharRange в зависимости от контекста, а также условная операция: var min := if a < b then a else b;
7 мая 2020 г. вышла версия PascalABC.NET 3.6.3. Реализована операция доступа по индексу с конца a[^1] для массивов, списков и строк. Реализована возможность использовать срезы в левой части оператора присваивания: a[:2] := a[3:5]. Значительно ускорен перенаправленный ввод
8 августа 2020 г. вышла версия PascalABC.NET 3.7. Реализованы распаковка последовательности в переменные, массивы-значения в виде |1,3,5,7,9|, запись программ без внешнего begin-end с использованием ## (## Print(2*2))
7 марта 2021 г. вышла версия PascalABC.NET 3.8. Реализованы расширенный оператор foreach (foreach var (x,y) in a), литералы для BigInteger в виде 1bi, срезы многомерных массивов в виде m[:,:], m[^1,:], лямбда-выражения с распаковкой параметров (s.Where(\(name,age) -> age >= 18)).
24 августа 2021 г. вышла версия PascalABC.NET 3.8.1. Реализован атрибут [Cache] для кеширования результатов функции, полноценная директива {$zerobasedstrings}, стандартный модуль PlotWPF.
9 марта 2022 г. вышла версия PascalABC.NET 3.8.3. Реализованы конструкции for var i:=1 to 6 step 2 do и foreach var x in a index i do
10 июля 2023 г. вышла версия PascalABC.NET 3.9.0. Реализована ковариантность параметров обобщенных типов, именованные аргументы. Реализована Linux-версия IDE. Добавлен стандартный модуль LightPT легковесной автоматической проверки заданий.
26 августа 2024 г. вышла версия PascalABC.NET 3.10.0. Реализованы многострочные строковые литералы, операция to для пары Ключ-Значение.
12 марта 2025 г. вышла версия PascalABC.NET 3.10.3. По умолчанию синтаксис [1,2,3] теперь закреплен за массивами. Для множеств теперь явно надо указывать тип. Введен новый тип faststring, ускоряющий многие операции со строками. Реализован метод Coords для вывода простых графических примитивов с возможностью масштабирования. Значительно ускорены встроенные множества set of T.
Особенности языка
Расширения языка Паскаль
- Операторы
+= -= *= /= - Операция
**для возведения в степень - Внутриблочные описания переменных
- Описание переменных в заголовке цикла
for - Инициализация переменной при описании (
var n: integer := 10;) - Автоопределение типа переменной при инициализации (
var x := 1;) - Цикл
foreach - Упрощенный цикл
loop - Подпрограммы с переменным числом параметров
- Множества
setна базе произвольных типов (set of integer) caseпо строкам- Методы в записях
- Возможность определять методы как внутри, так и вне интерфейса класса или записи
- Наряду со стандартным, упрощённый синтаксис модулей
- Операция
newдля вызова конструктора - Инициализаторы полей классов и записей
- Перегрузка операций
- Автоклассы
- Безымянные классы
- Лямбда-выражения
- Тип функции в стиле
T->T - Тип кортежа в стиле
(T1,T2) - Тип последовательности
sequence of T - Кортежное присваивание
(a,b) := (b,a) - Срезы
a[from:to:step]и безопасные срезыa?[from:to:step]для массивов, списков и строк - Многомерные срезы
a[:,:10] - Операторы
yieldиyield sequenceдля генерации последовательностей - Оператор
match ... withсопоставления с образцом - Расширенная операция
is - Расширенные свойства, автосвойства
- Интерполяция строк
- Индексация с конца:
a[^1] := 777; - Диапазоны
..и цикл по диапазону:foreach var i in 1..10 do Print(i); - Цикл
forс шагом:for var i:=1 to 10 step 2 do Print(i); - Цикл
foreachс индексом:foreach var x in Arr(1,3,5) index i do Println(i,x); - Распаковка параметров лямбда-выражений
\(x,y) -> x + y - Частичная поддержка директив OpenMP
- Ковариантность параметров обобщенных типов
- Именованные аргументы
Особенности языка, связанные с платформой .NET
- Все типы — наследники класса Object
- Стандартный тип BigInteger
- Форматные строки
- Многомерные динамические массивы
- Интерфейсы .NET
- Подключение пространств имен .NET в разделе
uses - Обобщённые классы, интерфейсы, подпрограммы и процедурные переменные
- Автоматическая сборка мусора для объектов
- Атрибуты
- Методы расширения
- Поддержка неуправляемого кода через external
- Типы
type?, допускающие значениеnil(синонимNullable<T>)
Программирование в функциональном стиле
Функции в PascalABC.NET являются объектами первого класса - их можно присваивать переменным, передавать как параметры и возвращать из других функций. Тип функции задается в виде T -> Res, переменной такого типа может быть присвоена анонимная функция:
var f: real -> real := x -> x*x;
Ниже демонстрируется пример суперпозиции двух функций:
function Super<T,T1,T2>(f: T1 -> T2; g: T -> T1): T -> T2 := x -> f(g(x));
var f: real -> real := x -> x*x;
var fg := Super(f,Sin);
var gf := Super(Sin,f);
Print(fg(2));
Print(gf(2));
Операция суперпозиции определена над функциями в стандартной библиотеке:
var f: real -> real := x -> x*x;
Print((f*Cos)(2));
Print((Cos*f)(2));
В книге "How To Program Effectively In Delphi"[1] и в одноимённом цикле видео[2] программист и специалист в области преподавания компьютерных наук доктор Кевин Бонд[3] отмечает мощные функциональные возможности PascalABC.NET, отсутствующие в Delphi. В качестве примера подробно рассматривается[2][4] частичное применение функции:
var f: real -> real -> real := x -> y -> x + y;
Print(f(2)(3));
Стандартные модули
Поскольку в PascalABC.NET можно пользоваться всеми библиотеками платформы .NET, стандартные модули немногочисленны и ориентированы на обучение:
- Модуль растровой графики GraphWPF
- Модуль растровой графики GraphABC (для Linux)
- Модуль 3D графики и анимации Graph3D (на основе свободной библиотеки Helix Toolkit)
- Модуль векторной графики WPFObjects
- Модуль векторной графики ABCObjects (устаревший)
- Модуль FormsABC для создания графических интерфейсов (на базе технологии Windows Forms)
- Модуль WPF для создания графических интерфейсов (на базе технологии WPF)
- Модуль NumLibABC (библиотека численных методов)
- Модуль PlotWPF для визуализации данных
- Модули исполнителей Робот и Чертёжник (школьная информатика)
- Модуль электронного задачника Programming Taskbook
Примеры программ
Пример 1. Поменять местами первую и вторую половины массива
begin
var a := ArrGen(10, i->2*i+1);
a.Println;
Assert(a.Length mod 2 = 0);
var n := a.Length div 2;
a := a[n:] + a[:n];
a.Println;
end.
Пример 2. 100!
begin
var P := 1bi;
for var i := 1 to 100 do
P := P * i;
Println(P);
end.
Пример 3. Вывести все числа Фибоначчи, меньшие 1000
begin
SeqWhile(1, 1, (x, y) -> x + y, x -> x < 1000).Print;
end.
Пример 4. Нахождение наибольшего общего делителя двух чисел
begin
var (a, b) := ReadInteger2;
while b <> 0 do
(a, b) := (b, a mod b);
var НОД := Abs(a);
НОД.Print;
end.
Пример 5. Частотный словарь слов в файле
begin
var D := new Dictionary<string, integer>;
foreach var s in ReadLines('words.txt') do
foreach var word in s.ToWords do
D[word] := D.Get(word) + 1;
D.PrintLines;
end.
Пример 5а. Частотный словарь слов в файле. Решение в функциональном стиле
begin
ReadLines('words.txt').SelectMany(s -> s.ToWords).GroupBy(v -> v).ToDictionary(x -> x.Key, x -> x.Count).PrintLines;
end.
Пример 6. Максимальные значения в столбцах матрицы
begin
var (M, N) := (4, 5);
var A := MatrRandom(M, N);
A.Println;
A.Cols.Select(col -> col.Max).Println;
end.
Пример 7. Параллельное умножение матриц с использованием директив OpenMP
procedure Mult(a, b, c: array [,] of real; n: integer);
begin
{$omp parallel for}
for var i := 0 to n - 1 do
for var j := 0 to n - 1 do
begin
var cc := 0.0;
for var l := 0 to n - 1 do
cc += a[i, l] * b[l, j];
c[i, j] := cc;
end;
end;
const N = 1000;
begin
var A := MatrRandomReal(N, N, 1, 1.1);
var B := MatrRandomReal(N, N, 1, 1.1);
var C := new real[N, N];
Mult(A, B, C, N);
Writeln(MillisecondsDelta / 1000);
end.
Лицензия
PascalABC.NET (начиная с версии 3.0) является свободным программным обеспечением, распространяемым под лицензией LGPLv3.
Аудит исходного кода
В 2017[5] и 2022[6] годах был проведён независимый аудит публичного репозитория исходного кода PascalABC.NET при помощи статического анализатора PVS-Studio. По результатам проверок сформированы списки потенциально опасных ситуаций в коде, требующих дополнительного анализа со стороны разработчиков. Также отмечено, что общее качество кода можно улучшить. Для этого необходимо устранить дублирования кода, избыточные проверки, а также более аккуратно проводить рефакторинг.
Примечания
- ↑ Kevin R. Bond. Chapter 44. Anonymous methods // How to Program Effectively in Delphi for AS/A Level Computer Science. — Educational Computing Services Ltd, 2021. — 1200 с.
- ↑ 1 2 Kevin Bond. How to Program Effectively in Delphi. Lesson 44. Part 1 (англ.). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ Brief biography Dr Kevin R Bond (англ.). Educational Computing Services Ltd. Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ Delphi Boot Camp 2022 - Delphi and functional programming using anonymous methods (англ.). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ Проверяем проект PascalABC.NET с помощью плагинов для SonarQube: SonarC# и PVS-Studio. PVS-Studio (29 марта 2017). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ PascalABC.NET, повторная проверка. Хабр (25 января 2022). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
Ссылки
- Сайт проекта «Система программирования PascalABC.NET»
- Публичный репозиторий исходного кода языка на Github
- Описание языка PascalABC.NET
- Официальный телеграм-канал PascalABC.NET
- Электронный задачник по программированию Programming Taskbook
- Форум PascalABC.NET
- Курс "PascalABC.NET: современный код" на Stepik
Литература
- Михалкович С.С. Учебная система программирования PascalABC // Научно-методическая конференция «Современные информационные технологии в образовании: Южный Федеральный округ» 13—14 мая 2004 / Крукиер Л.А., Муратова Г.В.. — Ростов-на-Дону: ЮГИНФО РГУ, 2004. — С. 156—158. — 252 с. — 200 экз.
- Михалкович С.С. Учебная система программирования PascalABC: опыт разработки и использования // Вторая международная научно-практическая конференция «Современные информационные технологии и ИТ-образование»: Сборник трудов. — М., 2006. — С. 394—399.
- Водолазов Н.Н., Михалкович С.С., Ткачук А.В. Опыт разработки учебного языка программирования для платформы .NET // Научно-методическая конференция «Современные информационные технологии в образовании: Южный Федеральный округ» 26—29 апреля 2007 / Крукиер Л.А., Муратова Г.В.. — Ростов-на-Дону: Изд-во «ЦВВР», 2007. — С. 71—73. — 312 с. — 250 экз. — ISBN 978-5-94153-146-2.
- Михалкович С.С., Абрамян М.Э. Основы программирования на языке PascalABC.NET. Скалярные типы данных, управляющие операторы, знакомство с массивами, процедуры и функции, работа с графикой. — Ростов-на-Дону: Изд-во Южного федерального университета, 2017. — 246 с. — ISBN 978-5-9275-2493-8.
- Долинер Л.И. Основы программирования в среде PascalABC.NET. — Екатеринбург: Изд-во «Уральский федеральный университет», 2014. — 128 с. — ISBN 978-5-7996-1260-3.
- Осипов А.В. PascalABC.NET: Введение в современное программирование. — Ростов-на-Дону: Интернет-издание, 2019. — 572 с.
- Осипов А.В. PascalABC.NET: выбор школьника. Часть 1.. — Ростов-на-Дону: Изд-во Южного федерального университета, 2020. — 152 с. — 150 экз.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.