О PascalABC.NET

Что такое PascalABC.NET

PascalABC.NET — современный статически типизированный язык программирования общего назначения и система программирования на платформе .NET.

Несмотря на название, PascalABC.NET — не реализация классического Паскаля и не диалект Delphi. От паскалевской традиции он наследует часть синтаксиса и базовых принципов, но имеет собственную систему языковых конструкций и собственную линию развития.

На PascalABC.NET можно написать первую программу в несколько строк, изучать алгоритмы и структуры данных, осваивать объектно-ориентированное и функциональное программирование, решать олимпиадные задачи, использовать библиотеки .NET, выполнять научные расчёты, анализировать данные и применять методы машинного обучения.

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

Зачем создавался PascalABC.NET

Многие языки, ориентированные на первое знакомство с программированием, естественно перерастаются по мере усложнения задач. Многие промышленные языки, напротив, требуют от начинающего значительного количества технических деталей ещё до того, как он освоил основные понятия программирования.

PascalABC.NET создавался как язык, который позволяет пройти большой путь в одной языковой среде: от первых программ и классических алгоритмов до современных абстракций, библиотек .NET и достаточно сложных программных проектов.

При этом язык остаётся статически типизированным и компилируемым: компилятор обнаруживает многие ошибки ещё до запуска программы, а скомпилированный код обеспечивает высокую эффективность выполнения.

В основе PascalABC.NET лежит баланс простоты, раннего обнаружения ошибок, выразительности и эффективности.

Язык развивается в постоянной обратной связи с практикой преподавания. На протяжении многих лет новые конструкции, библиотеки и методические подходы проверяются в реальных учебных курсах — от школьного до университетского уровня. Но образовательная направленность определяет прежде всего требования к ясности и последовательности языка, а не ограничивает область его применения.

Принципы языка

От алгоритмов к современным абстракциям

Одна из принципиальных особенностей PascalABC.NET — возможность естественно переходить от классического алгоритмического программирования к современным способам обработки данных, не теряя понимания того, что происходит внутри.

Возьмём задачу: дан массив слов, нужно получить длины этих слов. В виде алгоритма это обычный цикл:

var a := ['холодный','белый','плохой','злой','спелый'];
foreach var word in a do
  Print(word.Length);

Ту же задачу можно решить, используя метод преобразования Select с параметром, задаваемом лямбда-выражением word -> word.Length:

a.Select(word -> word.Length).Print;

Это решение одной и той же задачи, записанное на разных уровнях абстракции. Тот, кто уже понял цикл, видит в Select не «магию», а свёрнутую запись знакомого действия.

Дальше такие операции естественно складываются в цепочки. Например, чтобы найти минимальную длину слова, достаточно добавить .Min:

a.Select(word -> word.Length).Min

вместо того чтобы заново перестраивать алгоритм цикла под новую задачу.

Работает и обратный путь: освоив библиотечный метод, можно разобрать алгоритм, который за ним стоит. Это даёт методическую свободу: один и тот же материал можно подавать от алгоритма к методу или от метода к алгоритму — в зависимости от аудитории и цели.

Статическая типизация и раннее обнаружение ошибок

PascalABC.NET — статически типизированный компилируемый язык. Ещё до запуска программы компилятор проверяет синтаксис, совместимость типов, области видимости, корректность вызовов и другие семантические условия.

Например, в коде:

var n := 10;
n := 'abc';

переменная n имеет тип integer, выведенный при её объявлении, поэтому присвоить ей строку нельзя. Ошибка обнаруживается компилятором до запуска программы.

Для обучения это особенно важно: программист с самого начала видит, что у каждого значения есть тип, какие операции над этим типом допустимы и почему конкретная строка программы ошибочна.

При этом PascalABC.NET не требует постоянно указывать типы вручную. Явное описание типов и автовывод типов существуют в языке вместе и позволяют выбирать нужный уровень явности.

Такой подход даёт и естественный маршрут к другим языкам. После освоения типов, областей видимости, функций, классов, интерфейсов, обобщений и лямбда-выражений многие понятия непосредственно узнаются в C#, Java и C++. Возможен и другой путь: сначала сформировать представление о типах в статически типизированном PascalABC.NET, а затем перейти к динамической типизации Python.

Явность там, где она нужна

PascalABC.NET не навязывает единственный способ записи программы.

Тип переменной можно указать явно:

var n: integer := 10;

или позволить компилятору вывести его по правой части:

var n := 10;

Оба варианта создают статически типизированную переменную. Явная запись полезна, когда тип важен для понимания программы или является предметом изучения; автовывод — когда тип очевиден и его повторение только перегружает код.

То же относится к сложным выражениям. Цепочку операций

var sum := a.Where(x -> x in 2..5).Sum;

можно разбить на именованные шаги:

var filtered := a.Where(x -> x in 2..5);
var sum := filtered.Sum;

Степень компактности и явности выбирается исходя из задачи и читаемости кода, а не диктуется языком.

Разные парадигмы программирования

На PascalABC.NET можно писать программы в процедурном, объектном, объектно-ориентированном и функциональном стилях, а также сочетать эти подходы.

Язык поддерживает классы, наследование, интерфейсы, полиморфизм, обобщённые классы и подпрограммы, перегрузку операций, исключения, методы расширения, лямбда-выражения и другие современные средства.

Это позволяет использовать один язык на разных этапах обучения и разработки: от явных алгоритмов с циклами и условиями до объектных моделей и функциональной обработки последовательностей.

Короткий код — не самоцель

