Algumas razões para esquecer o PascalABC.Net

1. Introdução


Os tempos do velho e bom Pascal terminaram. Chegou a hora de novos ambientes de desenvolvimento para esse idioma. Muitos dialetos desse idioma apareceram. Embora todos eles tivessem algo em comum. Hoje falaremos sobre o dialeto PascalABC.Net e por que você deve abandoná-lo se realmente deseja fazer programação e pensar que esse é o seu futuro.

Primeiro olhar


Imagine que você é iniciante. Mesmo que não seja. Imagine que você veio ao mundo da programação pela primeira vez e a primeira coisa que você aprendeu é a linguagem Pascal. E eles dizem, é claro, para escrever no ambiente PascalABC.Net. Bem, você se senta e começa a aprender lentamente o próprio idioma. Sua habilidade aumenta e você quer cada vez mais aprender algo novo. E agora você não é o mesmo iniciante que era no início, mas uma pessoa com um nível médio de conhecimento de programação. E a partir deste momento - você começa a sentir algum desconforto ao trabalhar no PascalABC.Net. E quanto mais o estudo do idioma e da plataforma .Net avançar, mais forte você sentirá que a escrita não é muito conveniente. Você começa a perceber alguma instabilidade do próprio IDE. A propósito, você provavelmente já encontrou um problema ao pressionar Ctrl + Z - travando um erro no próprio PascalABC.Net ao tentar desfazer uma ação, após o que não houve dúvida em editar o código. Este é apenas um dos poucos problemas que você precisa enfrentar.

O que vem depois?


E então a diversão começa. Você já usou generalização ao trabalhar? Caso contrário, vale a pena fazer, porque é aqui que você encontrará muitas armadilhas e, com certeza, isso mudará sua opinião positiva sobre o PascalABC.Net para o oposto. Por exemplo:

type
  ft = () -> integer;

begin
  var f: ft := () -> 0;
  var a := Arr(0).Select&<integer,  ft>(i -> f);
end.

ft, ( — ). Select . , a , sequence of ft, sequence of integer. Select , ft TResult ( ). IDE. ? .


, . , . . — C#, PascalABC.Net ( ). , () TA, T. — TB, - T2.

type
  TA<T> = auto class
    X: T;
  end;
  
  TB<T, T2> = class(TA<T>)
    Y: T2;
    constructor Create(x: T; y: T2) := (self.X, self.Y) := (x, y);
  end;

begin
end.

. . :
Internal compiler error in module [pabcnetc.exe] :'System.Exception: System.NullReferenceException: .
PascalABCCompiler.NETGenerator.ILConverter.ConvertCommonGenericInstanceTypeMembers(ICommonGenericTypeInstance value)
PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
PascalABCCompiler.Compiler.Compile()'
? . Issue. : .


, ? ? , , , PascalABC.Net. :

type
  TA = class
    property Prop1: real read 0 write begin end;
  end;

begin end.

Ctrl+Shift+F ( ) :

type
  TA = class
    property Prop1: real read function#GetGen2(real read 00write 
  
  procedure#SetGen1(valuereal read 0 write begin endbegin endproperty 
  
  Prop1: real read#GetGen2 0 write#SetGen1;
end;
  TA = class
    property Prop1: real read 0 write begin end;
  end;

begin end.

, — . . , Ctrl+Z, , .


-, . ? , , . , Ctrl+Z, — , - :
. .
. , . , ( ), . , .

, ?


— C#, Microsoft , PascalABC.Net .


, , , , PascalABC.Net C# — , ( , , IDE ).

P.S. , . ( ).

Source: https://habr.com/ru/post/pt417229/


All Articles