表示: Delphi C++
表示設定

新機能

提供: RAD Studio
移動先: 案内, 検索

メインページ への移動

目次

RAD Studio 10.3 Rio リリースでは、次のような新機能の追加や既存機能の強化が行われています。

Delphi 言語

インライン変数宣言

10.3 における Delphi 言語では、ローカル変数の宣言に一層の柔軟性を与えるため、主要部に大きな変更が施されています。これまで、伝統的な Pascal 言語の規約に従い、すべての変数と定数宣言は、関数、プロシージャ、メソッドのコードの開始前に記述される、var または const のブロックで行われる必要がありました。

新しいインライン変数宣言の構文により、コード内に直接、変数や定数を宣言できるようになり、また、同じ文の中で直接それに値を割り当てることができます。変数を入れ子になったコード ブロック内で、可視性の指定とその入れ子ブロック内に制限されるライフタイムで、宣言することも可能になりました。

型推論

インラインに宣言された変数には、型推論の利点があります。直接代入するインライン変数には、型を指定する必要はありません。これは、そこに代入される値から型を推論できるからです。

Linux コンパイラでの従来のメモリ参照カウント

10.3 での Linux 64 ビット コンパイラでは、Windows の動作に完全に一致するよう、オブジェクトのメモリ管理に非 ARC 実装を使用するよう “元に戻しました”。

NEXTGEN の定義は、Linux 64 ビット コンパイラで無効となっています。

Linux での AnsiString / AnsiChar

RAD Studio 10.3 Rio では、Linux における旧スタイルの AnsiChar/AnsiString データ型に対するサポートが有効になっています。これらは注意して使用してください。Unicode は Linux 上でも推奨される文字列型であり、また、Windows や Linux 上での Ansi コード ページは一致しません。しかしながら、既存の低層レベルの文字列管理コードとの互換性向上には向いています。

C++

Clang アップグレード:C++17 サポート

C++Builder および RAD Studio 10.3 では、Windows 32 ビット用 C++17 をサポートする、更新された Clang 拡張コンパイラが導入されています。漸進的なコンパイラ アップグレードの一環として、最新の C++ 言語機能を使用して、より強力で簡潔なコードや、より高速なコードを提供するコンパイラの最適化、より強力なアプリケーションを構築するためのサードパーティ製 C++ ライブラリの利用が可能になっています。

  • Win32 用 C++17 Clang 拡張コンパイラおよびツールチェーン(bcc32x and bcc32c)。
  • 更新された Win32 用 Clang 拡張コンパイラでビルドされた C++ ランタイム ライブラリ(RTL)。Dinkumware STL の 2018 エディションを含む。
  • C++14 サポートも含む
  • 改善されたコード補完機能

Clang がデフォルトに

以前のリリースでは、新たに作成された C++ プロジェクトは、Win32 プラットフォームではデフォルトでクラシック コンパイラを使用するようになっていました。これが変更され、デフォルトでは Clang 拡張コンパイラとなっています。

後方互換性

Win32 コンパイラでは、すべてのプロジェクトにおいてデフォルトが C++17 となりました。ただし、[プロジェクト オプション|C++ コンパイラ]ページにおいて、以前の言語標準(C++14、C++11、や C++98/03 を含む)を使用するよう変更することができます。

C++17 での新機能

C++17 では、ユーザーの生産性やコードを強化する素晴らしい新機能が含まれています。

C++17 における新機能の概要をつかむには、以下をご一読ください:

C++11 から C++17 へアップグレードすることにより、RAD Studio 10.3 Rio では、C++14 に対するサポートも含まれています。

STL/Dinkumware の新バージョン

C++Builder は、Dinkumware STL を使用して、Windows の C++ 標準ライブラリを提供しています。C++Builder 10.3 は、更新された Dinkumware STL の 2018 バージョンを、Win32 と Win64 の両方に対して使用しています。

Win64 における数学パフォーマンスの向上

多くの C++ 数学関数が新たに実装されました。これらのメソッドは以前のリリースに比べて、平均しておおよそ 2 倍の速度になっています。

C++ のコード補完の向上

C++ Win32 のコード補完は、更新された Clang 拡張 C++ コンパイラを使用しており、以前の C++ コード補完よりはるかに高速に、またよい結果を出すようになっています。 言語サーバー プロトコル サーバー、cquery を使用しています。

