PascalABC.NET - 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 ; 19 anos atras ( 2002 )
Versão estável
3.8.0.2857 / 7 de março de 2021 ; 3 meses atrás ( 2021-03-07 )
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 .net / en /
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 forcabeç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
  • setde 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.

Veja também

Referências

links externos