Rustに入門した

Rustに入門して2週間くらい経ったぜ

TL;DR Rustは普通に便利ないい言語

入門した

入門にあたってはプログラミング言語Rustを読んだ。これの翻訳版ぽい。

読んでRustに対して思ったこと:

  • 読んだやつは古いドキュメントの翻訳版だったようで一部記述が古いっぽかった

  • 構文はシンプルだけど必要なものは揃ってる感 ML風でADTもパターンマッチもあるしtraitもあって言うことナシでしょ

  • 所有権とか借用とかそういう聞いたことあるワードは参照という概念に対するアレっぽい

  • スィー言語を気軽に(unsafe)呼べるのはFFIするとき良さそう 強そう

  • マクロ割と便利そうな雰囲気ある

  • RcとかArcとかCellとかいう便利なものがあるらしい あとBoxはいつ使うんじゃ

  • 参照わかったようでわからない とりあえずスタックとヒープの違いは覚えたぞ

  • 入門書なのに普通にするする読めてしまったし特に難しいことがなかった、もしかしてRustは簡単なのでは???

参照とかいう概念がある言語を長らくやっていなかった(Pythonは基本参照だった気がするけど意識する場面ないしHaskellの参照もあんまり使わないしなぁ)ので 「あー参照だとこういうことも考えないといけないのかぁ」って思ったりした

参照、人類には早すぎるのでは???って感じ

ちょっと書いたりした

ちょっと書いたりした(してる)

どうせなのでなんか作ってみるかぁと思ってgstreamerとGtkで動画をごにょごにょするアプリケーションを作って遊んでる。 なんで入門していきなりそんな重いもの作ってんだよという感じなのだけどRustの強みはやっぱりCにFFIしやすいことな気がしていて逆にHaskellでは現状まともにビルドできてまともに使えるGUIライブラリがないので、そういう意味で(Rustの強みを活かせるという意味で)GUIアプリケーションぽいものに着手した。

まぁまだそんな書いてないしな〜(と思ったがすでに700行近い。Haskellなら500行超えるだけで相当だけど中括弧でブロック表す上に手続きがデフォルトの言語ってめっちゃ行数かさむよね。)

しばらく書いた感想:

  • エラーメッセージがカラフルや…なんだこれ…(GHCも最近カラフルになったけど未だに慣れない感ある)

  • スィー言語と違って コンパイラが信用できるーーーヤッターーー(踊りだす)

  • エコシステムが強すぎてビビる(いやHaskellがダメなだけか…?)

  • Rc Cell RefCellあたりがあまりに便利

  • 所有権意識する場面あんまない

  • *(スター)はRustが勝手に補ってくれるって書いてあったので一切書いてないんだけどいいのかこれで 結局*が何者なのか未だによくわからない

  • そもそも自分はHaskell出身だからmutとか使う場面あんまないな そりゃ苦労しないはずですわ

  • FFIするのはほんとにシームレスで強さしかない

  • 参照、人類には早すぎるのでは??????

  • ポインタだとコンパイル時にアドレス分の長さしか食わないがデータによってはコンパイル時にその長さが分からないみたいなエラーを見て、長さがわからないとallocateができない!そういうのもあるのか!になった

  • lifetimeの存在により自然にステートの管理の意識がブロックに宿るようになるの結構すごい 人類はステート管理に対する新たなやり方を手に入れたのでは?ってちょっと思った

  • もしかしてRustは簡単なのでは??????

所感

巷では難しい言語だみたいに言われることがあるような気がするけどめちゃくちゃ簡単やんけ!と思った (自分は特殊な人間である自覚はあるので大方の人には難しいのかもしれない)

というか、たしかに所有権を完全にコントロールして正しい設計を導き出すのは難しいんだけど、それは参照とかいう概念が全て悪いのであってRustはむしろそれを管理するための適切でhuman-friendlyな方法を提供してくれてるしすごいいい言語じゃん!と思ったりした

あとコンパイラを全面的に信用できるのも大きい。雑なことしてもどっかおかしかったらコンパイラが教えてくれるしな!という感じでガシガシ書いていける。

「higher kind typeがない」って言うのは聞いてて自分は今の所なくていいんじゃない?派なんだけどやっぱ場合によっては不便なんだろうか。 HKTって実装のコストと学習コストの肥大化の割に恩恵が大したことないというイメージだし、どうせHKT入れても次はアレをいれてくれコレもいるだろみたいになるのは必至なので(型システムとはそういう宿命なのだ)今の小さくて十分パワフルなRustでいいんじゃないでしょうか。

それでも自分はHaskellの方が圧倒的に慣れてるのもあるので、敢えてRust使うならやっぱGUI方面かな〜(RustはFFI強いし楽だし一方Haskellは全然ライブラリメンテされてないし)と思ってる。 まーでもmakeLensesしないとまともなレコードも使えない某言語を頑張って使い続ける理由はあるのだろうかというアレも。 やっぱRustに比べるとHaskellは難しい言語だなぁと思いますね。

以上