このコンパイラのコード補完は、非同期で行われます。補完の計算中に入力が停止されなくなるでしょう。言語サーバー プロトコル サーバー、cquery を使用しています。

C++ のエラー インサイト

エラー インサイト(エラーの下に赤い下線を描画することで、エディタ内で、コードの問題のプレビューを表示する機能)が C++ でも利用可能になりました。 これは、言語サーバー プロトコルと cquery を使用しており、新しい Win32 用 Clang 拡張コンパイラを使用している際に利用可能です。

デバッグ最適化ビルド

今までは、デバッグ情報をオンにすると、コンパイラの最適化が無効になっていました。10.3 の更新された Win32 コンパイラでは、最適化されたビルドのデバッグがサポートされるようになりました。最適化されたビルドでは、式や変数が最適化されているため、デバッガに対して無効になることが一般的でした。

GetIt における新しいライブラリ

数多くの幅広く使用されている C++ ライブラリが、GetIt より利用可能です。

Delphi と C++

C++/Delphi ABI の互換性

以前のリリースでは、ABI の基礎メソッドの渡し方にわずかにプラットフォームによる違いがあり、特に、値渡しや参照渡しの際に、4 ~ 8 バイトのレコードに対して差がありました。これらが改善されており、Delphi とやりとりする際、特にイベントハンドラを使用する際に、Win32 から Win64 へ C++ コードを移行で発生してた可能性のある問題も、解決されています。標準例は、TPoint パラメータを取るイベント ハンドラです: Win32 ではこれは、点の x および y 座標に対して正しい値を表示しますが、Win64 では x および y に対して「ジャンク」な値を読み取っていました。これは、もう発生しません。

大抵の変更点は fastcall に影響しますが、RAD Studio 10.3 Rio ではまた、モバイル プラットフォームを含む、完全な互換性に対する cdecl および他の呼び出し規約のサポートに対する変更も含まれています。

IDE

RAD Studio 10.3 Rio では、メイン ウィンドウと複数の主なダイアログのルック&フィールが改善され、読みやすさとクリアさに重点をおいたよりモダンなスタイルが取り入れられています。

2 つの新テーマ

RAD Studio 10.3 では新しい淡色テーマと改訂版濃色テーマが含まれており、長時間の使用に重点が置かれています。

プロジェクトと IDE オプション

IDE と[プロジェクト オプション]ダイアログには、一定間隔に整列されたコントロールによる、よりきれいな外観になりました。ウィンドウは、灰色の背景の代わりに白色の背景、各設定ページのキャプション、およびオプション ツリーの全幅の選択肢などにより、よりモダンな外観になりました。

オプション ツリーでは新しいカテゴリが導入され、また、いくつかのオプションは新しいカテゴリに移動されました。たとえば、[プロジェクト オプション]ダイアログでは、アプリケーション アイコンやイメージはもう[アプリケーション]ページにはなく、[アプリケーション|アイコン]ページにあります。

オプション ダイアログが、タイトル バーにある新しい検索ボックスを使用して検索できるようになりました。

IDE メイン ウィンドウ

RAD Studio 10.3 のメイン ウィンドウがよりきれいな外観になり、より読みやすく整理されました。変更点は以下のとおりです:

  • 余分な枠線や線が削除されました。UI は、境界線ではなく背景色に基づいて、セクションが分けられています。
  • 可読性向上およびクリック対象の表示向上。[編集]タブがより大きくなり、フォントは暗い背景上に白く表示されることで、読み、クリックすることがより簡単になり、また、ドック可能ウィンドウもより大きいタイトル バーを持つようになりました。
  • IDE でのフォーカスの変更がよりクリアになりました。編集タブかドックされたウィンドウかにかかわらず、現在のフォーカス領域は、濃い青色の背景となります。これにより、キーボードのフォーカスがどこにあるか直ちにわかるようになりました。
  • 一部のウィンドウは名前が変更され、プロジェクト マネージャプロジェクト に、ツール パレットパレット となりました。
  • IDE 全体におよぶ検索を可能にする IDE インサイトは、IDE のタイトル バーにあります。

[項目の新規作成]ダイアログ

[項目の新規作成]ダイアログ ウィンドウには、スクロール可能なリストに項目が列挙されており、それぞれ名前と説明が表示されます。項目を簡単に見つけるため、項目によっては複数のカテゴリに配置されるようになり(たとえば、動的ライブラリは現在、[Windows]と[マルチデバイス]のところにあります)、検索はタイトル バーに移動されました。

