PascalABC.NET - PascalABC.NET

PascalABC.NET
Paradigma Multi-paradigma : procedureel , functioneel , objectgericht , generiek,
Ontworpen door SS Mikhalkovich, Ivan Bondarev, AV Tkachuk, SO Ivanov
Verscheen voor het eerst 2002 ; 19 jaar geleden ( 2002 )
Stabiele vrijlating
3.8.0.2857 / 7 maart 2021 ; 3 maanden geleden ( 2021-03-07 )
Typediscipline Statisch , gedeeltelijk afgeleid
Implementatie taal PascalABC.NET
OS Cross-platform
Licentie LGPLv3
Bestandsnaamextensies .pas
Website pascalabc .net /en /
Beïnvloed door
Delphi , Pascal , C# , Python

PascalABC.NET is een Pascal- programmeertaal die klassieke Pascal, de meeste Delphi-taalfuncties en een aantal van hun eigen extensies implementeert. Het is geïmplementeerd op het .NET Framework- platform en bevat alle moderne taalfuncties: klassen, overbelasting van operators , interfaces, afhandeling van uitzonderingen , generieke klassen en routines , garbage collection , lambda-expressies , parallelle programmeertools ( alleen OpenMP vanaf 2016).

PascalABC.NET is ook een eenvoudige en krachtige geïntegreerde ontwikkelomgeving met geïntegreerde debugger, IntelliSense-systeem, formulierontwerper , codesjablonen en automatische opmaak van code. Command-line PascalABC.NET compiler is ook beschikbaar op Linux en MacOS (onder Mono).

PascalABC.NET is populair op Russische scholen en universiteiten. In de Southern Federal University wordt het gebruikt als de hoofdtaal voor het onderwijzen van studenten informatietechnologie in de cursus "Fundamentals of programming" en voor het onderwijzen van kinderen in een van de grootste computerscholen in Rusland.

Belangrijkste kenmerken van PascalABC.NET

Pascal-taalextensies

  • Operators += -= *= /=
  • in-block variabele definities
  • Variabeledeclaratie in forluskop
  • Variabeledeclaratie met initialisatie ( var n: integer := 10;)
  • Variabele type aftrek ( var x := 1;)
  • foreach
  • Routines met een variabel aantal parameters
  • setvan elk type ( set of integer)
  • Methoden in records
  • Methoden gedefinieerd in klassendeclaratie
  • Vereenvoudigde syntaxis van eenheden
  • Trefwoord new(aanroepen van een constructor)
  • Veldinitialisatoren
  • Overbelasting van de operator
  • Statische constructors
  • Richtlijnen OpenMP
  • koffer voor snaren
  • functietype syntaxis T->T
  • tuple-type syntaxis (T1, T2)
  • opbrengst en opbrengstvolgorde
  • patroon matching
  • array segmenten
  • geïnterpoleerde strings
  • uitpakken van parameters van lambda-expressies in variabelen

Systeemeenheden

De meeste units zijn gericht op onderwijs:

  • Raster grafische eenheden GraphABC (gebaseerd op Windows Forms), GraphWPF (gebaseerd op WPF)
  • Vector grafische eenheden ABCObjects (gebaseerd op Windows Forms), WPFObjects (gebaseerd op WPF)
  • 3D-graphics & animatie-eenheid Graph3D (gebaseerd op de Helix Toolkit-bibliotheek)
  • Unit FormsABC om een ​​eenvoudige Windows-toepassing te maken zonder formulierontwerper
  • Units-uitvoerders Robot en Drawman (schoolinformatica)

Monsters

1. Verwissel de eerste en tweede helft van een 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. Grotere gemene deler van twee gehele getallen

begin
  var (a, b) := ReadInteger2;
  while b > 0 do
    (a, b) := (b, a mod b);
  var GCD := Abs(a);
  GCD.Print;
end.

4. Toon alle Fibonacci-nummers kleiner dan 1000

begin
  SeqWhile(1,1,(x,y)->x+y,x->x<1000).Print;
end.

5. Woordenboek met woordfrequentie voor een bestand

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. Woordfrequentiewoordenboek voor een bestand. Oplossing in functionele stijl

begin
  ReadLines('words.txt').SelectMany(s->s.ToWords).GroupBy(v->v).EachCount.PrintLines;
end.

6. Parallelle matrixvermenigvuldiging met behulp van OpenMP-richtlijnen

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.

Zie ook

Referenties

Externe links