SlideShare a Scribd company logo
2021.8.30 阿部耕二
Rust入学式
Rustの特徴、C/C++との違いをなんとなく理解しよう
自己紹介


目的


なぜRustか?


C/C++の課題


ワーク(Cのあいまいな動作/Rustのモダンさを体験)


Rustの組込み開発への適用
目次
2
■名前:阿部 耕二(あべ こうじ)


■組込みソフトウェア開発19年目。


 C言語、OSなし(ベアメタル)の開発業務経験がほとんど。


■GitHub: https://github.com/grace2riku


 今回のワークのソースコード:https://github.com/grace2riku/c_cpp_vs_rust/tree/master
自己紹介
3
Rustの学習成果をたまにライトニングトークなどで発信しています。


例)Rust初心者がArduinoをLチカしてみた


https://speakerdeck.com/grace2riku/rustchu-xin-zhe-gaarduinowoltikasitemita-bb5de094-8ee0-48a6-
af6e-a8ce7d430309


例)Arduinoでモーター制御ロジックを実装した話


https://speakerdeck.com/grace2riku/arduinodemotazhi-yu-rozitukuwoshi-zhuang-sitahua


自己紹介
4
・Rustってこんな言語なんだー、となんとなくわかること。
 初心者向けの内容です。
・C/C++とRustの違いがなんとなくわかること。
 C/C++経験者がRustの安全性を理解するはじめの1歩となれば嬉しいです。
目的
5
 ■資料の使い方
 後半のワークではC/C++とRustのコードを書いて実行します。
 コード、実行結果を通してC/C++・Rustの知識がアップデートできれば嬉しい。
 C/C++・Rustのコードを実際に手を動かして実行、結果を確認することをお勧めします。
 コードの実行はブラウザで動くシミュレーション環境を使うので開発環境の準備は不要です。
目的
6
・安全・安心。


⇛多機能、高機能、複雑化する組込み機器の要求仕様にC/C++で立ち
向かえるか。時代に合わせたプログラミング言語の採用を検討するの
はどうか。


・モダンだから。


なぜRustか?
7
・Cのあいまいな言語仕様(未定義動作)


・メモリ管理


・C++は難しい


・その他
C/C++の課題
8
・Cの【未定義動作】とは?


C言語の標準規格であるJIS X 3010:2003(ISO/IEC 9899:1999)より引用。


【3.4.3 未定義の動作(undefined behavior) 可搬性がない若しくは正しくないプログラム構成要素
を使用したときの動作,又は正しくないデータを使用したときの動作であり,この規格が何ら要求
を課さないもの。


参考 未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。翻訳時又はプ
ログラム実行時に,文書化された,環境に特有な方法で処理してもよい(診断メッセージの発行を
伴っても伴わなくてもよい。)。さらに(診断メッセージを出力し)翻訳又は実行を中断してもよ
い。】


C/C++の課題
9
・Cの未定義動作などあいまいな動作をするコードをRustで実行
してみましょう。


ワーク(Cのあいまいな動作を体験)
10
テーマはこちら ※ファイル拡張子はCは*.c, Rustは*.rs


1. 整数型オーバーフロー: val_overflow.*


2. 未初期化変数の参照: uninitialized_val.*


3. ゼロ割り: div_by_zero.*


4. 配列要素外アクセス: array_index_err.*


5. ビットシフトオーバーフロー: shift_overflow.*


6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
11
ワークのソースコードは次に置きました。


https://github.com/grace2riku/c_cpp_vs_rust/tree/master


Code -> Download ZIPを選択。


ワーク(Cのあいまいな動作を体験)
12
■ワークの環境について


●C/C++は次のアドレスのシミュレータ(wandbox)を使用します。


 https://wandbox.org/

●Rustは次のアドレスのシミュレータ(Rust Playground)を使用し
ます。


 https://play.rust-lang.org/
ワーク(Cのあいまいな動作を体験)
13
■ワークの環境について Cの設定


●Languages

 ⇛C

●gcc 11.1.0を選択

ワーク(Cのあいまいな動作を体験)
14
■ワークの環境について Cの設定


●Cのバージョンは【C99】を選択


※C99選択の理由


仕事で使っているマイコンのコンパイラが


C99準拠だったため。


ワーク(Cのあいまいな動作を体験)
15
■ワークの環境について Cの設定


①コード入力エリア


②コンパイル・コード実行ボタン


③実行結果表示


ウォーニング・コンパイルエラー


があれば表示。
ワーク(Cのあいまいな動作を体験)
16
①
②
③
■ワークの環境について Rustの設定


●デフォルトから設定変更不要。


①コード入力エリア


②実行結果表示


ウォーニング・コンパイルエラー


があれば表示。


ワーク(Cのあいまいな動作を体験)
17
①
②
■ワークの環境について Rustの設定


デフォルトの設定


・Stable version: 1.54


・Edition 2018
ワーク(Cのあいまいな動作を体験)
18
テーマはこちら ※ファイル拡張子はCは*.c, C++は*.cpp, Rustは*.rs


1. enum, switch: enum_switch.*


 CとRustのコードを比較。


 enum型の比較。Cのswitch・Rustのmatch式の比較。


