Algunas razones para olvidar PascalABC.Net

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

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


All Articles