Avatar
omochimetaru 7/15/2020 8:50 AM
Swift(SIL)→Java トランスパイルについて何度か考えてるけど
8:51 AM
Stringとかがtagged pointerとかのポインタ実装依存のハックとか
8:51 AM
ビットに畳み込んだ実質enumみたいなのを使いまくってるせいで
8:51 AM
それをJava上で表現できないんだよね
8:51 AM
まずビットからポインタに戻す操作がJavaには存在しないし
8:51 AM
バイト配列みたいなものを使おうとするとbyte[]が出てきてそこでオブジェクトが1段分離されてポインタが挟まっちゃう
8:52 AM
そうすると、ストレージ領域に対するビットコピーとかの振る舞いが変わってくるから
8:52 AM
SIL上で記述されたunsafeBitCastとかが一通りぶっ壊れて無理そうなんだよね
8:52 AM
つまり、SILの記述レベルがJavaの抽象度よりもマシン寄りにローレベルすぎてトランスパイルできない。 (edited)
8:53 AM
SIL実行仮想マシンみたいなものをJava上で再実装するみたいなインタプリタモデルならできるけど
8:53 AM
まともな性能が出ないしデバッグとかできなそうだしダメ
8:54 AM
Swift→Kotlin トランスパイルを狙って、StringとかArrayとかのstdlibで実装されたhackyなやつらは専用の再実装ライブラリに差し替えるとかならいけるかもなあ。
8:54 AM
Swiftレベルの、unsafe系ではない操作だけだったら、ほぼほぼトランスパイルできると思うので。