Skip to content

Instantly share code, notes, and snippets.

@ar90n
Last active June 27, 2023 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ar90n/5453ef6190ca457376b730e8b0983bda to your computer and use it in GitHub Desktop.
Save ar90n/5453ef6190ca457376b730e8b0983bda to your computer and use it in GitHub Desktop.
zig_polymorphism.md

zigによる多態性の実現

zigではインタフェースや継承のような機能を言語でサポートしていない。 従って、多態性はユーザーがコードで表現する必要がある。

@fieldParentPtr idiom

0.8頃までしようされていた?LLVMの最適化に難があるため、後述のfat pointerベースの手法に置き換えられた。基本的にはインターフェースからメソッドを実行する際、vtableから対応するメソッドへのポインタを取り出し以下の手順で実行する。

  1. @fieldParamentPtrにてメソッドへのポインタから対応するインスタンスへのポインタを取得
  2. メソッドへのポインタの引数に取得したインスタンスへのポインタをセットして実行

fat pointerによる方法

インターフェースのフィールドに*anyopaque型のポインタでターゲットとなるインスタンスへのポインタと確保する

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment