Introduccion
Los tiempos del viejo y buen Pascal han terminado. Ha llegado el momento de nuevos entornos de desarrollo para este lenguaje. Han aparecido muchos dialectos de este idioma. Aunque todos tenían algo en común. Hoy hablaremos sobre el dialecto PascalABC.Net y por qué debería abandonarlo si realmente quiere hacer programación y piensa que este es su futuro.
Primer vistazo
Imagina que eres un principiante. Incluso si no lo es. Imagina que llegaste al mundo de la programación por primera vez y lo primero que tienes que aprender es el lenguaje Pascal. Y dicen, por supuesto, escribir en el entorno PascalABC.Net. Bueno, te sientas y comienzas a aprender lentamente el idioma. Su habilidad aumenta y cada vez más quiere aprender algo nuevo. Y ahora no eres el mismo principiante que al principio, sino una persona con un nivel promedio de conocimiento de programación. Y a partir de este mismo momento, comienza a sentir cierta incomodidad al trabajar en PascalABC.Net. Y cuanto más avance el estudio del lenguaje y la plataforma .Net, más fuerte sentirá que escribir no es muy conveniente. Comienza a notar cierta inestabilidad del IDE en sí. Por cierto, es probable que ya haya encontrado un problema al presionar Ctrl + Z, bloqueando un error en PascalABC.Net al intentar deshacer una acción, después de lo cual no hubo duda de editar el código. Este es solo uno de los pocos problemas que tiene que enfrentar.
Que sigue
Y entonces comienza la diversión. ¿Alguna vez ha usado la generalización cuando trabajaba? Si no, entonces vale la pena hacerlo, porque es aquí donde encontrará muchas trampas y, con seguridad, esto hará que su opinión positiva sobre PascalABC.Net sea todo lo contrario. Por un ejemplo:
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.
, .
( ).