【Rust備忘録】意味不明な記法の覚え書き:その1

RustでSDLとOpenGLのコードを書いているとあんまり見たことのないような 書き方をする箇所がちらほらありました。

Rust特有の書き方なんだと思うので こういう意味不明な部分が出てきたらしっかりと調べようと思います。

C++だと歴史があるので最近の言語にも同じような書き方があったりとかで 大体なにしているかわかるのですが、Rustの場合は新しすぎてよくわからない記法が多く感じます。

#[allow(dead_code)]

OpenGLのコードを写経してると出てきた意味不明なコードです。

どうやらリファレンスを眺めているとRustのコンパイラには 「dead_code」というリント機能があるらしく、使用されていない関数が存在するときに 警告を出すようでその機能を無効化するためのものらしいです。

Rustとしては使用されていないコードは書くべきではないということらしいので あんまり褒められたやり方ではないことは確かですね。

今のところこれをしないとコンパイルが通らないっていうときぐらいにしか使わなさそうです。

allow()ということは許可するという意味だと思うので、dead_code以外にも 他になにか使う事ができそうな感じもします。

遭遇したらまた書こうかなと思います。

#[rustfmt::skip]

rustfmtというRustのコード自動整形フォーマッターがあるそうで、 それを適用したくないときに用いるアノテーションらしいです。

正直今のところはまだrustfmtを使ってないのでいらないですね。

でもガリガリコードを書くようになったらフォーマッターを使うようになると思うので 何をしているかを理解しておくのはいいことだなと思います。

おそらく整形されちゃうとコード的に3次元のコードって分かりづらいので フォーマッターを無効にしたくて書かれているものでしょう。

先ほどのallow()のようにコードの前になにかつけるアノテーションというのは Rustでは結構頻発するような感じがします。

'running :loop

これ、検索で探しづらかったです(笑)

シングルクォーテーションで始まってその後に文字列が来るというのが ちょっと意味わかんなかったのですがどうやらこの「running」の部分はループ等の識別ラベルで 文字列自体は任意だそうです。

基本的に入れ子ループになるときに付与させるものみたいですね。

「continue ラベル」のようにするとそこに処理を飛ばせる

いわゆるGOTO命令みたいなものでしょうか……?

英語ではありますが、参考は以下の記事が見つかりました。

https://stackoverflow.com/questions/50482130/what-does-it-mean-for-loop-to-have-a-lifetime

.. (ドット2つ書くやつ)

これも検索しづらいですね……

コードの中で「{..}」って記法があったので何だこれと思いつつ調べ見ると 全然ヒットしてくれなくて色々見ていると見つけました。

どうやら使わないたくさんあるフィールドで毎回書かなきゃいけないけど 特に変更無いときは..を使って省略する用記法らしいです。

他の言語でもある配列とかによく使われるドットを何個か書く記法。

誰かのコードを見て学ぶときに自然と書いたりしている人も多いので 何だこの書き方なにしてんだよこれ……ってなります。

JSのES6記法でそう言えばドットを3つ書く記法があって 「スプレッドオペレータ」なる名前で反復可能な処理で使われたりするものでした。

ドットとか中括弧とかググっても検索ワードとして認識されない記法って どうやって調べるんでしょうね……

まぁ基礎構文1から勉強しろやってことなんでしょうが。

以下のURLで知れました。 感謝です。

https://frozenlib.net/blog/2018-03-11_rust-pattern-match/

プログラミングをやっていると、わからないときに調べて納得して進んで 時間を置いて別の言語をやって戻ってきたりすると、これの意味なんだったかな っていうのが結構あるのでこうやって備忘録として残しておくのも最近いいかなと思いました。

特にいろんな言語をやっているとこういったことが頻発します。

特にポインタを扱うような言語の場合、独特な書き方を持つ事が多いので あんまり慣れていない言語に関してはこうやって書き出していこうと思います。