始める前に、私はGoogleを介してそのようなことを正直かつ真剣に繰り返し徹底的に検索し、見つけられなかったことを指摘したいと思います。
(開発中のプロジェクトの場合)すべてのDelphi(2007から最新リリースバージョンまで、2007年より古いバージョンはサポートしていません)、「言語機能」、およびそれらが導入されたバージョン(該当する場合)廃止、改善、または削除。
以前にStack Overflowでこれと同様の質問に注意しましたが、それらのほとんどは「どの機能が最適か」という形で表現され、不適切と思われるため閉じられました。
誰かがそのようなリストを知っている(またはコンパイルするのに十分な時間がある)場合、私は非常に感謝します。
受け入れられた回答には、そのようなリストへのリンク、またはリスト自体が含まれます。
この回答は、新しい言語機能のみをリストしていることに注意してください
not新しいVCL/FMX機能。
RAD Studio docwikiへのリンクは次のとおりです。
Embarcaderoの完全なリスト: What's New
以下も参照してください: David I's list
要約する:
Delphi 10.3.x、10.4(まだ出ていません、これは投機的です)
@
_演算子を使用した動的配列のポインターへの割り当ては、配列をハードキャストする場合にのみ許可されます。[weak]
_、_[unsafe]
_および_[volatile]
_属性 は、すべてのコンパイラーでサポートされています。function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;
XE4では、次の新しい条件が導入/有効になりました。
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
NEXTGEN
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF
dependency
ディレクティブ (XE8まで文書化されていません)。$IF
_ステートメントは_$IFEND
_ でのみ終了でき、_$IFDEF
_、_$IFNDEF
_、_$IFOPT
_ディレクティブは_$ENDIF
_でのみ終了します。XE4では、$ ENDIFが$ IF、$ IFDEF、$ IFNDEF、および$ IFOPTの受け入れられるターミネーターになるように変更されました。
AtomicExchange()
、 AtomicIncrement()
、 AtomicCmpExchange()
、 AtomicDecrement()
Packed
はレコードのバイトアライメントを強制する (XE2以前では、必ずしもこれを実行しなかった)8つの新しいDEFINEが追加されました。
ALIGN_STACK
CPUX86
CPUX64
MACOS(Macオペレーティングシステム)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
WIN64
uses
句には完全なユニットスコープ名が必要になりました。{$ExcessPrecision on/off}
_コンパイラ指令 (x64のみ){$STRINGCHECKS}
_コンパイラ指令は無視されます。{$ALIGN}
_ディレクティブの新しい16バイト値:_{$ALIGN}
_ディレクティブの許容値には、1、2、4、8、および16が含まれるようになりました。{$CODEALIGN}
_ディレクティブ、これはプロシージャまたは関数の開始アドレスを設定します。{$STRONGLINKTYPES ON}
_ディレクティブas
演算子を使用すると、抽出元のオブジェクトにインターフェイス参照をキャストできます。is
演算子を使用して、インターフェイス参照が特定のクラスから抽出されたかどうかを確認できます。TObject(SomeInterface)
。delayed
ディレクティブは、DLLなどの外部ライブラリは宣言時にロードされず、メソッドの最初の呼び出しまで待機することを示しますstring
がUnicodeString
にマップされるようになりました。{$HighCharUnicode on|off}
_コンパイラ指令function Default(T): T
組み込み関数(文書化されていない){$PointerMath on|off}
_;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'
_;Exit
関数は、結果を指定するパラメーターを取ることができます。resourcestrings
ワイドストリングとして;TObject
には、VMTポインターに加えて TMonitor
への追加の非表示ポインター があります。deprecated
キーワードに追加のテキストを含めることができるようになりましたstatic
メソッドとプロパティ。strict
private/protected visibility keyword ;final
キーワード。{$METHODINFO}
_ディレクティブ;for ... in
_ループ、inline
キーワード{$REGION}
_/_{$ENDREGION}
_ディレクティブDelphi 7 (
{$WARN UNSAFE_CODE ON}
_TFormatSettings
構造体を使用して、数値、日時値、および通貨をフォーマットおよび解析するルーチンのオーバーロード。Delphi 6 (
[TCustomVariantType][68]
_が提供する カスタムバリアント型の演算子オーバーロード{$IFDEF MSWINDOWS}
_{$IFDEF LINUX}
_{$LIBPREFIX}
_{$LIBSUFFIX}
_{$LIBVERSION}
_{$MESSAGE 'message'}
_{$SetPEFlags}
_{$IF}{$ELSE}
_コンパイラディレクティブのサポートexperimental
、deprecated
、library
、platform
(ただし、廃止予定の追加テキストなし)OLEVariant
に名前が変更されました{$J+}
_でオーバーライド)varargs
外部関数の呼び出しのサポート(ただし、cdecl
呼び出し規約のみ)Delphi 5 (
新しい言語機能はありませんが、次のとおりです。
Delphi 4 (
LongWord
および_Int64
_; Cardinal
はUINT32(符号なし31ビット値になる前)Real
は8バイトで、double
と同じです(以前は6バイトでした); {$REALCOMPATIBILITY ON}
_コンパイラ指令でオーバーライドします。REAL48
_は、古い6バイトのreal
;を置き換えます。resourcestrings
のサポート{$EXTERNALSYM}
_および_{$NODEFINE}
_ディレクティブimplements
キーワード プロパティ用true
を1ではなく_-1
_として保存します(ブール値は変更されません)packages
を使用してインストールする必要があります。out
パラメーター。Widestring
interface
およびdispinterface
キーワードおよびCOM(dispid
)サポート。Johan の答えを補完するために、ブログでこのエントリを確認してください List of changes between versions of Delphi (Since Delphi 5)
と素晴らしいページ The TIndex
これは、delphi 2005以降のほとんどの新機能と各機能に関するリソースをリストしています。
Dephi JEDIプロジェクトで使用される jedi.inc ファイルは、一連の機能定義を公開します。プロジェクトがMPL互換である場合、機能検出に使用することさえでき、特定のホイールを再発明する手間を省くことができます。
たとえば、SUPPORTS_FOR_IN
コンパイラが列挙子をサポートする場合。特定のコンパイラバージョンをチェックするのではなく、その定義をチェックするIFDEF
で列挙子コードをラップすることができます。