Go の interface 型は Java の interface 型などとは根本的に違っていて,他言語ではいわゆる Box 化(Boxing)とかスマートポインタとか呼ばれているものなんだよね。これに気が付いた時は「Go すげー」って思ったよ。だって Box 化の記述って面倒ぢゃん,普通。それをあたかも抽象型のように自然に使えてしまえるのよ, Go ならね。
Rust では Box 化のために Box<dyn Trait> の形式に落とし込む必要がある。公称型なので型を明示しないといけない面倒臭さもあるが,たとえば Java のように
```java
int iv1 = 100;
Integer ib = iv1; // boxing
int iv2 = ib; // unboxing
```
のように暗黙的な boxing/unboxing をやってくれるわけでもないので,面倒臭さが倍増する。 Rust はリソースの所有権管理が重要な要素なのでしょうがないといえばしょうがないのだが。
そう考えると,改めて「Go の interface 型すげー」と思うわけよ。そりゃあ Generics 実装が後回しになるわけだ。どう考えても便利すぎるものw
https://text.baldanders.info/remark/2020/04/subtyping/
QT: https://mstdn.jp/@zetamatta/111162435328326236 [参照]