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 |
| Stabiele vrijlating | 3.8.0.2857 / 7 maart 2021
|
| Typediscipline | Statisch , gedeeltelijk afgeleid |
| Implementatie taal | PascalABC.NET |
| OS | Cross-platform |
| Licentie | LGPLv3 |
| Bestandsnaamextensies | .pas |
| Website | pascalabc |
| 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.