2021-09-03: インターンおわり
やったこと
Crystal
ここ最近 Crystal へのコントリビュートをやっていた。
https://github.com/crystal-lang/crystal/pull/11153
https://github.com/crystal-lang/crystal/pull/11154
https://github.com/crystal-lang/crystal/pull/11162
最後のは Class#=== がメタクラスに対して上手く動いていないというもので、ちょっと面倒だった。
これは、Class#=== が other.is_a?(self) のように実装されているのだけど、メタクラスがレシーバーのとき self が Object として扱われてしまう、というのが原因。
Class のインスタンス型が Object なのが悪いといえば悪いのだけど、Class のインスタンス型を Class にする方向で修正しようと思うと、インスタンス型が再帰的になることを想定してないから無限に stack overflow したりループしたりしてしんどかったし、そもそも Class のインスタンス型が本当に Class かというのも明らかではないので、マクロで強引に解決する形にした。
これが無難だと思う。
あと Class#cast にも同種の問題がある気がするけどどうしよう。
というかどうなるのがいいのか。
これもやっかいな問題ではある。
インターン
了。おつかれさまでした。