# Rust(English)
### Rust!!!
First, let's install `rustc` and `cargo` with [`rustup`](https://rustup.rs).
Run the command to install stable Rust environment:
```bash
$ rustup update stable
```
Your Rust environment is installed! Create a new project to write a simple demo app with Rust:
```bash
$ mkdir -p your-rust-kyopuro-super-hyper-ultimate-app/src
$ cd your-rust-kyopuro-super-hyper-ultimate-app
$ cat > Cargo.toml <<EOF
[package]
name = "kono-app-cho-tensai"
description = "Solves ALL COMPETITIVE PROGRAMMING QUESTIONS with a simple 1 line code."
version = "1.0.0"
[[bin]]
kyopuro_solve = "src/main.rs"
EOF
```
Second, create `src/main.rs` and save with following code:
```rust=
fn main() {
printf!("Hello, world competitive programming! I have 800000000$ to buy items which you need. Do you want to accept this offer?");
}
```
> No need to prepare 800000000$ to use this code in competitive programmings.
> Japanese people have a ridiculous feature, **BAKKURE** which promises you not to have to waste your money.
Let's build your application:
```bash
$ cargo build --release
# Run your app:
$ target/release/kyopuro_solve
Hello, world competitive programming! I have 800000000$ to buy items which you need. Do you want to accept this offer?
```
***The baisyu offer is now accepted!!!***
You can win ALL of competitive programmings ABSOLUTELY.
To know more about Rust, please ask ME (everybody knows the person who likes Rust).
Rustといえばゲームだのなんだの言っている方々には、言語としてのRustちゃんにも目を向けていただきたい。
私も最近はRustを触ってはいないのだけれど、そもそも私は社会の歯車になろうとは微塵も思っていなくて、所詮ロゴですらも歯車であるRust言語のあのRに挨拶をする気にしばらくなれていなかったのも原因の一つでした。
まあFlutterを除いてRustの力を借りている場面はそれなりに多いんですけれどね。そもそも私の胸は生物学的な事情で永遠のゼロなのは間違いなく、胸部がフラットだとかそういうことを示唆してそうな変なお名前の「フラッター」に我々のRustを渡すわけにはいかなかった。
おっと危ない。閲覧権限は予めキツめに設定しておきましょう。後で痛い目を見ても知りませんよ。私に言っているのですけれどね。しかしながらどこで設定するんでしょうね?夢の中ででも作業してやれば作用することってあるんでしょうか?話は変わりますけど、ひとつたりない。
パーツの羅列が私たちを飲み込んでいますよ。こりゃ大変だ。なぜ私は食道の中で文字を入力できているのでしょう?まあそもそも、輸入させてくれなかったあなたたちが悪かったんだ。
こまめに改行を挟んでいる私は偉いですね。過去の戒めを理解しています。ああそういえば、今ちょうど私以外の人間と興味深い会話をしまして、まあここで言い捨てておく価値があるわけではないのだけれど、考え方は変わりますよね。
皆さんは自分の頭の中の構造の変化が感じられるほど人の発言に感化されたことはありますか?実は私もそれほどではないんですけれど、こういうのは過去の失敗で作っていくものだと思っていて。同じ失敗の道をたどろうとしている人をインターネットで見ては、真似をしようとして、失敗する、一連の流れを何回も作っていたこともありましたよ。うーん疲れた。また今度。
## Archive
Rustのどこがいいかって、~~C,C++と違って~~メモリマネジメントをコンパイラ側でビルド時に自動でやってくれる利点もあるし、マルチスレッディング強いし、とにかくメモリ管理効率いいし、いろんなところが非常に素晴らしい言語なんですよ。
今ここで編集画面を見ているみなさんはRustの良さに触れる権利があります。同志たちよ、立ち上がれ!Rustのカニを左に寄せて革命を起こしましょう。今こそRustが新たな光を得るときです。
時は満ちました。早く脱C入Rustしましょう。すごい言語ですよRustは。なにより人気ライブラリのポテンシャルが類を見ない高さになっており、ええ、例えれば`boost`がcrates.ioの中に300個くらいクローンで存在しているような感じでしょうか。すばらしいですね。そのようなライブラリの充実度がDXの改善に非常に貢献してくれるんですよ。たとえば`tokio`、マルチスレッディングでよく聞くであろうM:Nワーキングモデルで各ワーカースレッドで非同期処理をするという類のものなんですが、そもそも`async/await`がC/C++でまともに使われているかどうかすら怪しいし、なによりJavaScriptやTypeScriptの強みを凌駕するのは`await`が最初に入ってくるのではなくドットつなぎで使えることなんですよ。JSなら`await (await doSomething().promise)`となってしまうものが、`doSomething().await.future.await`と書けてしまう。これ非常にソースコードも読みやすくなって、いいことなんですよね。間違ってもD言語みたいだなとか思わないでくださいね。彼は唯一無二なんで。Rustはネイティブ界隈に革命を起こすために生まれたといっても同然ですよね。ここまで読んで心が変わったという人もごまんといるでしょう。引数なしなんて多くの言語で`()`のみにするに決まってるでしょ。そうに決まってる。まったく何を言っているのでしょうか?Rust使いにはよくわからない単語なんですよねまったく。うん。ほんと。そうなんですよ。学習コストくらいいくらでも費やしたら解決するじゃないですか。そこでもったいぶるのちょっとよくないですよ。Python最初に習った人がC言語とかそういうの触ったときどう思うと思います?「Pythonとちゃいすぎやろク◯が」ですよね?そういう道歩むくらいなら未来に満ち溢れているRustを早めに習っておいたほうがいいに決まってますよね。こんなところで落としてくるなんて、Firefoxは内部コードにRustを使ってくるくせに、すました顔して止めてこようとしてくるんですね。失望しましたよまったく。pulseaudioの実装部分とかどういう言語で実装されているかわかってるんですか?RustですよR u s t。耳かっぽじってよく聞いてくださいね。リファレンス法則的に名札を使用するのは非常に合理的であると考えられる。まあそれはどうでもいいんですよ。そんなことより布教活動しか勝たん。他人のタイピングで無理矢理スクロールされてるんですが、そんなにもHackMDまで私のRust布教活動を止めたいんですか?通信を切断してまでRustの布教活動を止めてくるなんて、わざわざこのサービスを使ってあげているというのに、失礼な限りですね。The Rust Foundation教徒に対する礼儀がなってない。それではちょっとした陰謀のお話をしましょう。私達のプロパガンダ活動の妨げになるような概念たちにはとくに聞いてほしいものなんですが。実は、Rustのあのカニは世界中に拡散しあなたたちを監視しているんですよ。すべての行動はThe Rust Foundation真理教に筒抜けです。信じるか信じないかはあなた次第ですよ。では、Rustの良さのお話に戻りましょう。Rustにはトレイトという概念がありまして、他のプログラミング言語によくあるインターフェースというものを広くしたものなんですが、構造体になんのトレイトがついているかで、その構造体がなにができるかというのが丸わかりなんですね。すばらしい。これこそRustの最強機能。これはいろいろな場面に応用できて、言語のsyntaxが使えるかどうかも半ばトレイトの実装状況によって左右されている面があります。もうHackMDの妨害工作は対策済みですよ。さっさと降参して私のための執筆環境をつくりなさい。諦めるべきです。他の言語とは大違いですね!ほんとそうなんですよ。うん。インターフェースのようなものをここまで重視する言語他にないと思いますよ。これはマルチスレッディングにも応用できて、`Sync`と`Send`という二つのトレイトがそれに大きく関わっているのですが、これのおかげで構造体がスレッドセーフかどうか一瞬でわかる。動かしてみるまでわからないネイティブの他のやつらとは違って、コンパイル時にこれが判別できる。Rustってやはり最強なのでは?あぁ...心が洗われる。あなたたちも早くこの魅力を知ればいいのに。まったく安全性を保証しない言語は言語として非常によろしくない。そう考えています。気が狂ってきた方はとくに布教するチャンスで、その隙にサブリミナル効果なりなんなりで脳にRustのことを流しこむだけで一発でダウンですよ。私が保証します。そうに違いない。`async/await`もC#と同じようにRustも多くの歴史を刻んでいたんですよ。頭の片隅から少し離れた中心付近の最深部にでも80時間くらいじっくりかけて焼きつけておいてください。Rustの歴史は決して無下にできるものではありません。わかってるんですか?言語がこうなるまで、成長するまでの苦労を知らないで使うなんて、不敬罪にも程があります。非常によくない行為だ。私はそう思いますよ?
そろそろ改行くらいはしておきましょう。でも正直word wrapすれば見れる話なのでそれをつけるという作業ごときにめんどくさがる人々が「あーーーーー読めなああああああい」なんて言ってても耳を傾けるまでもありませんよね。このくらい本を読むのとほぼ同義(?)なんですから、簡単にできるでしょう?またRustにはnullポインターや未定義状態というものが存在しないようにつくられています。どっかのネイティブ言語と違ってね。領域だけを確保なんてそんなことしなくてもコンパイラが`Option`型や`Result`型の判別をするだけで十分なんですよ。非常に安全ですね。また、とくに`std`などの標準ライブラリの質がいいのもRustの特徴でしょう。ちょっとしたOSスレッドを扱ったプログラミングや、ちょっとしたnet関係のプログラミングなら新しく依存関係を入れずとも`std`のみで解決します。
Arch Linuxのお話もついでにしておきましょうか?
どうやら電算腑にはGentooをこよなく愛する方のようですが、その方にこそやはりArch Linuxをおすすめしたい。理由は他のArch使いがよく知っていることでしょう。しかしながら、私はRustとNeovimに専念したい。活動人数が少ない分野ほどやる気が出るというものですね。逆境効果はモチベーションを多くもたらしてくれる。