---
# System prepended metadata

title: 'はままつRust #2'

---

# はままつRust #2

## LT

### Rustでオセロ作成中

- Rustはじめたばっかです
- 娘が(折り紙で)オセロを作り始めたので、自分を作り始めようかと
- CPUで娘に勝つ!
- 構造設計
- とりあえずCUIでつくった(見た目がなんか懐かしい...)
- https://github.com/ktetsuo/reverust
- オセロは商標なのでリバーシに
- GUI用のライブラリではなくゲームエンジン(ggez)を使おうとしている
- 画面の表示の途中
- いろいろのRust独自の処理について理解することができた
- CPUの実装、テストコードを書いたり、reTerminal(Raspberry Pi)で実行したい
  - マルチプラットフォームは甘くないかも
- まだ対戦機能は実装できてないです
- 構造体のデフォルト値設定
[Rustのstd::default::Default](https://www.utam0k.jp/blog/2018/05/28/rust_std_default/)
- 型回りは他の言語より厳しく感じる(型変換や、浮動小数点がある型の0.0とか)

## 今月のネタ

### 最近の本
- コンセプトから理解するRust 
- Rustで始めるネットワークプログラミング
  - やすい

### Rustで何を作るか

- Javaで作ってるPLCとの通信周りの処理をRustで作れないか作業中

### Rustの質問

- 参照を持とうとすると、ライフタイムを付けろとエラーが出ますが、エラーを取ろうとすると、ライフタイムだらけになります。その様子を簡単なプログラムに書いてみました。このプログラムを見て、どのようにすべきかご意見いただければと思います。（プログラムの解説は下にコメントが書いてあります）
  - https://gist.github.com/hasebems/4c1250dfb6f3b34894e06c30471ab637
  - ライフタイム('a)を付けまくるしかない？...
  - 「Rustでやると知らないうちに詰む設計」を避けるためのTipsを集めてみる
  - https://zenn.dev/qnighy/scraps/93071f7c813cb9
  - 「構造体にライフライムを持たせない」というのが基本的らしい
  - 自分のポインタを他人に持たせて放置させてはいけない
  - ライフタイム地獄に陥る
  - 必要な時に必要なものを渡すことを徹底させること
  - 今までのC++の書き方ができなくなってくる
  - unsafeで行けるかもしれない...が危険かもしれんのでやりたくない
  - スマートポインタ(cell)を使おうと思ってる
  - https://doc.rust-lang.org/std/cell/
  - 自分のプログラミング手法を考え直す機会になるかも

## Rustのパラダイム

* ポリモーフィズムの実現
    * Dyn で今までどおりの継承もできる
        * C++: 仮想関数テーブル  (オーバーヘッドのある抽象 ポリモ)
    * Rust的には、
     トレイトとGenerics → コンパイルタイムでのポリモーフィズムの実現
     → コストがかからない (ゼロコスト抽象) 

* C++ には TMP(テンプレートメタプロ)がある。


# Rustのパラダイム

    * OOPのクラス指向では、一番の親に メソッドを持たせていた。
    * トレイトでは、構造体に、欲しいのをペタペタ貼っていく
    * OOP の is-a , has-a の関係みたいな

## Copy と Move

* 従来は、コピーがデフォ
* (Pythonなどの) のコピー
    浅いコピー
    深いコピー 

* Rustは、基本がmove
    * 基本はimmutable、さらに、基本はmove
    * 関数型なフレーバー。
    * 安全性と実行コスト
    * C++のConstキーワード

## コンパイル時間比較

＊ https://qiita.com/satosystems/items/09834a174865d3cebef7

## パターン記法

* 変数名をアンダースコアで始める
    * [名前を_で始めて未使用の変数を無視する](https://doc.rust-jp.rs/book-ja/ch18-03-pattern-syntax.html#%E5%90%8D%E5%89%8D%E3%82%92_%E3%81%A7%E5%A7%8B%E3%82%81%E3%81%A6%E6%9C%AA%E4%BD%BF%E7%94%A8%E3%81%AE%E5%A4%89%E6%95%B0%E3%82%92%E7%84%A1%E8%A6%96%E3%81%99%E3%82%8B)


## 変わった文法

シャドーイング
https://ytyaru.hatenablog.com/entry/2020/08/03/000000

## Rustは、環境がモダンだから良い

* クレート 
* PKG

# END


