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.
, .
( ).