PascalABC.NET - 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 ; 19 anni fa ( 2002 )
Rilascio stabile
3.8.0.2857 / 7 marzo 2021 ; 3 mesi fa ( 2021-03-07 )
Disciplina di digitazione Statico , parzialmente dedotto
Linguaggio di implementazione PascalABC.NET
OS Multipiattaforma
Licenza LGPLv3
Estensioni dei nomi dei file .pas
Sito web pascalabc .net /it /
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.

Guarda anche

Riferimenti

link esterno