В PascalABC.NET многое сделано для компактной записи программ: автовывод типов, диапазоны, срезы, кортежи, операции += и *=, лямбда-выражения, цепочки методов.

Но краткость не является целью сама по себе. Короткая запись полезна, если она делает программу понятнее или точнее выражает операцию. Если промежуточные шаги важны для понимания, их лучше сделать явными.

Поэтому PascalABC.NET стремится не к минимальному количеству символов, а к разумной компактности при сохранении структуры и читаемости кода.

Происхождение и развитие языка

PascalABC.NET развивается как самостоятельный язык с 2007 года.

Его синтаксическая основа связана с Pascal и Object Pascal, существенное влияние на архитектуру языка оказал C#, а в дальнейшем в PascalABC.NET использовались и переосмысливались удачные идеи Python, Kotlin, Java, Haskell и других современных языков.

При этом развитие PascalABC.NET не сводится к переносу чужих конструкций. Новые возможности оцениваются с точки зрения того, делают ли они программу понятнее, выразительнее и удобнее для написания и изучения.

Некоторые решения появились в PascalABC.NET значительно раньше, чем в других языках паскалевской традиции. Например, объявление переменной непосредственно в заголовке цикла

for var i := 1 to 10 do

используется в PascalABC.NET с 2007 года — более чем за десять лет до появления аналогичной конструкции в Delphi.

Внутриблочные описания переменных, автовывод типов, расширенные циклы, диапазоны, кортежные операции, методы расширения, лямбда-выражения и последовательности сегодня определяют собственный стиль программирования на PascalABC.NET.

Поэтому PascalABC.NET правильнее рассматривать не как «современную реализацию старого Паскаля», а как самостоятельный современный язык с Pascal-подобным синтаксисом и собственной линией развития.

Применение PascalABC.NET

В школе, на ЕГЭ и в олимпиадах

PascalABC.NET используется в российской школе на базовом уровне информатики, а также при подготовке и сдаче ЕГЭ по информатике.

В олимпиадном программировании PascalABC.NET поддерживается крупными системами проведения соревнований и автоматической проверки решений, включая Яндекс Контест, Codeforces и ACMP.ru. Развитые библиотеки и выразительные средства языка позволяют писать компактный код и сосредоточиться на алгоритме решения задачи.

Для школьного обучения в PascalABC.NET создана собственная инфраструктура:

  1. встроенный электронный задачник Programming Taskbook;
  2. учебные исполнители Робот и Чертёжник;
  3. механизм автоматически проверяемых заданий;
  4. LightPT — легковесная невидимая система автоматической проверки программ;
  5. графические учебные модули.

В высшем образовании

PascalABC.NET используется и в университетском преподавании — в том числе как первый язык программирования на профильных ИТ-направлениях.

Например, на направлении «Фундаментальная информатика и информационные технологии» мехмата Южного федерального университета с PascalABC.NET ежегодно начинают изучение программирования около ста студентов. Язык используется также при подготовке будущих учителей информатики.

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

В научных и вычислительных задачах

Как язык общего назначения на платформе .NET, PascalABC.NET предоставляет доступ к библиотекам .NET и может использоваться для обработки данных, математических вычислений, моделирования и вычислительных экспериментов.

Для анализа данных и машинного обучения развивается библиотека ML PascalABC.NET без внешних зависимостей, включающая средства работы с табличными данными, линейной алгеброй, статистикой и алгоритмами машинного обучения.

Компилятор PascalABC.NET поддерживает .NET 10, поэтому из языка доступны библиотеки и API современной платформы .NET.

Платформа .NET и средства разработки

PascalABC.NET — это не только язык, но и система программирования.

Собственная IDE PascalABC.NET ориентирована на простой старт и одновременно предоставляет средства повседневной разработки: автодополнение, подсказки по коду, автоматическое форматирование, диагностику ошибок, примеры программ, средства автоматической проверки решений и модульного тестирования.

Расширение PascalABC.NET для Visual Studio Code предоставляет IntelliSense, отображение ошибок, компиляцию и запуск программ.

В нём доступны два компилятора:

  • компилятор для .NET Framework 4.7.2, работающий в Windows и Linux через Mono;
  • современный компилятор PascalABC.NET для .NET 10, поддерживающий Windows, Linux и macOS.

Таким образом, PascalABC.NET можно использовать как в собственной IDE, так и в современной кроссплатформенной среде Visual Studio Code.

Разработка и сообщество

PascalABC.NET распространяется на свободной лицензии LGPL.

У проекта есть постоянно действующий форум поддержки, официальный Telegram-канал и группа для обсуждения языка с тематическими подгруппами.

Среда разработки и диагностические сообщения PascalABC.NET поддерживают несколько языков. В программах можно использовать Unicode-идентификаторы, в том числе имена на кириллице, латинице и других письменностях.

Развитие языка, компилятора, библиотек и учебной инфраструктуры продолжается; обратная связь от преподавателей и пользователей остаётся одним из источников развития проекта.

PascalABC.NET — российский язык программирования

PascalABC.NET — единственный широко используемый современный язык программирования общего назначения и система программирования, полностью разработанные и поддерживаемые в России.

Язык, компиляторы, среды разработки, библиотеки и образовательная инфраструктура PascalABC.NET полностью создаются, развиваются и поддерживаются в России.

В 2022 году PascalABC.NET вошёл в состав российских дистрибутивов Linux, ориентированных на образование: ALT Linux Образование, Astra Linux Orel Special Edition и М ОС.