PascalABC.NET
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) програмним забезпеченням, поширюваним під власною пропрієтарною ліцензією.
Див. також
ред.Посилання
ред.- Сайт проекта «Система программирования PascalABC.NET» [Архівовано 16 лютого 2017 у Wayback Machine.] (рос.)
- Описание языка PascalABC.NET [Архівовано 26 квітня 2017 у Wayback Machine.] (рос.)
- Электронный задачник по программированию Programming Taskbook [Архівовано 5 вересня 2008 у Wayback Machine.] (рос.)
- Форум PascalABC.NET [Архівовано 29 листопада 2016 у Wayback Machine.] (рос.)
- Стаття PascalABC.NET [Архівовано 8 травня 2017 у Wayback Machine.] в Прогопедії — енциклопедії мов програмування (рос.)
Примітки
ред.- ↑ Что нового в версии (рос.) . Архів оригіналу за 20 лютого 2018.