PascalABC.NET - PascalABC.NET
Paradigma | Multi-paradigma : procedural , funcional , orientado a objetos , genérico |
---|---|
Projetado por | SS Mikhalkovich, Ivan Bondarev, AV Tkachuk, SO Ivanov |
Apareceu pela primeira vez | 2002 |
Versão estável | 3.8.0.2857 / 7 de março de 2021
|
Disciplina de digitação | Estático , parcialmente inferido |
Linguagem de implementação | PascalABC.NET |
SO | Plataforma cruzada |
Licença | LGPLv3 |
Extensões de nome de arquivo | .pas |
Local na rede Internet | pascalabc |
Influenciado por | |
Delphi , Pascal , C # , Python |
PascalABC.NET é uma linguagem de programação Pascal que implementa o Pascal clássico, a maioria dos recursos da linguagem Delphi, bem como várias de suas próprias extensões. É implementado na plataforma .NET Framework e contém todos os recursos da linguagem moderna: classes, sobrecarga de operador , interfaces, tratamento de exceções , classes e rotinas genéricas , coleta de lixo , expressões lambda , ferramentas de programação paralela ( OpenMP somente a partir de 2016).
PascalABC.NET também é um ambiente de desenvolvimento integrado simples e poderoso com depurador integrado, sistema IntelliSense, designer de formulário , modelos de código e formatação automática de código. O compilador PascalABC.NET de linha de comando também está disponível no Linux e MacOS (em Mono).
PascalABC.NET é popular em escolas e universidades russas. Na Southern Federal University, é usada como a língua principal para o ensino de informática no curso "Fundamentos da programação" e para o ensino de crianças em uma das maiores escolas de informática da Rússia.
Principais recursos do PascalABC.NET
Extensões de linguagem Pascal
- Operadores
+= -= *= /=
- definições de variáveis em bloco
- Declaração de variável no
for
cabeçalho do loop - Declaração de variável com inicialização (
var n: integer := 10;
) - Dedução de tipo variável (
var x := 1;
) foreach
- Rotinas com um número variável de parâmetros
-
set
de qualquer tipo (set of integer
) - Métodos em registros
- Métodos definidos na declaração de classe
- Sintaxe simplificada de unidades
- Palavra-chave
new
(invocando um construtor) - Inicializadores de campo
- Sobrecarga do operador
- Construtores estáticos
- Diretivas OpenMP
- caso para cordas
- sintaxe de tipo de função T-> T
- sintaxe de tipo de tupla (T1, T2)
- rendimento e sequência de rendimento
- correspondência de padrões
- fatias de array
- strings interpoladas
- descompactação de parâmetros de expressões lambda em variáveis
Unidades do sistema
A maioria das unidades é voltada para a educação:
- Unidades gráficas raster: GraphABC (baseado em Windows Forms), GraphWPF (baseado em WPF)
- Unidades de gráficos vetoriais ABCObjects (baseado em Windows Forms), WPFObjects (baseado em WPF)
- Gráfico 3D e unidade de animação Graph3D (baseada na biblioteca Helix Toolkit)
- Unidade FormsABC para criar aplicativos simples do Windows sem designer de formulário
- Robô de unidades-executores e Drawman (ciência da computação escolar)
Amostras
1. Troque a primeira e a segunda metades de uma matriz
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. Maior divisor comum de dois inteiros
begin
var (a, b) := ReadInteger2;
while b > 0 do
(a, b) := (b, a mod b);
var GCD := Abs(a);
GCD.Print;
end.
4. Exibir todos os números de Fibonacci menores que 1000
begin
SeqWhile(1,1,(x,y)->x+y,x->x<1000).Print;
end.
5. Dicionário de frequência de palavras para um arquivo
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.
5à. Dicionário de frequência de palavras para um arquivo. Solução em estilo funcional
begin
ReadLines('words.txt').SelectMany(s->s.ToWords).GroupBy(v->v).EachCount.PrintLines;
end.
6. Multiplicação de matrizes paralelas usando diretivas 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.