2021年4月1日

2021/04開催のセミナー

2021年3月16日

[書籍]Object Pascal Handbook Delphi 10.4 Sydney Edition

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月6日

const修飾されたインタフェース型の引数としてその場で生成したインスタンスをインタフェース型にキャストしないでそのまま渡すとリークする

Dalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingをパラ見していて引っかかったのですが、タイトルを見ても何をいっているのかわからないと思うので、まずコードを。
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年2月26日

[書籍]再発見の発想法

紀伊國屋書店新宿本店

再発見の発想法 (Amazon)/結城浩著/SBクリエイティブ/ISBN 978-4-7973-9531-0/1,760円

を購入。

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)

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だと思われます)。

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

2021年2月1日

2021/02開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2021年1月8日

[書籍]初めてのマルウェア解析

紀伊國屋書店新宿本店Learning Malware Analysis (Amazon US)の翻訳である

初めてのマルウェア解析 (Amazon)/Monnappa K A著/石川朝久訳/北原憲、中津留勇技術監修/オライリージャパン/ISBN 978-4-87311-929-8/4,400円

を購入。

2021年1月1日

2021/01開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

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)

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円

を購入。

2020年12月1日

2020/12開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event