Rustのvtableを可視化:dyn Traitのメモリ動作
मूल शीर्षक: Visualizing Rust's Vtables: How dyn Trait Works In Memory
यह क्यों महत्वपूर्ण है
RustのdynとvtableをC++と比較しながらメモリレベルで解説しており、システムプログラミング学習者にとって実践的な参考資料となる。
Sofía Belén López VicensがRustのdyn Traitとvtableの仕組みをメモリレベルで解説する技術記事を公開した。C++のvirtual関数およびCRTPとの比較を通じ、静的・動的ディスパッチの違いや、object safetyの制約を図解付きで説明している。
本記事はSofía Belén López VicensによるRustのポリモーフィズム解説である。著者はRustを学ぶ中で、C++との比較からdyn Traitの仕組みを理解しようと試みたが、両言語を1対1で対応させることの限界にも言及している。
記事では、円・正方形・三角形などの図形にdraw()を呼び出す例を軸に解説が進む。C++におけるvirtual関数(ランタイムポリモーフィズム)とCRTP(コンパイル時ポリモーフィズム)をまず紹介し、Rustの静的ディスパッチ(モノモーフィゼーション)がCRTPに相当することを説明する。静的ディスパッチではコンパイラが型ごとに関数の別コピーを生成し、ランタイムコストはゼロだが型はコンパイル時に確定している必要がある。
動的ディスパッチ(dyn Trait)については、各(型, Trait)ペアごとに1つのvtableが生成される仕組み、object safetyの制約(SelfをReturnできないメソッドやジェネリックパラメータを持つメソッドはdynに使えない)なども詳述されている。また、Rustのゼロサイズ型(ZST)についても補足説明が含まれる。すべてのコードと実験はGitHubで公開されている。