LoginSignup
1
2

Programming Rust(4) on docker(149)

Last updated at Posted at 2021-09-05

Programming Rust
https://www.oreilly.com/library/view/programming-rust/9781491927274/

Programming Rust, 2nd
https://www.oreilly.com/library/view/programming-rust-2nd/9781492052586/

プログラミングRust
https://www.oreilly.co.jp/books/9784873118550/

Rust - Official Image | Docker Hub
https://hub.docker.com/_/rust

bash
$ docker run -it rust /bin/bash

docker起動
コード例は本には
https://github.com/oreillymedia/programmingrust

と書いてあったがそのURLは存在せず。
https://github.com/oreillymedia/

は存在したが ProgrammingRustは見当たらない。

「ProgrammingRust oreilly」 で検索したら。
https://github.com/ProgrammingRust

だった。

bash
# apt update; apt -y upgrade; apt install -y wget vim
# cd /home
# mkdir rust
# cd rust
# wget -rx https://github.com/ProgrammingRust/examples

ちょっと保存

bash
$ docker commit 809744160e67  kaizenjapan/rust
# docker push kaizenjapan/rust

調査事項

Hosted環境のRustはすぐに分かった。

Freestaindng環境のRustはあるのか。

A Freestanding Rust Binary
https://os.phil-opp.com/freestanding-rust-binary/

Freestanding (runtime-less) Rust #3608
https://github.com/rust-lang/rust/issues/3608

Comments for "https://os.phil-opp.com/freestanding-rust-binary/
https://github.com/phil-opp/blog_os/issues/386

目次

