PascalABC.NET

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
PascalABC.NET
Семантика императивная
Класс языка мультипарадигменный: структурное, объектно-ориентированное, обобщённое, процедурное программирование, функциональное программирование
Тип исполнения компилятор
Появился в 2002
Автор С. С. Михалкович, И. В. Бондарев, А. В. Ткачук, С. О. Иванов
Выпуск 3.4, сборка 1672 (10.06.2018)
Система типов статическая
Основные реализации: PascalABC.NET,
Pascal ABC (поддержка прекращена)
Испытал влияние Паскаль, Delphi, C#, Python
Лицензия LGPL
Платформа .NET CLR (WinXP и старше), Mono (Linux, MacOS)
Сайт pascalabc.net

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

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

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

История развития[править | править код]

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

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

В 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.

Особенности языка[править | править код]

Расширения языка Паскаль[править | править код]

  • Операторы += -= *= /=
  • Операция ** для возведения в степень
  • Внутриблочные описания переменных
  • Описание переменных в заголовке цикла 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] для массивов, списков и строк
  • Операторы yield и yield sequence для генерации последовательностей
  • Оператор match ... with сопоставления с образцом
  • Расширенная операция is
  • Частичная поддержка директив OpenMP

Особенности языка, связанные с платформой .NET[править | править код]

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

Стандартные модули[править | править код]

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

  • Модуль растровой графики GraphWPF
  • Модуль растровой графики GraphABC (устаревший)
  • Модуль 3D графики и анимации Graph3D (на основе свободной библиотеки Helix Toolkit)
  • Модуль векторной графики WPFObjects
  • Модуль векторной графики ABCObjects (устаревший)
  • Модуль FormsABC для создания графических интерфейсов (на базе технологии WinForms)
  • Модуль NumLibABC (библиотека численных методов)
  • Модули исполнителей Робот и Чертёжник (школьная информатика)
  • Модуль электронного задачника 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: BigInteger := 1;
  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 НОД := 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[править | править код]

 1 procedure Mult(a, b, c: array [,] of real; n: integer);
 2 begin
 3   {$omp parallel for}
 4   for var i := 0 to n - 1 do
 5     for var j := 0 to n - 1 do
 6     begin  
 7        var cc := 0.0;
 8        for var l := 0 to n - 1 do
 9           cc += a[i, l] * b[l, j];
10        c[i, j] := cc;   
11     end;
12 end;
13  
14 const N = 1000;
15  
16 begin
17   var A := MatrRandomReal(N, N, 1, 1.1);
18   var B := MatrRandomReal(N, N, 1, 1.1);
19   var C := new real[N, N];
20   Mult(A, B, C, N);
21   Writeln(MillisecondsDelta() / 1000);
22 end.

Лицензия[править | править код]

PascalABC.NET (начиная с версии 3.0) является свободным программным обеспечением, распространяемым под лицензией LGPLv3.

Примечания[править | править код]

Ссылки[править | править код]

Литература[править | править код]

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