Avatar
omochimetaru 8/17/2021 4:53 PM
Hi Everyone, I've been working on SR-14273 for the last little bit. I've gotten to the point of having a working proof of concept (See this github branch: GitHub - gmittert/swift at upstream_runtimevw) and I'm hoping to get some feedback from the community so I can begin stabilizing and hopefully upstreaming the work. Many thanks to @Arnold who...
4:53 PM
このスレッドでValueWitness関数をバイトコード化するプロジェクトが公開されてる
4:54 PM
従来は型のコンパイル時にその型のValueWitness関数(copy, assign, destroy...)も生成してVWTに入れていたけど
4:55 PM
これは型ごとに関数を生成するのでコードサイズが大きくなってしまうし、
4:55 PM
ジェネリックな型の場合はフィールドのコピーとかするときにジェネリックパラメータの実際のメタタイプを取得する呼び出しが発生して重い
4:56 PM
そこでValueWitness関数を共通化して、型ごとにValueWitness ByteCodeを生成して、 その共通関数はByteCodeを読み取って実行する方式に変更する
4:57 PM
作業してる投稿主のGwenさんは、型のレイアウト情報をエンコードしたものをByteCodeとして使用しようとしているけど、
4:59 PM
Joe Groffさんがその設計にツッコミを入れていて、 trivialでないフィールドの存在位置だけを示せば良いと言ってる あとなんかオペコードみたいな仕組みにして、 enumのextra inhabitant関連では条件チェックして読み飛ばすオペコードとかを定義したらどうかとか。
5:00 PM
また、ジェネリック型も実行時には真の型を持ってるので、 ArcheTypeを示すByteCodeにするんじゃなくて、 その真の型に応じたByteCodeを生成してしまう事で、 ValueWitness実行時のランタイム関数呼び出しなどが無くせるという話も出てる
5:02 PM
また、これができると「同じVWByteCodeを持つ」型同士でValueWitnessTableを共有できるようになって、
5:02 PM
型が違ってもバイトレベルでは同じように扱える型を共通化できるようになる。