[コンパイル]ダイアログ

[コンパイル]ダイアログでは、数多くのヒント、警告、エラーが分かりやすくなりました。新しいレイアウトはそれをより読みやすいものにしています。

[GetIt パッケージ マネージャ]ダイアログ

GetIt パッケージ マネージャでは、ページではなく、スクロール リストに項目群を表示するようになりました。また、よりクリアな外観になり、また、検索はタイトル バーに移動されました。

IDE のその他に対する改善

フォームの読み込み / LiveBinding の設計時 IDE の最適化

RAD Studio 10.3 では、LiveBinding を利用した、または数多くのコントロールを持つフォームの読み込みが、非常に高速になりました。読み込み時間は(非常に大きなフォームの場合)30 秒かかっていたものが、2-3 秒まで短縮されました。

修正パックの改善点

RAD Studio 10.3 Rio には、Andreas Hausladen の “IDE Fix Pack” の修正および改善点が含まれています。組み込まれているほとんどの修正が、IDE に焦点を当てたものであり、次のものが含まれています:

  • 仮想 Treeview の利用によって発生する高解像度タイマー
  • FindHInstance の最適化
  • プロセス生成時の CREATE_DEFAULT_ERROR_MODE を利用したデバッガ
  • TStringList IndexOf および名前の最適化

VCL の統合された変換アーキテクチャとツーリング

VCL の統合された変換アーキテクチャおよびツーリングは 10.3 にもまだ含まれていますが、今後これらに手を入れられることはなく、将来のリリースで削除される予定です。これらのツールへの依存度は減少させ、別の変換ツールのセットへ移行していく必要があります。

VCL

高 DPI イメージ リストのサポート

10.3 における新たな VCL High DPI ImageList コントロールにより、新しい VCL Windows アプリケーションを構築する、または、既存のアプリケーションを高 DPI ディスプレイ対応に更新する開発者は、マルチ解像度、すべてのコントロールのピクセル完全画像、また同様に、マルチ解像度モニタのためのスケーリングされた画像を必要とするカスタム描画などを、完全にサポートすることができます。これらは、TImageCollection コンポーネントを TVirtualImageList コンポーネントと合わせて利用することで実現できます。

これらの対になったコンポーネントは、コントロールに使用される単一の特定のサイズのイメージ群のリストから、イメージのコレクション(各論理イメージが複数の解像度を持つことができる)の概念を分離します。

TVirtualImageList は、HIMAGELIST ハンドルを提供を含む、従来のイメージ リストと完全に互換性があり、簡単に置き換え可能で、また、VCL コントロールと Windows API イメージ リスト呼出しを使用したコードの両方に使用することができます。

TImageCollection は、PNG を含むアルファ チャンネルのイメージをサポートします。また、旧スタイルのカラーキー付き透明ビットマップを読み込むこともでき、従来の TImageLists から新しいイメージ コレクションおよび仮想イメージ リストへの変換を支援する移行ツールもあります。

Per Monitor V2 のサポート

RAD Studio 10.3 には、VCL に対する Per Monitor V2 のサポートが含まれています。これにより、VCL アプリケーションはすべての Windows のスケールに合わせて正しくサイズ変更することができ、異なる画面間での DPI スケールの変更に対応することができます。アプリケーションでこれを有効にするには、[プロジェクト|オプション...|アプリケーション|マニフェスト]DPI Awareness セクション内)に移動し、Per Monitor V2 を選択します。

Win 10 機能 - 拡張されたストア サポート/API

10.3 では、VCL および FireMonkey の開発者がアプリケーションで使用できる Windows API の数が増えています。これには、主な WinRT API や最近の Windows 10 API が含まれており、アプリ内購入や Windows 10 ストアでのトライアルですぐに使用できるコンポーネントなどがあります。

WinRT API の更新

RAD Studio 10.3 には、WinRT API Object Pascal ヘッダー宣言に対する更新が含まれており、Windows 10 の最初のリリース以降追加された、多くの API へのサポートが含まれています。これらの API は、RAD Studio 10 Seattle で導入されたものと同じ宣言モデルに準じており、次のユニット内にあります(システムの Windows WinRT ソース フォルダの下):

