PascalABC.NET

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
PascalABC
Семантика:

императивная

Класс языка:

мультипарадигменный: структурное, объектно-ориентированное, обобщённое, процедурное программирование, функциональное программирование

Тип исполнения:

компилятор

Появился в:

2002

Автор:

С. С. Михалкович, И. В. Бондарев, А. В. Ткачук, С. О. Иванов

Выпуск:

3.0, сборка 1024 (28.08.2015)

Система типов:

статическая

Основные реализации:

PascalABC.NET,
Pascal ABC(поддержка прекращена)

Испытал влияние:

Паскаль, Delphi, C#

Лицензия:

LGPL

Сайт:

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 г. появилась веб-среда разработки[2] WDE, не требующая установки PascalABC.NET на локальный компьютер и позволяющая запускать программы на PascalABC.NET непосредственно из окна браузера. Ключевой особенностью WDE является то, что программа запускается на сервере, а на клиентский компьютер в интерактивном режиме передаются лишь данные ввода-вывода. Для зарегистрированных пользователей доступен личный файловый архив программ с возможностью навигации, а также с возможностью предоставлять другим пользователям доступ к опубликованным программам на чтение в стиле Google Docs. В августе 2010 г. в WDE появилась возможность создавать простые графические приложения[3].

В августе 2011 г. осуществлен переход на .NET 4.0 (версия 1.8). В январе 2012 г. веб-среда разработки WDE также была переведена на .NET 4.0.

С мая 2012 г. в веб-среду разработки добавлена поддержка компиляторов C#, VB.NET, Iron Python и F#, в связи с чем она была переименована в ProgrammingABC.NET WDE.

В феврале 2013 г. вышла версия PascalABC.NET 2.0 с дизайнером форм и поддержкой проектов.

15 мая 2013 г. вышла версия 2.1 с английской локализацией интерфейса и сообщений об ошибках.

15 февраля 2014 г. вышла версия PascalABC.NET 2.2. Многократно ускорено обращение к символам строки на запись.

28 сентября 2015 г. вышла версия PascalABC.NET 3.0. PascalABC.NET стал свободным и распространяется под лицензией LGPLv3.

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

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

  • Операторы += -= *= /=
  • Внутриблочные описания переменных
  • Описание переменных в заголовке цикла for
  • Инициализация переменной при описании (var n: integer := 10;)
  • Автоопределение типа переменной при инициализации (var x := 1;)
  • Цикл foreach
  • Подпрограммы с переменным числом параметров
  • Множества set на базе произвольных типов (set of integer)
  • Методы в записях
  • Возможность определять методы как внутри, так и вне интерфейса класса или записи
  • Наряду со стандартным, упрощённый синтаксис модулей
  • Операция new для вызова конструктора
  • Инициализаторы полей классов и записей
  • Перегрузка операций[4]
  • Статические конструкторы
  • Поддержка директив OpenMP
  • case по строкам
  • Множества произвольных типов (на базе хеш-таблицы)

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

  • Все типы — классы
  • Стандартный тип BigInteger
  • Двумерные динамические массивы
  • Интерфейсы .NET
  • Подключение пространств имен .NET в разделе uses
  • Обобщённые классы, интерфейсы, подпрограммы и процедурные переменные
  • Автоматическая сборка мусора для объектов
  • Атрибуты
  • Методы расширения
  • Лямбда-функции
  • Автоклассы
  • Безымянные классы
  • Поддержка неуправляемого кода через external
  • Тип последовательности sequence of T

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

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

  • Модуль растровой графики GraphABC
  • Модуль векторной графики ABCObjects
  • Модуль FormsABC для создания простых оконных приложений без дизайнера форм
  • Модуль Arrays для ввода-вывода-заполнения одномерных и двумерных динамических массивов
  • Модуль Collections, содержащий упрощенные классы коллекций
  • Модули исполнителей Робот и Чертёжник (школьная информатика)

Примеры программ[править | править вики-текст]

Пример 1. Использование методов расширения для программирования в функциональном стиле[править | править вики-текст]

var a: array of integer := (1,3,5,7,9,11,13,15,17,19);

begin
  a.Println;
  // Поменять местами первую и вторую половины массива с четным количеством элементов
  Assert(a.Length mod 2 = 0);
  var n := a.Length div 2;
  a.Skip(n).Concat(a.Take(n)).Println; 
end.

Пример 2. 100![править | править вики-текст]

begin
  var p: BigInteger := 1;
  for var i:=1 to 100 do
    p := p * i;
  write(p);
end.

Пример 3. Вывод всех чисел Фибоначчи, меньших 1000[править | править вики-текст]

begin
  SeqWhile(1,1,(x,y)->x+y,x->x<1000).Print;
end.

Пример 4. Частотный словарь слов в файле[править | править вики-текст]

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.Print(NewLine);
end.

Пример 4а. Частотный словарь слов в файле. Решение в функциональном стиле[править | править вики-текст]

begin
  ReadLines('words.txt').SelectMany(s->s.ToWords()).GroupBy(v->v).ToDictionary(x->x.Key,x->x.Count()).Print(NewLine);
end.

Пример 5. Параллельное умножение матриц с использованием директив OpenMP[править | править вики-текст]

uses Arrays;
 
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 := Arrays.CreateRandomRealMatrix(n,n,1,1.1);
  var b := Arrays.CreateRandomRealMatrix(n,n,1,1.1);
  var c := new real[n,n];
  var d := Milliseconds;
  Mult(a,b,c,n);
  writeln((Milliseconds-d)/1000);
end.

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

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

PascalABC[править | править вики-текст]

PascalABC, независимый от платформы .NET Framework перестал поддерживаться в сентябре 2007 года. Предположительная последняя версия IDE - PascalABC 3.0.1.35 (17.4.2007).

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

Ссылки[править | править вики-текст]

Литература[править | править вики-текст]

  • Михалкович С.С. Учебная система программирования 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.
  • Абрамян М.Э., Михалкович С.С. Основы программирования на языке Паскаль: Скалярные типы данных, управляющие операторы, процедуры и функции. — Ростов-на-Дону: ООО «ЦВВР», 2004. — 198 с. — ISBN 5-94153-075-7.
  • Абрамян М.Э., Белякова Ю.В., Михалкович С.С. Использование веб-среды PascalABC.NET для дистанционного обучения программированию // Журнал «Дистанционное и виртуальное обучение». — 2012. — Т. 3. — С. 14—24.