Help us understand the problem. What is going on with this article?

【ポエム】「『Rustは関数型言語』とか言われてるけど、そんな枠にとらわれた言語じゃない」ってことを語りたい

More than 3 years have passed since last update.

この記事はRust その2 Advent Calendar 2016 - Qiita9日目の記事です。

普段はアルバイトでコンシュマーゲームやスマホゲームのデバッグをしている、普段はPython偶にDJやってるプログラマもどきの@manzyunです。

「これからRustを触ってみよう」
とか、
「Rustとか関数型なんでしょ? 怖いお」
と踏みとどまってる人の背中を後押しする事ができたら幸いです。

まえがき

最初Rust Programming Languageは「Mozillaが作った関数型言語」みたいな触れ込みだった気がする。
しかしその実体は「関数型言語」とひとまとめにしてしまうのは少し違う何かを覚えたので、
超初学者ながら、Rustがどれだけ面白い言語なのかを、僕の言葉で語りたいと思った。

この記事に問題あったらQiitaの運営さんに報告してください。

私とRustの出会い

「関数型言語くるぞ」の雰囲気

僕がRustを触ったのはそんな動機からである。
ErlangやHaskellもほんのチョット触ったが、結局僕のオツムの性能がたりなさ過ぎて追いつかず、Lispも触ってみたが、あまり良い書き心地では無かった。


余談
Lisp学習教材として使っていたのは「魔法言語 リリカル☆Lisp」だったりする。
「回答で改行とインデントが行えればコードの可読性が上がってもう少し回答しやすかったのにな」というのが個人的な感想。


閑話休題。個人的にはErlangやHaskellやLispはものすごくよく出来てると思うし、Lispの子どもであるShemeも学習教材としても素晴らしい教材だと思う。

しかし実際の自分の理解能力としては、
「ラムダ式って、『f(x)=x』を『λx.x』って書き換えたようなものでしょ? ついでに言うとラムダ式だけで整数を表現できるんだっけか」
とか、
「カリー化とかモナドとか、やっぱりわかりません」
という程度の知識レベルなので、ErlangやHaskellはピーキーに思えてしまった。

そんな具合で「関数型言語アレルギー」みたいなものを持った僕は、新しい言語を覚えると言ったらSmalltalk(実行環境: Pharo)に走る様なそんな調子であった。

Firefoxが好きです。Mozillaが好きです。Rustも好きになれそう。

そこでRustが出てきた。最初は非常に面白そうに思えた。動機は大したことではなく、単に「Mozillaが並列処理に強い関数型言語を作ってる」という話だけ聞いて、公式サイトのコードを見たら、宣伝文句通り「ゼロ・コスト」感はあったためである。

今考えて見ると、それはつまるところ
「『普通に構造化プログラミングしてたら、いつの間にか関数型の恩恵受けてた!』言語作ってるんだろうな」
と当初は思ってたと思う。

PythonとRustを繋げたArmin Ronacher(@mitsuhiko)の存在。

話は少しそれるが、私はPythonが好きである。
PEP8は順守できてないし、そもそもサービスさえも稼働させてないが、「寿命つき匿名掲示板」を作ったりした。

manzyun/Setsuna: Micro SNS or BBS, maybe.

コレを作ってる最中に、ちょうどArminさんがこんな記事を書いてた。
Rust for Python Programmers | Armin Ronacher's Thoughts and Writings

有難いことに@t2yさんがQiitaで翻訳してくださってる。
[翻訳] Python プログラマーのための Rust 入門 - Qiita

ところで、Arminさんが僕にどういう影響を与えたのだという話なのだが、先ほど紹介したSetsunaはFlaskというPythonのWebマイクロフレームワークで作ってる。

個人的な観測範囲では、ArminさんはPython界隈では著名人だと思ってる。
その彼がPythonプログラマのためのRustの記事を書いてるのである。

正確に言うと、
「へえ、RustとPythonを絡めて記事書いてる人居るんや。って思ったらこの人、Flask作ってる人じゃねえか。ひえぇ」
という感じで僕のRustへの興味は高まったわけである。

Rustは新しいジャンルの言語である

そんな風にして興味をそそられた自分はRustを触り始めたりしてた。その時には有難いことにRust公式ドキュメントの8割程が翻訳されていたので、非常に学習しやすかったし、そこでRustの真の姿を垣間見ることができた気がする。

以下では、自分が特に面白いと思った事をダラダラ書いていく。

変数束縛とパターン

変数束縛

これは正直驚いた。と同時にすごく便利に思えた。
というより、今まで自分が触ってきた言語の変数の概念でそのままやっていくと多分詰まるところが多々出てくるが、理解した瞬間にものすごい力になりそうと思った。
具体的にどこでそう思ったかは僕のオツムでは上手く説明できないので、リンク先を参照して何か感じていただければ幸い。

式と文

関数

コレだけで構成されているとRustは言うのである。
正直信じられないし理解もしていない。が、事実はそうなのである。
むしろここまで削ぎ落としたからこそRustはその性能を存分に発揮できるのかもしれないとおぼろげに思う。

所有権

所有権
これがまさにRustの肝だろう。今の僕には理解できないが、Rustを書き続けることでそのうち理解できるのかもしれない。

しかし、この機能、最初はうっとおしいと思うかもしれないが、おそらくRust中級者になってくるとこの機能のおかげで精神的にも安全なプログラミングができるのだと僕は確信を抱いている。

構造体とメソッド構文

構造体
メソッド構文
僕は今までクラスの中にメソッドの式を書いていた。
しかしRustは違う。外部に書くことを基本としている。
(おそらくPythonやRubyといったLL言語でも可能だと思うが、あまりやったことはない)

最初は多少の違和感を抱くだろう。しかしちょっと考え方を変えればすんなり飲み込める。むしろこっちのほうがインデントが少なくなっていいかもしれないとさえ思う。

マッチ

マッチ
Rustのチュートリアルで一番特徴的に思えるのがこの機能だろう。
マッチはきっと力強い見方になってくれると思う。そう確信を抱く。

あとがき:Rust所感その他もろもろ

「Rustは関数型を謳っているが、実際の構文は全くそれらしくなくて気持ち悪い」
とおっしゃる方も居ることは重々承知してるし、自分も最初は戸惑った。
しかし、Rustはそんな「関数型」というくくりで触るのを嫌悪しては勿体無い言語だと思う。
それくらいRustにはスゴイ力があると、言葉で説明できないけど、ひしひしと感じている。

是非、Rustを触ってみよう。面白い世界が見えてくると僕は思う。

参考資料

manzyun
ただの放浪者です。ちょっとプログラミングができるだけです。 CoderDojo Sapporo辺りでメンタリングやってました(過去形)。CoderDojoは絶賛Mentor募集中です。
https://manzyun.github.io/himajinmanga
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした