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

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

Історія розвитку

ред.

У 2003 році на факультеті математики, механіки та комп'ютерних наук ПФУ було створене навчальне середовище програмування Pascal ABC. Система є інтегрованою оболонкою з вбудованим інтерпретатором мови програмування Pascal, близької до мови Delphi. Попри неповну реалізацію мови, вона стала вдалою заміною застарілій системі Turbo Pascal в первісному навчанні програмування. Як навчальну систему її використовували в багатьох регіонах СНД.

У каталозі Soft@Mail.ru програма Pascal ABC в 2006 році визнана програмою тижня.

У 2005—2006 роках система була повністю перероблена: змінена її архітектура — на повноцінний компілятор мови, близької до Delphi, з розширеннями, пов'язаними з платформою .NET. Нова система отримала назву PascalABC.NET.

У червні 2009 з'явилася перша стабільна версія PascalABC.NET 1.2.

У вересні 2009 з'явилося вебсередовище розробки WDE, що не вимагає установки PascalABC.NET на локальний комп'ютер і дозволяє запускати програми на PascalABC.NET безпосередньо з вікна браузера. Ключовою особливістю WDE є те, що програма запускається на сервері, а на клієнтський комп'ютер в інтерактивному режимі передаються лише дані вводу-виводу.

У серпні 2010 у WDE з'явилася можливість створювати прості графічні додатки. Вебсередовище розробки було закрите в жовтні 2017 року.

У серпні 2011 здійснено перехід на .NET 4.0 у версії 1.8.

У січні 2012 вебсередовище розробки WDE також була переведена на .NET 4.0 .

З травня 2012 у вебсередовище розробки додана підтримка компіляторів C# , VB.NET, IronPython і 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.

12 лютого 2016 вийшла версія PascalABC.NET 3.1. З'явилися кортежі і зрізи, значно оновлена ​​стандартна бібліотека.

29 серпня 2016 вийшла версія PascalABC.NET 3.2. З'явилися оператори yield і yield sequence, оновлена стандартна бібліотека.

30 серпня 2017 вийшла версія PascalABC.NET 3.3. З'явилися стандартні модулі GraphWPF і Graph3D, оновлена стандартна бібліотека[1].

Особливості мови 

ред.

Розширення мови Паскаль 

ред.
  • Оператори += -= *= /=
  • Внутрішньоблокова декларація змінних
  • Декларація змінних в заголовку циклу for
  • Ініціалізація змінної при присвоєнні: VAR N: integer: = 10;
  • Автовизначення типу змінної при ініціалізації: VAR X: = 1;
  • Цикл foreach
  • Підпрограми зі змінним числом параметрів
  • Множини set на базі довільних типів Set Of Integer
  • Методи в записах
  • Можливість визначати методи як всередині, так і поза інтерфейсу класу або записи
  • Поряд зі стандартним, спрощений синтаксис модулів
  • Операція new для виклику конструктора класу
  • Ініціалізатор полів класів та записів
  • Перевантаження операторів
  • Статичні конструктори
  • Підтримка директив OpenMP

Особливості мови, пов'язані з платформою .NET 

ред.
  • Всі типи — класи
  • Стандартний тип BigInteger
  • Двовимірні динамічні масиви
  • Інтерфейси .NET
  • Підключення просторів імен .NET в розділі uses
  • Узагальнені класи, інтерфейси, підпрограми та процедурні змінні
  • Автоматична збірка сміття для об'єктів
  • Атрибути
  • Методи розширення
  • Лямбда-функції(Анонімна функція)
  • Автоклас
  • Безіменні класи
  • Підтримка некерованого коду через external

Стандартні модулі 

ред.

Оскільки в 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 є безкоштовним (freeware) програмним забезпеченням, поширюваним під власною пропрієтарною ліцензією.

Див. також

ред.

Посилання

ред.

Примітки

ред.
  1. Что нового в версии (рос.) . Архів оригіналу за 20 лютого 2018.