Amazon(JP)で注文した
Object Pascal Handbook Delphi 10.4 Sydney Edition (Amazon US, Amazon JP)/Marco Cantù著/ISBN 979-8554519963/5,606JPY(printed)
が配送されてきました。2021/03/14に注文して2日目の到着でした。
2021年3月16日
2021年3月10日
2021年3月6日
const修飾されたインタフェース型の引数としてその場で生成したインスタンスをインタフェース型にキャストしないでそのまま渡すとリークする
Dalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingをパラ見していて引っかかったのですが、タイトルを見ても何をいっているのかわからないと思うので、まずコードを。
これは、インタフェース型の引数がconst修飾されているとメソッド内部で仮引数が変更されないことが保証されているため、仮引数にコピーしたことによる参照カウントの管理を行わない最適化が行われるのに対して、前者のコードでは呼び出し元で生成したインスタンスが(インタフェース型ではなく)クラス型としてしか管理されていないため、やはり参照カウントの管理を受けずに、リークしてしまう、ということのようです。しかし後者ではas IFooとキャストしたことでIFoo型の暗黙のローカル変数が用意され、これによって参照カウントによって正常に解放されます。
メソッド内部で仮引数を別のインタフェース型の変数やフィールドにコピーすると参照カウントの管理が行われて適切に解放が行われますが、これは実装に依存しますし、また引数をconst修飾していなければ大丈夫ですが、既存の実装の変更が必要になる、ということが問題になります。
このためconst修飾されたインタフェース型の引数としてその場で生成したインスタンスを渡す場合はインタフェース型にキャストするか、あるいは
元ねたはもちろんDalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingの"13.4 In-place construction in a const parameter"。
type
IFoo = interface
procedure FooBar;
end;
TFoo = class(TInterfacedObject,IFoo)
public
procedure FooBar;
end;
TBar = class(TObject)
public
procedure Baz(const AFoo: IFoo);
end;
procedure TFoo.FooBar;
begin
// Do something.
end;
procedure TBar.Baz(const AFoo: IFoo);
begin
AFoo.FooBar;
end;
インタフェースとしてIFooと、その実装としてクラスTFooを用意し、クラスTBarにはconst修飾されたIFooを渡すBazというメソッドがあります。ここでvar
Bar: TBar;
begin
Bar := TBar.Create;
Bar.Baz(TFoo.Create);
Bar.Free;
end;
とTBar.BazにTFoo.Createで生成したインスタンスを直接渡すと、TFooはIFooとしての参照カウントの制御を受けず、リークしてしまいます。一方でvar
Bar: TBar;
begin
Bar := TBar.Create;
Bar.Baz(TFoo.Create as IFoo);
Bar.Free;
end;
とIFooにキャストしたものを渡すとリークしなくなります。これは、インタフェース型の引数がconst修飾されているとメソッド内部で仮引数が変更されないことが保証されているため、仮引数にコピーしたことによる参照カウントの管理を行わない最適化が行われるのに対して、前者のコードでは呼び出し元で生成したインスタンスが(インタフェース型ではなく)クラス型としてしか管理されていないため、やはり参照カウントの管理を受けずに、リークしてしまう、ということのようです。しかし後者ではas IFooとキャストしたことでIFoo型の暗黙のローカル変数が用意され、これによって参照カウントによって正常に解放されます。
メソッド内部で仮引数を別のインタフェース型の変数やフィールドにコピーすると参照カウントの管理が行われて適切に解放が行われますが、これは実装に依存しますし、また引数をconst修飾していなければ大丈夫ですが、既存の実装の変更が必要になる、ということが問題になります。
このためconst修飾されたインタフェース型の引数としてその場で生成したインスタンスを渡す場合はインタフェース型にキャストするか、あるいは
type
TFoo = class(TInterfacedObject,IFoo)
public
class function CreateAsIntf: IFoo;
procedure FooBar;
end;
class function TFoo.CreateAsIntf: IFoo;
begin
Result := TFoo.Create;
end;
var
Bar: TBar;
begin
Bar := TBar.Create;
Bar.Baz(TFoo.CreateAsIntf);
Bar.Free;
end;
このように生成したインスタンスをインタフェースとして返すようなメソッドを用意して、そちらを経由するか、ということになります。元ねたはもちろんDalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingの"13.4 In-place construction in a const parameter"。
2021年3月1日
2021/03開催のセミナー
- Web Seminar
- 2021/03/19 17:00-18:00(JST) エンバカデロ・デベロッパーTV「帰ってきたデベロッパーTV」
- Live Seminar
- Community Event
2021年2月26日
2021年2月25日
RAD Studio/Delphi/C++Builder 10.4 Sydney Release 2 (10.4.2)
RAD Studio/Delphi/C++Builder 10.4 SydneyのRelease 2 (10.4.2)がリリースされています。インストールには有効なUpdate Subscriptionが必要です。Registered Products Portalからダウンロードできます。
ISO for RAD Studio, Delphi, C++Builder 10.4.2
Web Installer for RAD Studio, Delphi, C++Builder 10.4.2
10.4 Sydney - Release 2 (en)
RAD Studio 10.4.2 における新機能と修正された顧客から報告された問題 (en)
List of publicly reported bugs fixed in 10.4.2
RAD Studio 10.4.2 Sydney Release 2の提供開始を発表 (en) RAD Studio 10.4の新機能 (en)
RAD Studio 10.4.2で提供される2つの新しいVCLコントロール RAD Studio 10.4.2で提供される2つの新しいVCLコントロール (en)
RAD Studio 10.4.2で新しく導入されたインストールプロセスの自動化を容易にするサイレントインストーラ (docwiki(ja), en)
RAD Studio 10.4.2の新機能: Windowsストアのパッケージングをより簡単にするMSIXのサポート (docwiki(ja))
C++Builder 10.4.2の改良点: Split DWARFによるリンカのメモリ使用量の削減 (docwiki(ja))
Delphi 10.4.2 コンパイラ速度の改善 (en)
RAD Studio 10.4.2: IDEの機能改善
C++Builder 10.4.2のオープンソースC++ライブラリ (en)
C++Builder 10.4.2での堅牢な例外処理 (en)
リンカの支援:C++Builder 10.4.2でのDWARFとリンカのメモリ使用量の分割 (docwiki(ja), en)
RAD Studio 10.4/10.4.1からGetItを利用して10.4.2をダウンロードし、インストールする方法 (en)
Delphi 10.4.2におけるCode Insightの改善 (en)
ISO for RAD Studio, Delphi, C++Builder 10.4.2
Web Installer for RAD Studio, Delphi, C++Builder 10.4.2
10.4 Sydney - Release 2 (en)
RAD Studio 10.4.2 における新機能と修正された顧客から報告された問題 (en)
List of publicly reported bugs fixed in 10.4.2
RAD Studio 10.4.2 Sydney Release 2の提供開始を発表 (en) RAD Studio 10.4の新機能 (en)
RAD Studio 10.4.2で提供される2つの新しいVCLコントロール RAD Studio 10.4.2で提供される2つの新しいVCLコントロール (en)
RAD Studio 10.4.2で新しく導入されたインストールプロセスの自動化を容易にするサイレントインストーラ (docwiki(ja), en)
RAD Studio 10.4.2の新機能: Windowsストアのパッケージングをより簡単にするMSIXのサポート (docwiki(ja))
C++Builder 10.4.2の改良点: Split DWARFによるリンカのメモリ使用量の削減 (docwiki(ja))
Delphi 10.4.2 コンパイラ速度の改善 (en)
RAD Studio 10.4.2: IDEの機能改善
C++Builder 10.4.2のオープンソースC++ライブラリ (en)
C++Builder 10.4.2での堅牢な例外処理 (en)
リンカの支援:C++Builder 10.4.2でのDWARFとリンカのメモリ使用量の分割 (docwiki(ja), en)
RAD Studio 10.4/10.4.1からGetItを利用して10.4.2をダウンロードし、インストールする方法 (en)
Delphi 10.4.2におけるCode Insightの改善 (en)
2021年2月23日
[書籍]Delphi Event-based and Asynchronous Programming
Amazon(JP)で注文した
Delphi Event-based and Asynchronous Programming (Amazon US, Amazon JP)/Dalija Prasnikar、Neven Prasnikar Jr.著/FastSpring/ISBN 979-8705971688/4,869JPY(printed)
が配送されてきました。2021/02/21に注文して2日目の到着でした(おそらく日本国内でのprint on demandだと思われます)。
Delphi Event-based and Asynchronous Programming (Amazon US, Amazon JP)/Dalija Prasnikar、Neven Prasnikar Jr.著/FastSpring/ISBN 979-8705971688/4,869JPY(printed)
が配送されてきました。2021/02/21に注文して2日目の到着でした(おそらく日本国内でのprint on demandだと思われます)。
2021年2月10日
2021年2月8日
DDevExtensions 2.87
Andreas HausladenさんのDDevExtensionsですが、GitHubでホストされています。オリジナルのリポジトリは
ahausladen/DDevExtensions: Delphi IDE Plugin
ですが、Delphi/C++Builder 10.4 Sydneyの対応は
DelphiPraxis/DDevExtensions: Delphi IDE Plugin
こちらのフォークからリリースされています。
Release DDevExtensions v2.87 Delphi 10.4 · DelphiPraxis/DDevExtensions
ahausladen/DDevExtensions: Delphi IDE Plugin
ですが、Delphi/C++Builder 10.4 Sydneyの対応は
DelphiPraxis/DDevExtensions: Delphi IDE Plugin
こちらのフォークからリリースされています。
Release DDevExtensions v2.87 Delphi 10.4 · DelphiPraxis/DDevExtensions
2021年2月1日
2021年1月13日
2021年1月8日
[書籍]初めてのマルウェア解析
紀伊國屋書店新宿本店でLearning Malware Analysis (Amazon US)の翻訳である
初めてのマルウェア解析 (Amazon)/Monnappa K A著/石川朝久訳/北原憲、中津留勇技術監修/オライリージャパン/ISBN 978-4-87311-929-8/4,400円
を購入。
初めてのマルウェア解析 (Amazon)/Monnappa K A著/石川朝久訳/北原憲、中津留勇技術監修/オライリージャパン/ISBN 978-4-87311-929-8/4,400円
を購入。
2021年1月1日
2020年12月18日
RAD Studio/Delphi/C++Builder 10.4.1 Sydney Apple Platforms Patch (December update)
RAD Studio/Delphi/C++Builder 10.4.1 SydneyのApple Platforms Patchのアップデートがリリースされています。2020/11/25にリリースされたApple Platforms Patchの更新で、さらにiOSターゲットでClientDataSetコンポーネントがリンクエラーになる問題(RSP-31795)、iOS SDK上のC++のいくつかの問題、iOS 14でビルドすると"unknown type name __UINTPTR_TYPE__"でエラーになる問題、iOS 14 SDKでビルドすると"invalid node: this may result from using a map iterator as a sequence iterator, or vice-versa"エラーまたはリンカエラーになる問題(RSP-31014)、DBXを参照しているとリンカエラーになる問題が修正されています。
RAD Studio 10.4.1 Apple Platforms Patch (December update)
RAD Studio 10.4.1向けPatch: Appleプラットフォームの修正(12月更新版) (en)
RAD Studio 10.4.1 Apple Platforms Patch (December update)
RAD Studio 10.4.1向けPatch: Appleプラットフォームの修正(12月更新版) (en)
2020年12月9日
2020年12月2日
[書籍]達人プログラマー(第2版)
紀伊國屋書店新宿本店でThe Pragmatic Programmer, 20th Anniversary Edition (Amazon US)の翻訳である
達人プログラマー(第2版) (Amazon)/David Thomas、Andrew Hunt著/村上雅章訳/オーム社/ISBN 978-4-274-22629-8/3,520円
を購入。
達人プログラマー(第2版) (Amazon)/David Thomas、Andrew Hunt著/村上雅章訳/オーム社/ISBN 978-4-274-22629-8/3,520円
を購入。
2020年12月1日
2020年11月25日
RAD Studio/Delphi/C++Builder 10.4.1 Sydney Apple Platforms Patch
RAD Studio/Delphi/C++Builder 10.4.1 SydneyのApple Platforms Patchがリリースされています。macOS 11.0 Big Sur上での例外送出時および終了時の問題(RSP-30000)の修正と、PAServerでXCode 12からのSDKインポート、iOS 14デバイスでのデバッグ実行のサポート(RSP-30806、RSP-31014、RSP-31667、RSP-31049)が追加されています。現時点(2020/11/25)ではIDEのGetItパッケージマネージャからのみ適用できます。Registered Products Portalからダウンロードできるようになりました。
RAD Studio 10.4.1向けPatch: Appleプラットフォームの修正 (en)
RAD Studio 10.4.1向けPatch: Appleプラットフォームの修正 (en)
2020年11月18日
RAD Studio ロードマップ 2020/11
RAD Studio/Delphi/C++Builderのロードマップが更新されています。
RAD Studio 2020年11月付ロードマップ (en)
RAD Studio 2020年11月付ロードマップのPM解説 (en)
次期アップデートとなる10.4.2(2021/1H)と次期メジャーリリースの10.5(2021/2H)が予告されています。
また後で雑にまとめます(たぶん)。
RAD Studio 2020年11月付ロードマップ (en)
RAD Studio 2020年11月付ロードマップのPM解説 (en)
次期アップデートとなる10.4.2(2021/1H)と次期メジャーリリースの10.5(2021/2H)が予告されています。
また後で雑にまとめます(たぶん)。
Category:
Around Delphi,
Delphi 10.4 Sydney,
Delphi 11 Alexandria,
Embarcadero
at
13:08:00
0
Comments
2020年11月17日
[書籍][eBook]Delphi GUI Programming with FireMonkey
Packt Publishingで注文した
Delphi GUI Programming with FireMonkey (Amazon US, Amazon JP)/Andrea Magni著/Packt Publishing/ISBN 9781788624176/49.99USD(printed+ebook)
が配送されてきました(今回の配送もDHL/佐川急便で、インドのチェンナイからの発送でした)。2020/10/31に注文して17日目の到着、49.99USD=5,232JPY5,350JPY(1USD=104.66JPY、暫定107.022JPY)でした。
Delphi GUI Programming with FireMonkey (Amazon US, Amazon JP)/Andrea Magni著/Packt Publishing/ISBN 9781788624176/49.99USD(printed+ebook)
が配送されてきました(今回の配送もDHL/佐川急便で、インドのチェンナイからの発送でした)。2020/10/31に注文して17日目の到着、49.99USD=
登録:
投稿 (Atom)