WinAPI.ApplicationModel.Background.pas Winapi.ApplicationModel.Contacts.pas WinAPI.ApplicationModel.Core.pas WinAPI.ApplicationModel.DataTransfer.pas WinAPI.ApplicationModel.pas Winapi.CommonNames.pas WinAPI.CommonTypes.pas WinAPI.DataRT.pas Winapi.Devices.AllJoyn.pas Winapi.Devices.Bluetooth.Advertisement.pas WinAPI.Devices.Bluetooth.pas WinAPI.Devices.Enumeration.pas Winapi.Devices.Geolocation.pas Winapi.Devices.Midi.pas WinAPI.Devices.pas Winapi.Devices.PointOfService.pas Winapi.Devices.Scanners.pas Winapi.Devices.Sensors.pas Winapi.Devices.Sms.pas WinAPI.Foundation.Collections.pas WinAPI.Foundation.pas WinAPI.Foundation.Types.pas WinAPI.Gaming.pas WinAPI.Globalization.pas WinAPI.GraphicsRT.pas WinAPI.Management.pas Winapi.Media.Devices.pas Winapi.Media.MediaProperties.pas WinAPI.Media.pas WinAPI.Networking.Connectivity.pas WinAPI.Networking.NetworkOperators.pas WinAPI.Networking.pas WinAPI.Networking.Proximity.pas Winapi.Networking.PushNotifications.pas WinAPI.Networking.Sockets.pas WinAPI.Networking.Vpn.pas Winapi.Perception.pas WinAPI.Security.Credentials.pas WinAPI.Security.Cryptography.pas WinAPI.Security.pas Winapi.ServicesRT.pas Winapi.ServicesRT.Store.pas WinAPI.Storage.pas WinAPI.Storage.Streams.pas WinAPI.SystemRT.pas WinAPI.UI.Composition.pas WinAPI.UI.Core.pas WinAPI.UI.Input.Inking.pas WinAPI.UI.Input.pas WinAPI.UI.Notifications.pas WinAPI.UI.pas WinAPI.UI.Text.pas WinAPI.UI.ViewManagement.pas WinAPI.UI.WebUI.pas WinAPI.UI.Xaml.pas WinAPI.WebRT.pas

Windows API の更新

この Windows API の更新には、多岐に及びます。その 1 つは、新しい高 DPI 関連 API で、DPI プロセスおよびスレッド認識、モニタやウィンドウに対する DPI 設定、高 DPI テーマなどが含まれています。

他の面では、新しい“ペン入力”や WM_POINTER_xxx メッセージ、およびその関連 API やデータ構造体に対するサポート周りのものがあります。

10.3 ではまた、一部の重複していたコア型宣言が改めて整理されています。たとえば、PUint32 は System.pas にありません。また、一部の Windows ハンドル型は移動され、若干異なる宣言に変更されています。

TWindowsStore

TWindowsStore コンポーネントにより、Windows アプリケーションを Windows ストアに接続させ、ユーザーが所有するアプリケーション、利用可能なアドオン、購入済みのアドオンのリストを取得したり、トライアル モードを処理する、といった機能を使用することができます。

TWindowsStore コンポーネントは、Windows プラットフォーム対してのみサポートされており、RAD Studio 10.3 Rio には、VCL バージョンと FireMonkey バージョンが含まれています。

TWindowsStore は、TWindowsStoreCore のコンポーネント ラッパーです。

その他の VCL の改善点

  • TDirect2DCanvas の色付きフォントに対するサポート
  • wm_pointer 関連メッセージおよび API の公開
  • 契約延長の共有

FireMonkey

Android API レベル 26 以降

RAD Studio 10.3 Rio には、2018年8月開始された新しい Play Store アプリケーション、および 2018年11月の更新に対して Google が要件として挙げているように、Android API バージョン 26 デベロプメントに対するサポートが含まれています。変更点には次が含まれています:

  • マニフェスト内の新しい情報(適切な API レベル)
  • デフォルトの設定では、SDK/NDK の最新バージョンを使用

最新のプラットフォーム ライブラリをインクルードするには、SDK を更新する必要があり、そうでなければ、Android アプリケーションがビルドされません。

新しい Android アクセス許可モデル

Android API の最新バージョンでは、アクセス許可を要求するためのメカニズムが変更されました。 ユーザーは PermissionsService.RequestPermissions を呼び出し(新しい System.Permissions ユニットから)、ユーザーのレスポンスと共に呼び出されるルーチンへの参照、および任意で、要求された権限の論理的根拠を示すルーチンを渡すことができます。詳細については、「Android 権限モデル」を参照してください。

Android Z オーダー

