なんか考えてることとか

変な人が主にプログラミング関連で考えていることをまとめる。

「Rustのトレイトは『高カインド多相のない型クラス』である」のブコメ返信とか

これは「Rustのトレイトは『高カインド多相のない型クラス』である」のブコメに対する返信をする記事です。気になったコメントがあれば随時追加していきます。
opaupafz2.hatenablog.com

まず最初にブコメしてくださった皆様ありがとうございました。ブコメに☆を付けていますが、これは個人的に「わかりみが深い」コメントに付けているということでご理解ください。

その中から気になったコメントがあったので、一応、返信として書かせていただきます。

Rustのトレイトは「高カインド多相のない型クラス」である - なんか考えてることとか

一番近い概念が型クラスなものをトレイトと名付けた理由、オブジェクト指向のクラスと混同しないようになんだろうなあ

2022/04/03 08:44
b.hatena.ne.jp

オブジェクト指向におけるクラスと混同しないように型クラスに近しいものを別の名前にした、というのは、多分その通りなんだと思います。
ただ、トレイトというのはRust独自の機能ではなく、今ではSchärli氏らの提唱したトレイトがそれであるというのが一般的な解です。
そのうえでついでに申し上げますと、Rustのトレイトはそのトレイトではないのです。詳細についてはそれこそ「Rustのトレイトは『高カインド多相のない型クラス』である」をお読みになられることをお勧めします。そこでRustのトレイトとSchärli氏らのトレイトの比較もしています。
私はRustのトレイトという機能を知った際に、まず初めに気になったのが「Rustのトレイトは、Schärli氏らのトレイトと同じなのだろうか?」ということです。それを調べ、「RustのトレイトはSchärli氏らのトレイトではない」ということがわかりました。そしてその後に、「では、Rustのトレイトとは一体何なのだろうか」という疑問が湧いたので、一番近い概念が何なのかを調べたのです。そして辿り着いたのが「Rustのトレイトは『高カインド多相のない型クラス』である」です。
ですので、個人として「クラスと混同させないため」というのは同意しますが、「トレイトと混同するのも避けたい」という思いも強くあるのです。


Rustのトレイトは「高カインド多相のない型クラス」である - なんか考えてることとか

まぁだもんでずーっと初期から関数型勢から高階型欲しい言われ続けてしまっていた(GATs来たけど)/ScalaのTraitは型クラスを模倣するための道具ではあったけど、あいつはJavaの延長線上にはしてあったもんな

2022/04/04 22:10
b.hatena.ne.jp

これはどちらかと言えばこの方のコメントの(ご勝手ながらではありますが)補足に近いです。
高階型っぽいものはGATsがなくても模倣することができます。以下が参考になります。
keens.github.io
GATsは確かに使えるようにはなりましたが、まだNightlyの段階であり、安定版のRustでは使えませんので、注意が必要です。
ちなみにScalaのトレイトも厳密にはSchärli氏らのトレイトではなく、MixInです。以下のサイトでなぜScalaのトレイトがMixInであるのかを解説しています。
sumim.hatenablog.com