ventajas - Lista de las características del lenguaje Delphi y la versión en la que fueron introducidas/desaprobadas
lenguaje de programacion delphi ventajas y desventajas (3)
El archivo jedi.inc utilizado por el proyecto Dephi JEDI expone una serie de características definidas. Si su proyecto es compatible con MPL, incluso podría usarlo para la detección de características y ahorrarse la molestia de reinventar esa rueda en particular.
Por ejemplo, define SUPPORTS_FOR_IN
si el compilador admite enumeradores. Uno podría envolver su código de enumerador en una IFDEF
comprobando esa definición en lugar de buscar una versión de compilador particular.
Antes de comenzar, me gustaría señalar que honesta y genuinamente he buscado repetidas veces exhaustivamente a través de Google para tal cosa, y no he podido encontrar ninguna.
Requiero (para un proyecto que estoy desarrollando) una lista de todos los Delphi (2007 a la última versión publicada, ya no soporto ninguna versión anterior a 2007) "Características del idioma", y las versiones en las que se presentaron y ( si corresponde) obsoleto, mejorado o eliminado.
He observado preguntas similares a esto en Desbordamiento de pila antes, aunque la mayoría de ellas se expresaron en forma de "qué función es la mejor" y se cerraron por considerarlas inadecuadas.
Si alguien sabe de esa lista (o tiene suficiente tiempo libre para compilar una), estaría muy agradecido.
La respuesta aceptada contendrá un enlace a dicha lista o a la propia lista.
Solo para complementar la respuesta de Johan revise esta entrada en mi blog List of changes between versions of Delphi (Since Delphi 5)
y la excelente página The TIndex
que enumera la mayoría de las nuevas características desde delphi 2005 y los recursos sobre cada una.
Tenga en cuenta que esta respuesta solo enumera nuevas funciones de idioma
Aquí están los enlaces al docwiki de RAD Studio:
- Novedades en Delphi y C ++ Builder 10.2 Tokyo
- Qué hay de nuevo en Delphi y C ++ Builder 10.1 Berlin
- Qué hay de nuevo en Delphi y C ++ Builder 10 Seattle
- Qué hay de nuevo en Delphi y C ++ Builder XE8
- Qué hay de nuevo en Delphi y C ++ Builder XE7
- Qué hay de nuevo en Delphi y C ++ Builder XE6
- Qué hay de nuevo en Delphi y C ++ Builder XE5
- Qué hay de nuevo en Delphi y C ++ Builder XE4
- Qué hay de nuevo en Delphi y C ++ Builder XE3
- Qué hay de nuevo en Delphi y C ++ Builder XE2
- Qué hay de nuevo en Delphi y C ++ Builder XE
- Qué hay de nuevo en Delphi y C ++ Builder 2010
- Qué hay de nuevo en Delphi y C ++ Builder 2009
- Qué hay de nuevo en RAD Studio (Delphi para Win32 2007)
- Qué hay de nuevo en RAD Studio (C ++ Builder 2007)
- Qué hay de nuevo en Delphi 2006
- Qué hay de nuevo en Delphi 2005
- Qué hay de nuevo en Delphi 7
- Qué hay de nuevo en Delphi 6
- Qué hay de nuevo en Delphi 5
- Qué hay de nuevo en Delphi 4
- Qué hay de nuevo en Delphi 3
- Qué hay de nuevo en Delphi 2
- Características de Delphi 1
La lista completa de Embarcadero: ¿Qué hay de nuevo?
Ver también: lista de David I
Para resumir:
Delphi 10.3 (nombre clave Carnival) (por confirmar)
- Soporte para OSX de 64 bits
- Tipos anulables
- Soporte para aplicaciones de servidor Linux (Intel de 64 bits usando LLVM y ARC).
- La asignación de matrices dinámicas a un puntero utilizando el operador
@
solo se permite al fundir la matriz. - Resolución de espacio de nombres más flexible de nombres de unidades
- Soporte nativo para tipo Utf8String y RawByteString en todas las plataformas
- Los atributos
[weak]
,[unsafe]
y[volatile]
son compatibles con todos los compiladores. - El tamaño de extendido en OSX ahora es de 16 bytes.
- los ayudantes de clase y registro no pueden acceder a miembros privados de las clases o registros que extienden .
- Soporte para Android hasta 6.01.
- Soporte para Android 5.1.1 e iOS 8.4
- Mejora en el manejo de excepciones OSX
- Soporte para iOS de 64 bits;
- Nuevos tipos de enteros: tipos enteros FixedInt , FixedUInt 32 bits en todas las plataformas;
- Nuevos tipos de enteros dependientes de la plataforma: LongInt , LongWord (64 bits en iOS-64, 32 bits en todas las demás plataformas);
- Operaciones tipo cadena admitidas en matrices dinámicas
- Biblioteca paralela agregada a la RTL
Nuevas rutinas intrínsecas del compilador (no documentadas):
function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;
- Soporte de Android;
necesita un dispositivo con ArmV6 + Neon o ArmV7 para su despliegue
introduce definir condicional ANDROID - Sobrecarga del operador para clases (pero solo para el compilador NextGen {Android / iOS})
Los siguientes nuevos condicionales se introducen / habilitan en XE4:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
PRÓXIMA GENERACIÓN
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF- Compatibilidad reintroducida para iOS.
- Nueva directiva de
dependency
para especificar las dependencias de una biblioteca externa (no documentada hasta XE8). - Soporte de ARC en los compiladores de NextGen (incluido TObject.DisposeOf ).
Tenga en cuenta que gran parte de la base para ARC ya estaba en XE3, pero gran parte de ella estaba desactivada. - Antes de la publicación del XE4, las declaraciones
$IF
solo podían rescindirse con$IFEND
, y las$IFDEF
,$IFNDEF
,$IFOPT
solo podían rescindirse con$ENDIF
.
En XE4, esto cambió, por lo que $ ENDIF se convirtió en un terminador aceptado para $ IF, $ IFDEF, $ IFNDEF y $ IFOPT.
- Ayuda de registro para tipos incorporados
- Se eliminó la compatibilidad con iOS.
- Funciones intrínsecas atómicas:
AtomicExchange()
,AtomicIncrement()
,AtomicCmpExchange()
,AtomicDecrement()
- Introducción del atributo [ref] .
- Soporte multiplataforma para Mac OSX (32 bits) e iOS;
- Soporte para Win64;
- RTL modificado para admitir plataforma cruzada;
-
Packed
ahora Alineación de bytes de bytes de registros (Pre XE2 no necesariamente hizo esto) Se han agregado ocho nuevos DEFINE:
ALIGN_STACK
CPUX86
CPUX64
MACOS (sistema operativo Mac)
MACOS32
PC_MAPPED_EXCEPTIONS
FOTO
WIN64- Ahora se requieren los nombres completos del alcance de la unidad en su cláusula de
uses
. -
{$ExcessPrecision on/off}
directiva del compilador (solo x64) - Los tipos de compilación varían según la plataforma de destino (32/64 bits)
- El tipo de datos extendido es de 10 bytes en Win32, pero 8 (!) Bytes en Win64
- La directiva del compilador
{$STRINGCHECKS}
se ignora en XE; - Nuevo valor de 16 bytes para la directiva
{$ALIGN}
: los valores aceptables para la directiva{$ALIGN}
ahora incluyen 1, 2, 4, 8 y 16. - nueva directiva
{$CODEALIGN}
, esta establece la dirección inicial de un procedimiento o función. - La directiva
{$STRONGLINKTYPES ON}
- Soporte para expresiones regulares.
- Enhanced Delphi RTTI (Información de tipo de tiempo de ejecución).
- Attributes
- El operador
as
se puede usar para convertir una referencia de interfaz al objeto del que se extrajo. - El operador
is
se puede usar para verificar si se extrajo una referencia de interfaz de una determinada clase. - La conversión insegura normal se puede realizar en una interfaz:
TObject(SomeInterface)
. - La nueva directiva
delayed
indica que una biblioteca externa, como una DLL, no se debe cargar en el momento de la declaración, sino que debe esperar hasta la primera llamada al método. - Constructor de clase / Destructor
- La
string
tipo intrínseca ahora se asigna aUnicodeString
; -
{$HighCharUnicode on|off}
directiva del compilador - Generics ;
-
function Default(T): T
función intrínsecafunction Default(T): T
(no documentada) - Punteros inteligentes ;
- Métodos anónimos ;
- Soporte para excepciones anidadas y rastreo de excepciones ;
- soporte para puntero y una nueva directiva de compilación:
{$PointerMath on|off}
; - Cuatro nuevas advertencias del compilador:
-
W1057 Implicit string cast from ''%s'' to ''%s''
, -
W1058 Implicit string cast with potential data loss from ''%s'' to ''%s''
, -
W1059 Explicit string cast from ''%s'' to ''%s''
, -
W1060 Explicit string cast with potential data loss from ''%s'' to ''%s''
;
-
- La función
Exit
puede tomar un parámetro que especifique un resultado; - cadenas de
resourcestrings
como Widestrings; -
TObject
tiene un puntero extra oculto paraTMonitor
además de su puntero VMT; - la palabra clave en
deprecated
ahora puede tener texto adicional
- No hay cambios de idioma que yo sepa;
Tenga en cuenta que Delphi 2007 es una versión sin interrupciones, las DCU de D2006 funcionarán sin cambios en D2007 ; - (La .NET ''personalidad'' de 2007 introdujo los genéricos )
- Registros mejorados ;
- sobrecarga del operador ;
- métodos y propiedades
static
; - ayudantes de clase ;
- FastMM es el administrador de memoria predeterminado;
- palabra clave
strict
visibilidad privada / protegida ; - palabra clave
final
para métodos virtuales; -
{$METHODINFO}
directiva;
-
for ... in
loops, - palabra clave en
inline
- Se permite comodín en la declaración de usos
- tipos anidados
- constantes anidadas
-
{$REGION}
/{$ENDREGION}
directivas
- tres advertencias adicionales del compilador:
- Unsafe_Type,
- Unsafe_Code, y
- Unsafe_Cast. Estas advertencias están deshabilitadas de forma predeterminada, pero se pueden habilitar
- nueva directiva de compilación
{$WARN UNSAFE_CODE ON}
- Sobrecargas de rutinas que formatean y analizan números, valores de fecha y hora y moneda utilizando una estructura
TFormatSettings
.
-
[TCustomVariantType][68]
proporciona sobrecarga al operador para tipos de variantes personalizados - Nuevas directivas de compilación:
-
{$IFDEF MSWINDOWS}
-
{$IFDEF LINUX}
-
{$LIBPREFIX}
- {$LIBPREFIX}
- {$LIBPREFIX}
-
{$MESSAGE ''message''}
-
{$SetPEFlags}
-
- Compatibilidad con las directivas del compilador
{$IF}{$ELSE}
- Directivas de sugerencia del compilador:
experimental
, endeprecated
,library
,platform
(pero sin texto adicional para obsoleto) - La variante ya no se basa en COM sino que ha cambiado para ser compatible con CLX, la variante basada en COM ha cambiado el nombre a
OLEVariant
- Las constantes tipadas no se pueden asignar a (Anular con
{$J+}
) - A los tipos enumerados se les puede asignar un valor explícito (cf C ++);
- Propiedades de interfaz
- Soporte para llamadas a
varargs
externas devarargs
(pero solo para la convención de llamadascdecl
) - variantes personalizadas
Sin nuevas funciones de idioma, pero:
- Arrays dinámicos
-
LongWord
eInt64
;Cardinal
es un UINT32 (antes era un valor sin signo de 31 bits) -
Real
toma 8 bytes y es lo mismo que eldouble
(anteriormente tenía 6 bytes);- Anular con la nueva directiva de compilación
{$REALCOMPATIBILITY ON}
; -
REAL48
reemplaza el viejoreal
6 bytes;
- Anular con la nueva directiva de compilación
- Soporte para cadenas de
resourcestrings
- Sobrecarga de método
- Parámetros predeterminados
-
{$EXTERNALSYM}
y{$NODEFINE}
directivas -
implements
palabra clave para propiedades
- Wordbool, longbool y bytebool almacenan
false
como-1
lugar de 1 (Boolean no se modifica) - Los componentes se deben instalar usando
packages
. - Afirmaciones.
-
out
parámetros. -
Widestring
-
interface
ydispinterface
palabra clave ydispinterface
COM (dispid
).
- Soporte para 32 bits;
-
Ansistring
reemplazashortstring
como el tipo de cadena predeterminado -
Currency
-
Variant
(para interoperabilidad con automatización OLE). - Threading support y la palabra clave
ThreadVar
. - Los datos de 4 bytes son palabras clave
packed
nuevas de 4 bytes que anulan este comportamiento; - TDateTime comienza en
1899/12/30
en D1 comenzó a las0000/00/00
- nueva palabra clave de
finalization
-
register
agregaron las convenciones deregister
y llamada de llamadastdcall
. - palabra clave
packed