10.3 での Android Z オーダーは、ボタン、ラベル、チェックボックスなどの FireMonkey スタイル付きコントロールを、それらをネイティブ コントロールでカバーすることなく、ブラウザやマップ コントロールといったネイティブ レンダリングされたコントロールと一緒に、同じフォーム上で使用するための機能をサポートしています。

Android ネイティブ コントロール

10.3 では、ネイティブ コントロールをスタイル付き FireMonkey コントロールと一緒に、同じ Android フォームで使用することをサポートするために設計された、多くの新しい機能が含まれています。

変更点の 1 つは、FireMonkey アプリケーションにおける Android ネイティブ コントロールのためのマテリアル デザイン テーマです。TWebBrowser、TMapView といったネイティブ コントロール、および他の新しいネイティブ コントロールは、Android バージョン 5.0 以降が稼働するデバイス上で、マテリアル デザイン テーマを使用します。

現在、ネイティブ表示をサポートしているコントロールは次のとおりです。

  • TCalendar
  • TEdit
  • TSwitch

iOS 12 サポート

RAD Studio 10.3 では、デバイスに焦点を当て、また、App Store や エンタープライズ アプリケーションを構築するための、iOS 12 サポートが含まれています。

Mojave サポート

RAD Studio 10.3 では、macOS 10.14 Mojave 上で稼働する 32 ビット アプリケーションの構築がサポートされています。Delphi サポートは、10.14 SDK を対象としています。

その他の FireMonkey の改善点

  • Unicode 絵文字に対するサポート

FireDAC とデータベース

MySQL に対する改善

  • MySQL v 8.0 のサポート
  • MariaDB 10.3 のサポート

SQL Server に対する改善

  • SQL Server 2017 のサポート

PostgreSQL に対する改善

  • PostgreSQL v 10(最新を含む)のサポート
    • 列の識別
    • Macaddr8
    • パスワードの暗号化
  • 新しい GUIDEndian=Little|Big 接続パラメータ

Firebird に対する改善

  • Firebird v 3.0(最新を含む)のサポート
    • ローカル接続プロトコル
    • FB$OUT パッケージ
    • isc_database_info() 情報項目
    • gbak 出力における統計機能
    • 64 KB 以上の長さの分のサポート
  • 新しい TFDFBOnlineValidate コンポーネント
  • 新しい GUIDEndian=Little|Big 接続パラメータ

MongoDB に対する改善

  • 新しい TimeZone=Local|UTC の接続パラメータ.

InterBase に対する改善

  • InterBase v 2017(最新も含む)のサポート
    • TRUNCATE コマンド
    • 変更ビューでの TRUNCATE のサポート
    • トランザクション待機時間
  • 新しい GUIDEndian=Little|Big 接続パラメータ

SQLite に対する改善

  • 3.23.1 のサポート
  • Linux プラットフォーム(最新を含む)のサポートの向上
    • 暗号化サポート
    • 照合順序のサポート

SQL Anywhere に対する改善

  • TFDPhysASADriverLink.ToolHome の新しいプロパティ
  • TFDEventAlerter の追加サポート

FireDAC のその他の変更点

  • TFDBatchMoveJSONWriter の追加
  • 最適化された TFDBatchMove および関連コンポーネント

データベースに対する改善

  • 新しい TClientDataSet.IncludeBlobsInDelta プロパティ

DataSnap に対する改善

  • 新しい TDSRestConnection.SecureProtocols プロパティ
  • DataSnap REST が、明示的に "Content-Type=application/json" を指定するようになりました。

