SSブログ

Rustをやろうとしたけど、ちょっと玄人向けかな。 [プログラミング]

RustというとC/C++代替の本命馬らしいですが、コンパイル言語好きな私としてはちょっと気になってはいました。

調べてみると標準ライブラリを使わない書き方すらできて、OSとかもRustで書けるということでした。基本的にシステム開発言語に近いということね。ただ有名どころのOSでRustで書かれたというものはまだ出てきていないんじゃないかな。まぁそのうち出てきそうな気がしますが、それがメジャーになるかどうかは微妙なところですね。別に作成言語でソフトウェアを使う理由には必ずしもなっていないわけだし。

ということは、C言語で書かれたOSのデバドラとかから変わっていくってことも考えられるかもしれません。いきなりC/C++に取って変わるほど、いろいろな環境が整っているわけでもないし、標準ライブラリもかなり基本的なものになっているようです。Golangとかでは標準パッケージとかですら、Webサーバを数行で書けるようになっていたりしますから、そう言った方向とは逆行しているようですね。

でも低レベルプログラミングに焦点を当てたのは正解なのかもしれません。なんでも標準で揃っているお気軽な言語とは考え方が違うというのがわかって良かったと思います。これから始めようという人は、今更C/C++で始めるのが後々しんどくなりそうなので、先手を打ってやってみようという人が向いているかもしれません。





本家サイトは日本語のページがなかったのでお勉強には下記サイトを見たりしていました。

https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/

ちょっとしかやってないけど、最近の言語っぽいところもあり、あれ?ちょっと違うなと思えるところもあり、これ以上いろいろな言語の知識を増やしたところで混乱するだけじゃないのかと思ったりもする。


これからトピック的に特徴を見ていきたいと思います。

https://qiita.com/AtsukiTak/items/0ecba19f3518c23d2bf3
https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c

・概念が難しい
結局、別のパラダイムに行くには概念的なところが面倒臭くなる傾向がある。わかりやすく説明しようとすると遠回りしすぎて余計にわからなくなったオブジェクト指向もそうだった。

ライフタイム とか、オーナーシップ とか、 静的ディスパッチ とか 動的ディスパッチ とか、良くわからない概念がまず多い。さらに、クロージャ、ジェネリクス、トレイト など、他の言語で身につけたはずの知識も、Rustの世界では微妙に扱いが異なる。ドキュメントを読み込むのは諦めて、とりあえず書いてみようと思ってコードを書き始めても、コンパイラに怒られまくる。てかそもそもゼロコスト抽象化ってなんやねん。


結局、言語の仕様がこうなっているのは、こういうことなんだよというのが能書きが長くて嫌ということだろう。ただ、システム周りのシビアなレギュレーションを迫られる場合には、その言語仕様の細かいところまで知っておくといい場合はあるだろう。でも、そこまでの知識を迫られる人は少ないと思う。


結局C++が失敗したところは、ユーザーにコントロールさせるところが多くて、それが罠になりがちである、というところで、新しい言語はそういう罠を取り去ろうという方向に向かっている。そういう意味では、Rustも間違っていないとは思うけど、オブジェクト指向みたいに概念を理解するだけでお腹一杯みたいな状況になっている気はするんだよね。

オブジェクト指向の概念なんて使う時にはほとんどどうでも良かったりはした。動物クラスを継承して哺乳類クラスと爬虫類クラスが派生するとか、人間クラスから大人クラスや子供クラスを派生させるとか、実際の実装にはほとんど関係ない説明とか見たことがあった。概念を説明するにはいいのかもしれないけど、コーディングしていくのに役に立つものではあまりなかったような気がする。

それとライブラリなどをクラスで作っていくにはある程度、概念は必要かもしれないけど、ライブラリを使うにあたってはそれほど概念は必要じゃない感じはした。確かにカプセル化とかは自分の継承したクラスにも必要にはなってくるけれども、それにしたって概念を知らないとどうにもならないということはなくて、オブジェクトをインスタンス化してメソッドを使うということに関しては、構造体の中の関数を使って中の変数を使う程度の認識で良いはずで、実際それ以上のことをしているとは思えない。





だから、多くの人はこうすれば良い的なベストプラクティスを写経するような形でいいんだと思う。ただ、昔は書籍が基本になっていてそれほど悪い書き方をすることがなかったと思うんだけど、今は御行儀の悪い書き方をする人が晒して、それがそこそこ検索の上の方に出てきてしまう世の中なので、勉強するには一冊でも折り目正しい良書があるといいと思う。

正直、やれることが実現できれば、概念なんてどうでもいいんですよ。言語オタクはそういうのが大切と思うかもしれないけど、実際に何が作れるかが問題で、基本的に概念は飾りに過ぎないと思うんですよね。概念を理解して、それをコードに落とし込めた方がいいに決まってますが、そこまで学習コストを払ってまで万人が使うものかということに関しては疑問がありますね。

テクノロジーは理解しなくても使えて便利というところも大いにあると思うのですね。ガベージコレクションが出てきて意図的に解放しなくて良くて楽できていいジャンでいいと思うのです。ガベージコレクションの動作コストよりも、放置してメモリーリークになった方が害が大きいし、後処理を書かなくていいメリットの方が大きいからこそいろんな言語に採用されている。そこに概念はどうでもいいし、そこそこ速ければその言語の開発者でもなければGCの方式がどうとかどうでもいい。


我々の多くはプログラミングを趣味でやっていたり、仕事でやっていたりするわけですが、そこに興味がどれくらいあるかっていうのは人に寄りけりだとは思います。概念は知っておいた方がいいのだろうけど、実際に動かすことにおいてはそんなに関係ないんだよね。逆に概念を知っていないと書けないとか、パフォーマンスが異常に落ちるとかあってはいけない気はする。言語のサポートする範囲は低レベルであることを考えると、そういうこともあるのだろうけど、基本的に言語側によきに計らってもらわないとしんどすぎて使いたくない。

GolangにしてもC言語のより良い代替を目指すところもあったと思うけど、RustがC/C++を完全に代替できそうなポテンシャルから言うと、うるさく言う人も多いのかもなと思ったりもする。初期の学習コストが思いの外大きい事を別にすれば、もうC言語を使う必要はないのかもしれないなと思う。C言語はいろいろなことが出来すぎて、自分でコントロールしないといけない部分が多すぎるものになってしまった。さらに学習コストも低かったので、ここまで支持されたんだろうと思う。

そういう経緯からもシステム開発言語に特化した方がいいと思う。なんでもできるというのはそれはそれで害でもあるからね。他の言語で足りるところはそれでお手軽に書いた方がいろいろコストが安いだろう。


とりあえず、コンパイルに怒られまくりながら書いてみようと思う。続けるかどうかは何か作るために必要かどうか考えてみて、他の言語でもいいなら放っておこう。たぶん、無駄になる可能性が高いけど、それはそれでお楽しみの一つとしてやってみようかと思う。

トピック的に見ていくと書いておきながら、それが全然出来ていないね。言語の内容は他のところで見てください。説明できるほどわかっていないし、理解できたほど読んでいないしね。


タグ:RUST
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0