1章 なぜRustなのか?
1.1 型安全性
2章 Rustツアー
2.1 Rustのダウンロードとインストール
2.2 簡単な関数
2.3 ユニットテストの記述と実行
2.4 コマンドライン引数の処理
2.5 簡単なWebサーバ
2.6 並列プログラミング
2.6.1 マンデルブロ集合とは
2.6.2 コマンドライン引数に書いた値ペアのパース
2.6.3 ピクセルから複素数へのマッピング
2.6.4 集合の描画
2.6.5 画像ファイルの書き出し
2.6.6 並列マンデルブロプログラム
2.6.7 マンデルブロ描画プログラムの実行
2.6.8 安全性は見えない
3章 基本的な型
3.1 機械語型
3.1.1 整数型
3.1.2 浮動小数点数
3.1.3 真偽値型
3.1.4 文字
3.2 タプル
3.3 ポインタ型
3.3.1 参照
3.3.2 Box
3.3.3 rawポインタ
3.4 配列、ベクタ、スライス
3.4.1 配列
3.4.2 ベクタ
3.4.3 ベクタを1要素ずつ作る
3.4.4 スライス
3.5 文字列型
3.5.1 文字列リテラル
3.5.2 バイト文字列
3.5.3 メモリ上の文字列
3.5.4 文字列String
3.5.5 文字列の使用
3.5.6 他の文字列に類する型
3.6 基本型の先にあるもの
4章 所有権
4.1 所有権
4.2 移動
4.2.1 移動を伴う他の操作
4.2.2 移動と制御フロー
4.2.3 移動とインデックスされる値
4.3 コピー型:移動の例外
4.4 RcとArc:所有権の共有
5章 参照
5.1 値としての参照
5.1.1 Rustの参照 vs C++の参照
5.1.2 参照の代入
5.1.3 参照への参照
5.1.4 参照の比較
5.1.5 参照はヌルにはならない
5.1.6 任意の式への参照の借用
5.1.7 スライスとトレイトオブジェクトへの参照
5.2 参照の安全性
5.2.1 ローカル変数の借用
5.2.2 仮引数として参照を受け取る場合
5.2.3 参照を引数として渡す
5.2.4 返り値としての参照
5.2.5 参照を含む構造体
5.2.6 個別の生存期間パラメータ
5.2.7 生存期間パラメータの省略
5.3 共有と変更
5.3.1 オブジェクトの海に立ち向かう
6章 式
6.1 式言語
6.2 ブロックとセミコロン
6.3 宣言
6.4 ifとmatch
6.4.1 if let式
6.5 ループ
6.6 return式
6.7 なぜRustにはloop式があるのか
6.8 関数呼び出しとメソッド呼び出し
6.9 フィールドと要素
6.10 参照演算子
6.11 算術演算子、ビット演算子、比較演算子、論理演算子
6.12 代入
6.13 型キャスト
6.14 クロージャ
6.15 優先順位と結合性
6.16 その先へ
7章 エラー処理
7.1 パニック
7.1.1 スレッドの巻き戻し
7.1.2 アボート
7.2 Result
7.2.1 エラーの捕捉
7.2.2 Result型のエイリアス
7.2.3 エラーの表示
7.2.4 エラーの伝搬
7.2.5 複数種類のエラーへの対応
7.2.6 「起こるはずのない」エラーの処理
7.2.7 エラーを無視する
7.2.8 main( )でのエラー処理
7.2.9 カスタムエラー型の宣言
7.2.10 なぜResultを使うのか
8章 クレートとモジュール
8.1 クレート
8.1.1 ビルドプロファイル
8.2 モジュール
8.2.1 モジュールの複数ファイルへの分割
8.2.2 パスとインポート
8.2.3 標準のプレリュード
8.2.4 Rustの構成要素:アイテム
8.3 プログラムからライブラリへ
8.4 src/binディレクトリ
8.5 属性
8.6 テストとドキュメント
8.6.1 結合テスト
8.6.2 ドキュメント
8.6.3 ドクテスト
8.7 依存ライブラリの指定
8.7.1 バージョン
8.7.2 Cargo.lock
8.8 クレートのcrates.ioでの公開
8.9 ワークスペース
8.10 もっといいもの
9章 構造体
9.1 名前付きフィールド型構造体
9.2 タプル型構造体
9.3 ユニット型構造体
9.4 構造体のレイアウト
9.5 implによるメソッド定義
9.6 ジェネリック構造体
9.7 生存期間パラメータを持つ構造体
9.8 一般的なトレイトの自動実装
9.9 内部可変性
10章 列挙型とパターン
10.1 列挙型
10.1.1 データを保持する列挙型
10.1.2 列挙型のメモリ上での表現
10.1.3 列挙型を用いたリッチなデータ構造
10.1.4 ジェネリック列挙型
10.2 パターン
10.2.1 パターン内のリテラル、変数、ワイルドカード
10.2.2 タプルと構造体パターン
10.2.3 参照パターン
10.2.4 複数の可能性へのマッチ
10.2.5 パターンガード
10.2.6 @ パターン
10.2.7 パターンが使える場所
10.2.8 二分木へのデータ追加
10.3 大きな絵の中での位置付け
11章 トレイトとジェネリクス
11.1 トレイトの使い方
11.1.1 トレイトオブジェクト
11.1.2 トレイトオブジェクトのメモリ配置
11.1.3 ジェネリック関数
11.1.4 どちらを使うべきか
11.2 トレイトの定義と実装
11.2.1 デフォルトメソッド
11.2.2 トレイトと他人の定義した型
11.2.3 トレイトでのSelf
11.2.4 サブトレイト
11.2.5 スタティックメソッド
11.3 完全修飾メソッド呼び出し
11.4 型と型の関係を定義するトレイト
11.4.1 関連型:イテレータはどう機能するか
11.4.2 ジェネリックトレイト:演算子オーバーロードはどう機能するか
11.4.3 バディトレイト:rand::random( )はどう機能するか
11.5 制約のリバースエンジニアリング
11.6 結論
12章 演算子オーバーロード
12.1 算術演算子とビット演算子
12.1.1 単項演算子
12.1.2 二項演算子
12.1.3 複合代入演算子
12.2 等価性テスト
12.3 順序比較
12.4 IndexとIndexMut
12.5 その他の演算子
13章 ユーティリティトレイト
13.1 Drop
13.2 Sized
13.3 Clone
13.4 Copy
13.5 DerefとDerefMut
13.6 Default
13.7 AsRefとAsMut
13.8 BorrowとBorrowMut
13.9 FromとInto
13.10 ToOwned
13.11 BorrowとToOwnedの動作例:つつましいCow
14章 クロージャ
14.1 変数のキャプチャ
14.1.1 借用するクロージャ
14.1.2 盗むクロージャ
14.2 関数型とクロージャ型
14.3 クロージャの性能
14.4 クロージャと安全性
14.4.1 殺すクロージャ
14.4.2 FnOnce
14.4.3 FnMut
14.5 コールバック
14.6 クロージャの効率的な利用
15章 イテレータ
15.1 IteratorトレイトとIntoIteratorトレイト
15.2 イテレータの作成
15.2.1 iterメソッドとiter_mutメソッド
15.2.2 IntoIteratorの実装
15.2.3 drainメソッド
15.2.4 他のイテレータの生成方法
15.3 イテレータアダプタ
15.3.1 mapとfilter
15.3.2 filter_mapとflat_map
15.3.3 scan
15.3.4 takeとtake_while
15.3.5 skipとskip_while
15.3.6 peekable
15.3.7 fuse
15.3.8 反転可能イテレータとrev
15.3.9 inspect
15.3.10 chain
15.3.11 enumerate
15.3.12 zip
15.3.13 by_ref
15.3.14 cloned
15.3.15 cycle
15.4 イテレータの消費
15.4.1 単純な累積:count, sum, product
15.4.2 max、min
15.4.3 max_by、min_by
15.4.4 max_by_key、min_by_key
15.4.5 アイテム列の比較
15.4.6 any、all
15.4.7 position、rposition、ExactSizeIterator
15.4.8 fold
15.4.9 nth
15.4.10 last
15.4.11 find
15.4.12 コレクションの作成:collectとFromIterator
15.4.13 Extendトレイト
15.4.14 partition
15.5 独自イテレータの実装
16章 コレクション
16.1 概要
16.2 Vec
16.2.1 要素へのアクセス
16.2.2 イテレート処理
16.2.3 ベクタの伸長と縮小
16.2.4 連結
16.2.5 分割
16.2.6 入れ替え
16.2.7 ソートと検索
16.2.8 スライスの比較
16.2.9 ランダムな要素
16.2.10 Rustでは無効化エラーは生じない
16.3 VecDeque
16.4 LinkedList
16.5 BinaryHeap
16.6 HashMapとBTreeMap
16.6.1 エントリ
16.6.2 マップに対するイテレート
16.7 HashSetとBTreeSet
16.7.1 セットのイテレート
16.7.2 値が等しいが別のものの場合
16.7.3 セット全体に対する演算
16.8 ハッシュ
16.8.1 ハッシュアルゴリズムのカスタマイズ
16.9 標準コレクションを超えて
17章 文字列とテキスト
17.1 Unicodeについて
17.1.1 ASCII、Latin-1、Unicode
17.1.2 UTF-8
17.1.3 テキストの向き
17.2 文字(char)
17.2.1 文字の分類
17.2.2 数字の取り扱い
17.2.3 文字の大文字小文字変換
17.2.4 整数との間の変換
17.3 Stringとstr
17.3.1 String値の作成
17.3.2 単純な検査
17.3.3 テキストの追加と挿入
17.3.4 テキストの削除
17.3.5 検索とイテレート関数の名前付け
17.3.6 パターンによるテキスト検索
17.3.7 検索と置換
17.3.8 テキストに対するイテレート
17.3.9 トリミング
17.3.10 文字列の大文字小文字変換
17.3.11 他の型を文字列からパース
17.3.12 他の型から文字列への変換
17.3.13 他のテキストに類する型としての借用
17.3.14 UTF-8としてのアクセス
17.3.15 UTF-8データからのテキストの作成
17.3.16 ヒープ確保の遅延
17.3.17 汎用コレクションとしての文字列
17.4 値のフォーマット出力
17.4.1 テキスト値のフォーマット
17.4.2 数値のフォーマット
17.4.3 他の型のフォーマット
17.4.4 デバッグのためのフォーマット
17.4.5 デバッグのためのポインタのフォーマット
17.4.6 インデックス、名前による引数の参照
17.4.7 動的なフィールド幅
17.4.8 独自型のフォーマット出力
17.4.9 フォーマット言語の独自コードでの利用
17.5 正規表現
17.5.1 Regexの基本的な使い方
17.5.2 Regex値の遅延作成
17.6 正規化
17.6.1 正規化形式
17.6.2 Unicode正規化クレート
18章 入出力
18.1 ReaderとWriter
18.1.1 Reader
18.1.2 バッファ付きreader
18.1.3 行の読み出し
18.1.4 行に対するcollect
18.1.5 writer
18.1.6 ファイル
18.1.7 シーク
18.1.8 他のreader型、writer型
18.1.9 バイナリデータ、圧縮、シリアライズ
18.2 ファイルとディレクトリ
18.2.1 OsStrとPath
18.2.2 PathとPathBufのメソッド
18.2.3 ファイルシステムアクセス関数
18.2.4 ディレクトリの読み出し
18.2.5 プラットフォーム固有機能
18.3 ネットワークプログラム
19章 並列性
19.1 フォーク・ジョイン並列
19.1.1 spawnとjoin
19.1.2 スレッド間でのエラー処理
19.1.3 不変データのスレッド間共有
19.1.4 Rayon
19.1.5 マンデルブロ集合再訪
19.2 チャネル
19.2.1 値の送信
19.2.2 値の受信
19.2.3 パイプラインの実行
19.2.4 チャネルの機能と性能
19.2.5 スレッド安全性:SendとSync
19.2.6 ほとんどすべてのイテレータをつなげられるチャネル
19.2.7 パイプラインを超えて
19.3 可変状態の共有
19.3.1 排他ロックとは何か?
19.3.2 Mutex
19.3.3 可変性とMutex
19.3.4 排他ロックがいつもいいとは限らないのはなぜか
19.3.5 デッドロック
19.3.6 毒された排他ロック
19.3.7 排他ロックを用いた、複数の消費者を持つチャネル
19.3.8 リードライトロック(RwLock)
19.3.9 条件変数(Condvar)
19.3.10 アトミック変数
19.3.11 グローバル変数
19.4 Rustでの並列コードの開発
20章 マクロ
20.1 マクロの基本
20.1.1 マクロ展開の基礎
20.1.2 意図しない結果
20.1.3 繰り返し
20.2 組み込みマクロ
20.3 マクロのデバッグ
20.4 json!マクロ
20.4.1 フラグメント型
20.4.2 マクロ中の再帰
20.4.3 マクロでのトレイトの利用
20.4.4 スコープと健全マクロ
20.4.5 マクロのインポートとエクスポート
20.5 マッチ中のシンタックスエラーを避ける
20.6 macro_rules!の先
21章 unsafeなコード
21.1 何に対してunsafeなのか?
21.2 unsafeなブロック
21.2.1 例:効率的なASCII文字列型
21.3 unsafe関数
21.4 unsafeブロックかunsafe関数か?
21.5 未定義動作
21.6 unsafeトレイト
21.7 rawポインタ
21.7.1 rawポインタを安全に参照解決するには
21.7.2 例:RefWithFlag
21.7.3 ヌルとなり得るポインタ
21.7.4 型のサイズとアラインメント
21.7.5 ポインタ演算
21.7.6 メモリに移動、メモリから移動
21.7.7 例:GapBuffer
21.7.8 unsafeなコードのパニック安全性
21.8 外部言語関数:CとC++の関数をRustから呼び出す
21.8.1 共通のデータ表現を見つける
21.8.2 外部言語関数、変数の宣言
21.8.3 ライブラリ関数の使用
21.8.4 libgit2のrawインターフェイス
21.8.5 libgit2に対する安全なインターフェイス
21.9 結論

自己参照

「Rust Advent Calendar 2021」集計してみる
https://qiita.com/kaizen_nagoya/items/f6431cec90a49879dcd8

RustのLT&パネルを企画するにあたって
https://qiita.com/kaizen_nagoya/items/dca0e71fddc189ad622f

Programming Rust on docker(149)
https://qiita.com/kaizen_nagoya/items/d71b2c1932562ac1ecfc

dockerでRUST
https://qiita.com/kaizen_nagoya/items/c07350f6ab6ec656c42c
 初めてのRUST
https://qiita.com/kaizen_nagoya/items/dd8f5e3b218d48fb79e1

RUST入門
https://qiita.com/kaizen_nagoya/items/b3a42bf5a849dabe52c5

Reference

Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

C++ Support(0) 
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

自動制御、制御工学一覧(0)
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧 
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

小川清最終講義、小川清最終講義(再)計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>

文書履歴(document history)

ver. 0.01 初稿 20210725
ver. 0.02 タグ追記 20230506

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2