PascalABC.NET

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Террарист (обсуждение | вклад) в 09:15, 15 апреля 2022 (Добавил ссылки). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
PascalABC.NET
Семантика императивная
Класс языка мультипарадигменный: структурное, объектно-ориентированное, обобщённое, процедурное программирование, функциональное программирование
Тип исполнения компилятор
Появился в 2002
Автор С. С. Михалкович, И. В. Бондарев, А. В. Ткачук, С. О. Иванов
Расширение файлов .pas
Выпуск 3.8.3 сборка 3090 (09.03.2022)
Система типов статическая
Основные реализации 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, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм. Кроме того, консольный компилятор PascalABC.NET функционирует на Linux и MacOS под Mono.

История развития

В 2003 году на факультете математики, механики и компьютерных наук ЮФУ была создана учебная среда программирования Pascal ABC. Система представляла собой интегрированную оболочку со встроенным интерпретатором языка программирования Паскаль, близкого к языку Delphi. Несмотря на неполную реализацию языка, она стала удачной заменой устаревшей системе Turbo Pascal в первоначальном обучении программированию. Как учебную систему её использовали во многих регионах СНГ. В каталоге Soft@Mail.ru программа Pascal ABC в 2006 году признавалась программой недели[1].

Внешние изображения
Внешний вид программы.

В 20052006 годах система была полностью переработана: изменена её архитектура — на полноценный компилятор языка, близкого к 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

Особенности языка

Расширения языка Паскаль

  • Операторы += -= *= /=
  • Операция ** для возведения в степень
  • Внутриблочные описания переменных
  • Описание переменных в заголовке цикла for
  • Инициализация переменной при описании (var n: integer := 10;)
  • Автоопределение типа переменной при инициализации (var x := 1;)
  • Цикл foreach
  • Упрощенный цикл loop
  • Подпрограммы с переменным числом параметров
  • Множества set на базе произвольных типов (set of integer)
  • case по строкам
  • Методы в записях
  • Возможность определять методы как внутри, так и вне интерфейса класса или записи
  • Наряду со стандартным, упрощённый синтаксис модулей
  • Операция new для вызова конструктора
  • Инициализаторы полей классов и записей
  • Перегрузка операций[2]
  • Автоклассы
  • Безымянные классы
  • Лямбда-выражения
  • Тип функции в стиле 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

  • Все типы — классы
  • Стандартный тип BigInteger
  • Форматные строки
  • Многомерные динамические массивы
  • Интерфейсы .NET
  • Подключение пространств имен .NET в разделе uses
  • Обобщённые классы, интерфейсы, подпрограммы и процедурные переменные
  • Автоматическая сборка мусора для объектов
  • Атрибуты
  • Методы расширения
  • Поддержка неуправляемого кода через external
  • Типы type?, допускающие значение nil (синоним Nullable<T>)

Стандартные модули

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

  • Модуль растровой графики GraphWPF
  • Модуль растровой графики GraphABC (устаревший)
  • Модуль 3D графики и анимации Graph3D (на основе свободной библиотеки Helix Toolkit)
  • Модуль векторной графики WPFObjects
  • Модуль векторной графики ABCObjects (устаревший)
  • Модуль FormsABC для создания графических интерфейсов (на базе технологии Windows Forms)
  • Модуль 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.

Примечания

  1. Программы недели -> программирование Архивировано 4 июня 2012 года.
  2. Перегрузка операций. Дата обращения: 18 сентября 2015. Архивировано из оригинала 4 марта 2016 года.

Ссылки

Литература

  • Михалкович С.С. Учебная система программирования 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.