Elenco delle funzionalità del linguaggio Delphi e della versione in cui sono state introdotte / deprecate


114

Prima di iniziare, vorrei sottolineare che ho cercato onestamente e sinceramente ripetutamente ed esaurientemente tramite Google una cosa del genere e non sono riuscito a trovarne una.

Richiedo (per un progetto che sto sviluppando) un elenco di tutte le "Funzioni linguistiche" di Delphi (dal 2007 all'ultima versione rilasciata, non supporto più alcuna versione precedente alla 2007), e le versioni in cui sono state introdotte e ( ove applicabile) deprecato, migliorato o rimosso.

Ho già notato domande simili a questa su Stack Overflow in precedenza, sebbene la maggior parte di queste fossero formulate nella forma di "quale funzionalità è la migliore" e chiuse in quanto ritenute inadatte.

Se qualcuno conosce un elenco del genere (o ha abbastanza tempo libero per compilarne uno), sarei molto grato.

La risposta accettata conterrà un collegamento a tale elenco o l'elenco stesso.


D: Allora perché ti serve esattamente un elenco del genere? D: Stai cercando di creare un set di codici (forse un componente o una libreria) che supporti tutte le piattaforme tra BDS2007 e XE2 (ovvero non utilizza funzionalità più recenti di BDS2007)? D: Se è così, perché non provare a compilare nel 2007 e vedere cosa si rompe? (PS: sto ancora usando felicemente BDS2006;)).
paulsm4

8
Simon controlla questa domanda Elenco assortito delle novità in Delphi Language, RTL, VCL? , Anche sul mio blog mantengo un elenco
RRUZ

3
@ paulsm4 1) Quindi posso tenere conto delle limitazioni delle funzionalità tra le versioni nelle biblioteche pubbliche, 2) Sì (ma non necessariamente una libreria dei componenti), 3) Perché è più facile sapere in anticipo che testare costantemente su diverse versioni ogni singolo aspetto di una libreria . Teoricamente D2006 funzionerebbe bene, ma non lo sosterrò attivamente (senza offesa).
LaKraven

Risposte:


159

Nota che questa risposta elenca solo le nuove funzionalità della lingua ,
non le nuove funzionalità VCL / FMX.

Di seguito sono riportati i collegamenti al docwiki di RAD Studio:

L'elenco completo di Embarcadero: Novità
Vedi anche: Elenco di David I.


Riassumere:

Delphi 10.3.x, 10.4 (non ancora uscito, questo è speculativo)

Delphi 10.3

  • Il compilatore Linux a 64 bit non utilizza più ARC , utilizza invece la gestione manuale predefinita, che è la stessa del compilatore Windows. Ciò rende molto più semplice il porting del codice da Windows o OSX a Linux.
  • Variabili in linea con inferenza automatica del tipo
  • Supporto per AnsiChar / AnsiString a 8 bit abilitato su Linux.
  • C ++ Builder e Delphi ora usano la stessa ABI per tutte le chiamate.

Delphi 10.2 Tokyo

Delphi 10.1 Berlino

Delphi 10 Seattle

  • Supporto per Android 5.1.1 e iOS 8.4
  • Gestione delle eccezioni OSX migliorata

Delphi XE8

  • Supporto per iOS a 64 bit;
  • Nuovi tipi interi: FixedInt , FixedUInt tipi interi a 32 bit su tutte le piattaforme;
  • Nuovi tipi di interi dipendenti dalla piattaforma: LongInt , LongWord (64 bit su iOS-64, 32 bit su tutte le altre piattaforme);

Delphi XE7

Delphi XE6

Delphi XE5

Delphi XE4

In XE4, questo è cambiato in modo che $ ENDIF diventasse un terminatore accettato per $ IF, $ IFDEF, $ IFNDEF e $ IFOPT.

Delphi XE3

Delphi XE2

Delphi XE

  • La {$STRINGCHECKS}direttiva del compilatore viene ignorata in XE;
  • Nuovo valore a 16 byte per la {$ALIGN}direttiva: i valori accettabili per la {$ALIGN}direttiva ora includono 1, 2, 4, 8 e 16.
  • nuova {$CODEALIGN}direttiva, imposta l'indirizzo iniziale per una procedura o una funzione.
  • La {$STRONGLINKTYPES ON}direttiva
  • Supporto per espressioni regolari.

Delphi 2010

  • Delphi RTTI (informazioni sul tipo di tempo di esecuzione) migliorato.
  • attributi
  • L' asoperatore può essere utilizzato per eseguire il cast di un riferimento all'interfaccia all'oggetto da cui è stato estratto.
  • L' isoperatore può essere utilizzato per verificare se un riferimento all'interfaccia è stato estratto da una determinata classe.
  • Getto pericoloso normale può essere eseguita su un'interfaccia: TObject(SomeInterface).
  • nuova delayeddirettiva indica che una libreria esterna come una DLL non deve essere caricata al momento della dichiarazione ma deve attendere fino alla prima chiamata al metodo
  • Costruttore / distruttore di classe

Delphi 2009

Delphi 2007

  • Nessun cambiamento di lingua che io sappia;
    Si noti che Delphi 2007 è una versione non definitiva, i DCU di D2006 funzioneranno invariati in D2007 ;
  • (La 'personalità' .NET del 2007 ha introdotto i generici )

Delphi 2006

Delphi 2005

  • for ... in loop,
  • inline parola chiave
  • Carattere jolly nell'istruzione use consentita
  • tipi annidati
  • costanti annidate
  • {$REGION}/ {$ENDREGION}direttive

Delphi 7

  • tre avvisi aggiuntivi per il compilatore:
    • Unsafe_Type,
    • Unsafe_Code e
    • Unsafe_Cast. Questi avvisi sono disabilitati per impostazione predefinita, ma possono essere abilitati
  • nuova direttiva del compilatore {$WARN UNSAFE_CODE ON}
  • Sovraccarichi di routine che formattano e analizzano numeri, valori di data e ora e valuta utilizzando una TFormatSettingsstruttura.

Delphi 6

Delphi 5

Nessuna nuova funzionalità linguistica, ma:

Delphi 4

  • Array dinamici
  • LongWorde Int64; Cardinalè un UINT32 (prima che fosse un valore a 31 bit senza segno)
  • Realrichiede 8 byte ed è uguale a double(in precedenza era di 6 byte);
    • Eseguire l'override con la nuova {$REALCOMPATIBILITY ON}direttiva del compilatore;
    • REAL48sostituisce il vecchio 6 byte real;
  • Supporto per resourcestrings
  • Sovraccarico del metodo
  • Parametri predefiniti
  • {$EXTERNALSYM}e {$NODEFINE}direttive
  • implementsparola chiave per proprietà

Delphi 3

  • Wordbool, longbool e bytebool memorizzano truecome -1invece di 1 (Boolean è invariato)
  • I componenti devono essere installati utilizzando packages.
  • Asserzioni.
  • out parametri.
  • Widestring
  • interfacee dispinterfaceparola chiave e dispidsupporto COM ( ).

Delphi 2

  • Supporto per 32 bit;
  • Ansistringsostituisce shortstringcome tipo di stringa predefinito
  • Currency
  • Variant (per l'interoperabilità con l'automazione OLE).
  • Supporto e ThreadVarparola chiave di threading .
  • I dati a 4 byte sono allineati a 4 byte La nuova packedparola chiave sovrascrive questo comportamento;
  • TDateTime inizia 1899/12/30 sotto D1 in cui è iniziato0000/00/00
  • nuova finalizationparola chiave
  • registere stdcallconvenzioni di chiamata aggiunte.
  • packed parola chiave.

Ah meraviglioso! Non sono riuscito a trovare un modo per far sì che Docwiki mi mostrasse pagine specifiche per le versioni precedenti di Delphi (pre XE2) ... non ho idea del perché! Questo è meraviglioso ed è stato contrassegnato come la risposta corretta! Grazie!
LaKraven

@DavidHeffernan È utile avere le nuove funzionalità nel 2007 poiché questo stabilisce la linea di base ... in un certo senso, saprò con certezza se una parte di ciò che sto producendo potrebbe forse funzionare nelle versioni precedenti (anche se io stesso ho nessuna intenzione di sostenerlo)
LaKraven

9
Sul mio blog mantengo un elenco
RRUZ

3
Holy Crap RITARDATO, che è FANTASTICO! Perché non ti danno questo elenco quando esegui l'upgrade!
Peter Turner

1
Questo non è accurato. $LIBPREFIXe altre direttive esistono almeno da D7 (sospetto D6, poiché sono correlate a Kylix)
Consulenza gratuita

16

Solo per completare la risposta di Johan controlla questa voce sul mio blog List of changes between versions of Delphi (Since Delphi 5)e l'eccellente pagina The TIndexche elenca la maggior parte delle nuove funzionalità da Delphi 2005 e le risorse su ciascuna di esse.


Qualche tempo fa un altro sito delphi delphi3000 è stato contrassegnato come pericoloso per alcuni antivirus.
RRUZ

2
Sono il proprietario di The TIndex e posso confermare che si tratta di un falso positivo.
LachlanG,

7

Il file jedi.inc utilizzato dal progetto JEDI Dephi espone una serie di definizioni di funzionalità. Se il tuo progetto è compatibile con MPL, potresti persino usarlo per il rilevamento delle funzionalità e risparmiarti la fatica di reinventare quella particolare ruota.

Ad esempio, definisce SUPPORTS_FOR_INse il compilatore supporta gli enumeratori. Si potrebbe racchiudere il codice dell'enumeratore in una IFDEFverifica per quella definizione piuttosto che per una particolare versione del compilatore.


Sì, questo include è sicuramente utile, ma manca della completezza di un elenco dettagliato (da cui questa domanda). Grazie per il suggerimento ... considera la risposta accettata a questa domanda un miglioramento delle informazioni fornite da jedi.inc :)
LaKraven

1
@ LaKraven: Vero, ci sono molte cose che non ottiene, ma per alcuni potrebbe essere sufficiente. Ha anche il vantaggio di essere già fatto. :-) Personalmente, penso che anche l'appiattimento delle gerarchie VCL, l'eliminazione delle intestazioni del copyright e il loro lancio in un repository di controllo della versione potrebbero essere utili. In questo modo puoi vedere quando sono state implementate particolari funzionalità RTL / VCL.
afrazier

@LaKraven, credo jedi.incalmeno sia accurato, mentre l'elenco di Johan necessita di alcune verifiche.
Consulenza gratuita
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.