PascalABC.NET - PascalABC.NET
| Paradigma | Multiparadigma : procedurale , funzionale , orientato agli oggetti , generico |
|---|---|
| Progettato da | SS Mikhalkovich, Ivan Bondarev, AV Tkachuk, SO Ivanov |
| Apparso per la prima volta | 2002 |
| Rilascio stabile | 3.8.0.2857 / 7 marzo 2021
|
| Disciplina di digitazione | Statico , parzialmente dedotto |
| Linguaggio di implementazione | PascalABC.NET |
| OS | Multipiattaforma |
| Licenza | LGPLv3 |
| Estensioni dei nomi dei file | .pas |
| Sito web | pascalabc |
| Influenzato da | |
| Delphi , Pascal , C# , Python | |
PascalABC.NET è un linguaggio di programmazione Pascal che implementa il Pascal classico, la maggior parte delle funzionalità del linguaggio Delphi e alcune delle proprie estensioni. È implementato sulla piattaforma .NET Framework e contiene tutte le funzionalità del linguaggio moderno: classi, sovraccarico degli operatori , interfacce, gestione delle eccezioni , classi e routine generiche , garbage collection , espressioni lambda , strumenti di programmazione parallela ( solo OpenMP dal 2016).
PascalABC.NET è anche un ambiente di sviluppo integrato semplice e potente con debugger integrato, sistema IntelliSense, form designer , modelli di codice e formattazione automatica del codice. Il compilatore PascalABC.NET da riga di comando è disponibile anche su Linux e MacOS (sotto Mono).
PascalABC.NET è popolare nelle scuole e nelle università russe. Nella Southern Federal University, è usato come lingua principale per insegnare agli studenti la tecnologia dell'informazione nel corso "Fondamenti di programmazione" e per insegnare ai bambini in una delle più grandi scuole di informatica in Russia.
Caratteristiche principali di PascalABC.NET
Estensioni del linguaggio Pascal
- Operatori
+= -= *= /= - definizioni di variabili in-block
- Dichiarazione di variabile
fornell'intestazione del ciclo - Dichiarazione di variabile con inizializzazione (
var n: integer := 10;) - Detrazione di tipo variabile (
var x := 1;) foreach- Routine con un numero variabile di parametri
-
setdi qualsiasi tipo (set of integer) - Metodi nei record
- Metodi definiti nella dichiarazione di classe
- Sintassi semplificata delle unità
- Parola chiave
new(richiamando un costruttore) - Inizializzatori di campo
- Sovraccarico dell'operatore
- Costruttori statici
- Direttive OpenMP
- caso per le stringhe
- sintassi del tipo di funzione T->T
- sintassi del tipo tupla (T1, T2)
- resa e sequenza di resa
- corrispondenza del modello
- fette di array
- stringhe interpolate
- spacchettamento dei parametri delle espressioni lambda in variabili
Unità di sistema
La maggior parte delle unità si concentra sull'istruzione:
- Unità grafiche raster GraphABC (basato su Windows Form), GraphWPF (basato su WPF)
- Unità di grafica vettoriale ABCObjects (basato su Windows Form), WPFObjects (basato su WPF)
- Unità di grafica e animazione 3D Graph3D (basata sulla libreria Helix Toolkit)
- Unit FormsABC per creare semplici applicazioni Windows senza form designer
- Unità-esecutori Robot e Disegnatore (informatica scolastica)
Campioni
1. Scambia la prima e la seconda metà di un array
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. Grande comun divisore di due interi
begin
var (a, b) := ReadInteger2;
while b > 0 do
(a, b) := (b, a mod b);
var GCD := Abs(a);
GCD.Print;
end.
4. Visualizza tutti i numeri di Fibonacci inferiori a 1000
begin
SeqWhile(1,1,(x,y)->x+y,x->x<1000).Print;
end.
5. Dizionario delle frequenze di parole per un file
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.
5a. Dizionario di frequenza di parole per un file. Soluzione in stile funzionale
begin
ReadLines('words.txt').SelectMany(s->s.ToWords).GroupBy(v->v).EachCount.PrintLines;
end.
6. Moltiplicazione di matrici parallele usando le direttive OpenMP
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 := MatrixRandomReal(n,n,1,1.1);
var b := MatrixRandomReal(n,n,1,1.1);
var c := new real[n,n];
Mult(a,b,c,n);
Println(MillisecondsDelta/1000);
end.