REST に対する改善

  • MIME の種別の判別の向上
  • TRESTClient.OnNeedClientCert プロパティの追加
  • TRESTClient.OnAuthEvent プロパティの追加
  • TRESTClient.RedirectsWithGET プロパティの追加
  • TRESTClient SecurityProtocols プロパティの追加
  • Indy が THTTPClient と置き換わりました
  • オプション TRESTRequestParameterOption.poFlatArray、poPHPArray、poListArray の追加
  • TRESTRequestParameter.AddValue メソッドの追加
  • TRESTRequestParameter.SetStream メソッドの追加
  • TRESTRequestParameter.Stream プロパティの追加
  • TRESTRequestParameter.StreamOwner プロパティの追加
  • TRESTRequestParameter.Bytes プロパティの追加.
  • TRESTRequestParameterList.AddItem の追加
  • TRESTRequestParameterKind.pkGETorPOST の動作の変更
  • TRESTRequestParameterKind.pkQUERY 値の追加
  • TBodyParams クラスを置き換えるための TRESTRequestParameterList.AddBody メソッドの追加
  • AOwnsObject の追加: TCustomRESTRequest.TBody.Add メソッドのための TRESTObjectOwnership パラメータ
  • AContentType の追加: TCustomRESTRequest.DoPrepareQueryString のための TRESTContentType 引数
  • AContentType の追加: TRESTContentType、ABodyStreamOwner: TCustomRESTRequest.DoPrepareRequestBody の Boolean 引数
  • THTTPClient の Windows プラットフォーム上での最適化
  • TMultipartFormData.AddStream および AddBytes の追加
  • TMultipartFormData、FileName、TStrings に対する TNetHTTPClient.Put / THTTPClient.Put オーバーロード メソッドの追加
  • HTTP Accept-Xxxx ヘッダを考慮して値を処理する TAcceptValueList クラスの追加
  • MIME タイプを処理するための TMimeType クラスの追加

Cloud に対する改善

  • Azure ストレージ エミュレータに対するサポート向上
  • 最近追加されたリージョンをカバーするための、AWS S3 サポート更新
  • TAmazonConnectionInfo.Region プロパティの追加
  • TAmazonStorageService メソッド関連のバケット/オブジェクトのほとんどに対して、"BucketRegion: TAmazonRegion = amzrNotSpecified" パラメータを追加
  • Cloud サポートの一般パフォーマンスの向上

RAD サーバー

パフォーマンスの強化

RAD Studio 10.3 には、RAD Server に対する次のパフォーマンス強化が含まれています:

マッピングをベースとした Content-Type および Accept の新しいエンドポイント属性

より良いリソース マッピングをサポートするため、URL のみに依存せず、Accept および Content-Type HTTP リクエスト ヘッダーを基とするようになりました。これにより、同じ URL および HTTP 動詞にマップする 2 つの異なるメソッドを持ちつつ、なおリクエストに応じて異なるタイプのデータを返すことが可能になります。

HTTP 動詞のメソッド名へのカスタム マッピング

RAD Server の以前のバージョンでは、HTTP 動詞(GET、POST など)のメソッド名へのカスタム マッピングを、システムが生成していました。これがデフォルトとして残りますが、新しい EndpointMethod 属性を使用して、HTTP 動詞を独自の名前でメソッドにマッピングできるようになりました。

リクエストの処理をカスタム クラスやコンポーネントに委譲する機能

RAD Server のカスタム リソース API に、リクエストの処理をリソース モジュール Delphi フィールド(カスタム エンドポイント パブリッシャ クラス / コンポーネント)に委譲する機能が追加されました。

JSON 処理のためのヘルパ コンポーネント

コンポーネントに処理を委譲する新しい機能を利用して、RAD Studio 10.3 では、JSON の処理作業をシンプルにするための新しいコンポーネントが導入されており、特にデータベース クエリが呼び出される際に利用されます。コンポーネントは、RAD Server リソース(またはデータ モジュール)へマップされるクラスに追加でき、HTTP メソッドは、コードを記述することなくそれらにマップすることができます。

RAD Server のその他の強化点

  • RAD Server パフォーマンスが、シンプルなオペレーションにおいて、スループットが10 倍増加し、大幅に向上しました(これに関連する修正の一部は、すでに 10.2.3 のパッチで配布されています)。

RTL

10.3 の Delphi RTL では、大幅なパフォーマンスの向上と、JSON および HTTP に対する標準互換性の強化が行われています。

データ構造体の成長手段

複数のデータ構造体(TStringList、TList、TList <T>、TQueue<T>、TStack<T>)には、それらが一杯になり拡張する必要が生じた場合に、以前の x2 手段に比べより柔軟な成長手段ができました。この成長手段は置換可能です。新しい成長手段は、共有グローバル関数内で実装されており、SysUtils.pas で宣言されています:

function GrowCollection(OldCapacity, NewCount: Integer): Integer;

さらに、新しい互換関数を記述し、グローバル プロシージャ SetGrowCollectionFunc を呼び出すことで、この実装をカスタマイズすることができます。

カスタム“成長コレクション関数”をランタイム パッケージにインストールする場合には、exit の際に nil をそれに設定することを忘れないようにしてください。さもないと、パッケージがアンロードされた際に、ランタイムが存在しない関数を呼び出そうとしてしまいます。