2. 多態: polymorphism.*


 C++とRustのコードを比較。
ワーク(Rustのモダンさを体験)
19
1. enum, switch: enum_switch.*


 enum型の比較。Cのswitch・Rustのmatch式の比較。


●試してみてほしいこと


・C:switch・Rust:match文の条件をひとつ削除して実行。


・print_shape(Circle);の引数Circleを0(または任意の整数値)に変
更して実行。
ワーク(Rustのモダンさを体験)
20
2. 多態: polymorphism.*


・C++とRustで多態を実装。ソースコードを比較してみてくださ
い。 


・クラス図と簡単な説明を次ページに記載。
ワーク(Rustのモダンさを体験)
21
2. 多態: polymorphism.* 


・多態の説明でありそうなサンプルプログラムを


 C, Rustでそれぞれ実装。


・図形と円・三角形・正方形のクラス。


 Shape:抽象クラス


 Circle, Triangle, Square: Shapeを具象化したクラス


・print_type(), calc_area(): 具象化クラスで実行結果が変わる。
ワーク(Rustのモダンさを体験)
22
多態のサンプルコードのクラス図
是非、実際に手を動かしてソースコードをシミュレーションして
みてください。


そしてC/C++とRustのコードについて考察してみると良いとおも
います。


※本書末尾にソースコードの実行結果を記載します。シミュレー
ション実行後に確認いただければと思います。
ワーク(Cのあいまいな動作を体験)
23
あいまいなコードがあったとき、コンパイラに望むこと。


 1. コンパイラエラーにして欲しい。


 2. ウォーニングは出して欲しい。


 3. あいまいなコードを実行したら実行時エラーにして欲しい。


 4. あいまいなコードを実行し、あいまいな動作を行う。 ⇐ここに至る前にバグに気づき直したい!!!


・ソースコードの実行前にあいまいなコードに気づき、修正したい。もし実行しても実行時エラーにし
て欲しい。あいまいなコードが組み込まれも気づかず、リリースされてしまうことほど怖いことはな
い。
開発者がコンパイラに望むこと
24
・多くの本、ブログでRustをARM Cortex-Mコアで動かすチュー
トリアルが掲載されている。実機で確認したい場合、ARM
Cortex-Mのターゲットボードが個人的におすすめ。


・実機の前に手軽に試してみたい場合、QEMUで試してみるのも
良いかもしない。


・Arduinoで動かした事例もある。
Rustの組込み開発への適用
25
・所有権システム:コンパイルできたらメモリ安全性を保証。


・Cargo:ビルドツール・パッケージマネージャ


 テスト・ドキュメント・その他多くの機能。


・C FFI:Rust Cの相互呼び出し可能。
まだまだあるよ、Rustの魅力♥♥♥
26
ご清聴ありがとうございました。
終わり
27
 以降にワークのC/C++, Rustのソースコード
のシミュレーション実行結果を記載します。


シミュレーション実行確認後に見ることをお
勧めします。
ワークの実行結果
28
テーマはこちら ※ファイル拡張子はCは*.c,Rustは*.rs


★1. 整数型オーバーフロー: val_overflow.*


2. 未初期化変数の参照: uninitialized_val.*


3. ゼロ割り: div_by_zero.*


4. 配列要素外アクセス: array_index_err.*


5. ビットシフトオーバーフロー: shift_overflow.*


6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
29
★1. 整数型オーバーフロー: val_overflow.*


Cの場合


⇛Cはwarning, 実行可能。
ワーク(Cのあいまいな動作を体験)
30
★1. 整数型オーバーフロー: val_overflow.*


Rustの場合


⇛コンパイルエラー, 実行不可能。
ワーク(Cのあいまいな動作を体験)
31
テーマはこちら ※ファイル拡張子はCは*.c,Rustは*.rs


1. 整数型オーバーフロー: val_overflow.*


★2. 未初期化変数の参照: uninitialized_val.*


3. ゼロ割り: div_by_zero.*


4. 配列要素外アクセス: array_index_err.*


5. ビットシフトオーバーフロー: shift_overflow.*


6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
32
★2. 未初期化変数の参照: uninitialized_val.*


Cの場合


⇛Cはwarning, 実行可能。
ワーク(Cのあいまいな動作を体験)
33
★2. 未初期化変数の参照: uninitialized_val.*


Rustの場合


⇛コンパイルエラー, 実行不可能。
ワーク(Cのあいまいな動作を体験)
34
テーマはこちら ※ファイル拡張子はCは*.c,Rustは*.rs


1. 整数型オーバーフロー: val_overflow.*


2. 未初期化変数の参照: uninitialized_val.*


★3. ゼロ割り: div_by_zero.*


4. 配列要素外アクセス: array_index_err.*


5. ビットシフトオーバーフロー: shift_overflow.*


6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
35
★3. ゼロ割り: div_by_zero.*


Cの場合


⇛Cはwarning, 実行可能⇛例外発生。
ワーク(Cのあいまいな動作を体験)
36
★3. ゼロ割り: div_by_zero.*


Rustの場合


