PascalABC.NETPascalABC.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]. Особливості мовиРозширення мови Паскаль
Особливості мови, пов'язані з платформою .NET
Стандартні модуліОскільки в PascalABC.NET можна користуватися всіма бібліотеками платформи .NET, то стандартні модулі нечисленні і орієнтовані на навчання:
Приклади програмПриклад 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. Виведення всіх чисел Фібоначчі, менших 1000begin
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. Паралельне множення матриць з використанням директив OpenMPuses 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) програмним забезпеченням, поширюваним під власною пропрієтарною ліцензією. Див. такожПосилання
Примітки
|