TStringBuilder の変更点

このクラスは、パフォーマンスの向上のためにいくつか変更が施されており、メモリ成長手段における同様の変更や、重複コードの削除、実装の全般的なクリーンアップなどが行われています。

TStringBuilder 列挙型が最適化されました。

また、TStringBuilder.ToString メソッドに追加パラメータがあります。シグニチャは ToString (UpdateCapacity: Boolean) です。ToString(True) で、それ以降 TStringBuilder に対して変更が想定されていなければ、より良いパフォーマンスが望めます。これは、コピーされるデータの量が減るためです。

JSON の改善点

正確性とパフォーマンスのために、10.3 での JSON の処理と解析の向上が大幅に行われています。

リスト関連の改善点

  • TList および TDictionary には、新しい public プロパティが追加されており、初期化後に比較対象(ソートのための比較オペレーションの定義)にアクセスできるようになりました。
  • TDictionary<TKey,TValue> への TryAdd メソッドの追加
  • TObjectList<T>. への ExtractAt(Index: Integer): T の追加
  • TList<T>.IndexOf のパフォーマンス向上
  • リストに項目を追加する際の汎用 TList<T>、TQueue<T>、TStack<T> のパフォーマンスの向上。標準 TList<T>.Add は ~30% 高速になりました。
  • 最適化された TList、TStrings、TComponent、TCollection、TList<> の各列挙型。空の "for in" ループは 2.5 ~ 4 倍高速になりました。
  • コレクション列挙型の一部として、RAD Studio は、反復処理が完了した際に、列挙子の状態を正式に定義します: 列挙子の状態は、MoveNext が False を返した後は無効であり、列挙子は解放または再度作成される必要があり、以降アクセスしてはなりません。

RTL のその他の変更点

  • TStringHelper.Split が、StrUtils の グローバル SplitString 関数と同じ結果を生成するようになりました。
  • zlib は、いくつかの修正と共に 1.2.8 にアップグレードされました(そして、64 ビット用 RAD Studio C++ コンパイラでコンパイルされるようになりました)。
  • PCRE は 8.42 へアップグレードされ、Windows での UTF-16 サポートが含まれています(また RAD Studio C++ コンパイラでコンパイルされるようになりました)。
  • Unicode テーブル(System.Character ユニット)が Unicode v11.0 をサポートしました。
  • TStringHelper.Split メソッドには、新しい TStringSplitOptions.ExcludeLastEmpty オプションをベースとした、いくつかの任意の動作ができました。
  • プロシージャや関数の順序の再構成により、SysUtils ユニットのインラインのサポートが向上しました。
  • System ユニットに、Float32 および Float64 のエイリアスが追加されました。

AppTethering での長い文字列の送信

AppTethering に対して使用される TTetheringAppProfile クラスの SendString / AsString オペレーションの現在の実装は、だいたい 1,400 文字長に制限されています。RAD Studio 10.3 では、次の変更点および追加機能が含まれており、これにより互換性を維持しつつ長い文字列の処理が可能になっています:

  • 新しい TTetheringAppProfile の SetLongString および SendLongString メソッドは、通信に文字列ではなくストリームを使用します。
  • TResourceValue.AsString は、受け取ったストリームの文字列値を(それがあった場合)、返すことができます。なければ、受け取った文字列の値を返します。これにより、通常の文字列と「長い文字列」への対応を可能にしました。

文字列長が ~1.3KB より小さい場合には、TTetheringAppProfile.SendString を使用することが推奨されます。それ以外の場合には、TTetheringAppProfile.SendLongString を使用する必要があります。

TMemIniFile の最適化

RAD Studio 10.3 Rio では、TMemIniFile の実装が最適化されました。TMemIniFile の読み込みと構築が、10 ~ 25 倍高速になり、メモリの消費量も半分になりました。他の TMemIniFile オペレーションも向上され、以前の実装に比べ、50~100% 高速化されています。

また 10.3 では、次の 2 つのオーバーロード コンストラクタが追加されており、ストリームから TMemIniFile を読み込むことが可能です:

  • TMemIniFile.Create(Stream)
  • TMemIniFile.Create(Stream, UseLocale)

これらのコンストラクタ パラメータはクラス内で引き続き使用でき、また、新しいプロパティで公開されます:

  • プロパティ Stream
  • プロパティ UseLocale

関連項目

個人用ツール
他言語版
以前のバージョン
Assistance