⇛コンパイルエラー, 実行不可能。
ワーク(Cのあいまいな動作を体験)
37
テーマはこちら ※ファイル拡張子はCは*.c,Rustは*.rs


1. 整数型オーバーフロー: val_overflow.*


2. 未初期化変数の参照: uninitialized_val.*


3. ゼロ割り: div_by_zero.*


★4. 配列要素外アクセス: array_index_err.*


5. ビットシフトオーバーフロー: shift_overflow.*


6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
38
★4. 配列要素外アクセス: array_index_err.*


Cの場合


⇛Cは実行可能。配列要素外へアクセスする。
ワーク(Cのあいまいな動作を体験)
39
★4. 配列要素外アクセス: array_index_err.*


Rustの場合


⇛実行可能。実行時エラー。panic!を使えば実行時エラー内容がわかる。
ワーク(Cのあいまいな動作を体験)
40
テーマはこちら ※ファイル拡張子はCは*.c,Rustは*.rs


1. 整数型オーバーフロー: val_overflow.*


2. 未初期化変数の参照: uninitialized_val.*


3. ゼロ割り: div_by_zero.*


4. 配列要素外アクセス: array_index_err.*


★5. ビットシフトオーバーフロー: shift_overflow.*


6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
41
★5. ビットシフトオーバーフロー: shift_overflow.*


Cの場合


⇛Cはwarning。実行可能。
ワーク(Cのあいまいな動作を体験)
42
★5. ビットシフトオーバーフロー: shift_overflow.*


Rustの場合


⇛コンパイルエラー, 実行不可能。
ワーク(Cのあいまいな動作を体験)
43
テーマはこちら ※ファイル拡張子はCは*.c,Rustは*.rs


1. 整数型オーバーフロー: val_overflow.*


2. 未初期化変数の参照: uninitialized_val.*


3. ゼロ割り: div_by_zero.*


4. 配列要素外アクセス: array_index_err.*


5. ビットシフトオーバーフロー: shift_overflow.*


★6. ビットシフト負の数: shift_negative.*
ワーク(Cのあいまいな動作を体験)
44
★6. ビットシフト負の数: shift_negative.*


Cの場合


⇛Cはwarning。実行可能。
ワーク(Cのあいまいな動作を体験)
45
★6. ビットシフト負の数: shift_negative.*


Rustの場合


⇛コンパイルエラー, 実行不可能。
ワーク(Cのあいまいな動作を体験)
46
テーマはこちら ※ファイル拡張子はCは*.c, C++は*.cpp, Rustは*.rs


1. enum, switch: enum_switch.*


 CとRustのコードを比較。


 enum型の比較。Cのswitch・Rustのmatch式の比較。


2. 多態: polymorphism.*


 C++とRustのコードを比較。
ワーク(Rustのモダンさを体験)
47

More Related Content

Similar to 20210830 rust入学式

ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話Kazuya Wada
 
Why did I become a ruby committer
Why did I become a ruby committerWhy did I become a ruby committer
Why did I become a ruby committerMasaya TARUI
 
Rust v1.0 release celebration party
Rust v1.0 release celebration partyRust v1.0 release celebration party
Rust v1.0 release celebration partyAkira Hayakawa
 
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)parrotstudio
 
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜Koichiro Iwao
 
Rustで楽しむ競技プログラミング
Rustで楽しむ競技プログラミングRustで楽しむ競技プログラミング
Rustで楽しむ競技プログラミングyoshrc
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜Hideki Takase
 

Similar to 20210830 rust入学式 (10)

Prolabo
ProlaboProlabo
Prolabo
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
Why did I become a ruby committer
Why did I become a ruby committerWhy did I become a ruby committer
Why did I become a ruby committer
 
Rust v1.0 release celebration party
Rust v1.0 release celebration partyRust v1.0 release celebration party
Rust v1.0 release celebration party
 
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
 
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
 
Rustで楽しむ競技プログラミング
Rustで楽しむ競技プログラミングRustで楽しむ競技プログラミング
Rustで楽しむ競技プログラミング
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
 

More from 耕二 阿部

猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf耕二 阿部
 
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdfSWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf耕二 阿部
 
テストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdfテストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdf耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdfソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf耕二 阿部
 
Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話耕二 阿部
 
Rust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみたRust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみた耕二 阿部
 
はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御耕二 阿部
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~耕二 阿部
 
モデルベース開発勉強会
モデルベース開発勉強会モデルベース開発勉強会
モデルベース開発勉強会耕二 阿部
 
EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料耕二 阿部
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化耕二 阿部
 

More from 耕二 阿部 (15)

猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
 
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
 
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
 
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdfSWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
 
テストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdfテストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdf
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
 
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdfソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
 
Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話
 
Rust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみたRust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみた
 
はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
 
モデルベース開発勉強会
モデルベース開発勉強会モデルベース開発勉強会
モデルベース開発勉強会
 
EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化
 

Recently uploaded

本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題についてMasatsugu Matsushita
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例Kurata Takeshi
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料Toru Miyahara
 
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップToru Miyahara
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Toru Miyahara
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上mizukami4
 

Recently uploaded (6)

本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 

20210830 rust入学式