Ver Mensaje Individual
  #13  
Antiguo 17-09-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por mamcx Ver Mensaje
Entiendo que intentes ser optimista, pero con Delphi todo ha sido muy consistente por años.

Ademas, es un hecho que en la generalidad de los casos, no se recibe muy bien cambios en los lenguajes que impliquen romper codigo, mucho mas cuando aqui la comunidad delphi es MUY *reaciente* a cambiar.
No es del todo cierto, Mario. Embarcadero muchas veces ha dado como "excusa" el no querer hacer X o Z por justamente lo que comentas, no romper un moton de codigo que ya existe, cuando no se puede preservar la compatibilidad hacia atras.

Pero en muchos otros casos si han "obligado" a ciertos cambios que se han mantenido consistentes desde el dia #1.

Por ejemplo, los string en Delphi desde toda la vida fueron 1-based, soportan COW: simplemente al asignar un nuevo valor a un string, la RTL se encarga de todo. En realidad lo que terminamos teniendo es un string que internamente es "inmutable", pero se tiene cierta "sintaxis sugar" que permite tratarlos como mutables, sin tener que andar usando StringBuilders. Otros lenguajes matarian por poder hacer algo asi. Todo eso esta muy bien en Delphi, pero solo es "estable" en el compilador para Windows

Para los compiladores moviles, los string son 0-based, y aun no, pero en el futuro, podrian volverse "realmente" inmutables:

Cita:
Immutable Strings: If you want to change a character inside an immutable string, you have to break two or more, and combine these portions, or use a TStringBuilder.

For example, the following common operation (indexing into a string and modifying the string) cannot be done with immutable strings:

Código Delphi [-]
 S[1] := 'A';

If you use a string operation such as this, the Delphi mobile compilers emit the warning W1068 Modifying strings in place may not be supported in the future (Delphi). At some point, this warning is to be replaced by an error; you can convert it into an error right now on the Hints and Warnings page in Project Options.

We Recommend Using TStringHelper to Handle Strings in Mobile and Desktop Apps
Eso cambia mucho el codigo que ya existe!!. Por ejemplo: Quien no ha usado la funcion System.Pos. Bien, esa funcion solo sirve para strings con indice 1-based; no sirve para las 0-based. Para solucionarlo, "solamente" debemos usar TStringHelper.IndexOf. En toda nuestra base de codigo.

No solamente pasa con Pos; lo mismo sucede con: Copy, Delete, Trim.. basicamente hay que reescribir el codigo que maneja strings.

En un principio, los compiladores para moviles soportaban el tipo UTF8String. Luego, no se en que version, lo sacaron. Ahora en la ultima, 10.1 Berlin, esta de nuevo.


Entonces, no quiero criticar porque las cosas cambian; para mejorar, hay que cambiar. Si se pierde cierta compatibilidad hacia atras, "lo lamento": no se puede pretender que el codigo que esta escrito en Delphi en el año 2000, funcione sin tocarle absolutamente nada en 2016; no se hasta que punto se puede decir que es una "feature" que el codigo tan legado funcione: es tiempo de refactorizar y mejorar el codigo legado para que use las caracteristicas mas nuevas. Sino, no tiene mucho sentido actualizar el compilador "porque si"

Lo que si es para criticar, es que Embarcadero se jacte de decir: "no queremos perder la compatibilidad hacia atras", y se ponga a jugar con los string (entre otras cosas) como lo ha estado haciendo
Responder Con Cita