Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20210830_Rust入学式.pdf
Search
k-abe
August 30, 2021
Programming
0
120
20210830_Rust入学式.pdf
2021.8.30 社内向け勉強会資料。
RustとC/C++のソースコードを実行し、比較する。
k-abe
August 30, 2021
Tweet
Share
More Decks by k-abe
See All by k-abe
【連続講座3】デザインパターンを学び、ソフトウェア設計に生かそう(Facade・Observer・State)
kabe
0
87
【連続講座2】デザインパターンを学び、ソフトウェア設計に生かそう(Builder・Strategy・Composite)
kabe
0
60
【連続講座1】デザインパターンを学び、ソフトウェア設計に生かそう(Adapter・Factory Method・Singleton)
kabe
0
61
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー)
kabe
0
100
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
kabe
0
450
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則
kabe
0
820
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則
kabe
0
460
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた
kabe
0
100
テストからより良い組込みソフトウェア開発を考える
kabe
0
180
Other Decks in Programming
See All in Programming
マンガアプリViewerの大画面対応を考える
kk__777
0
440
Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理
matuyuhi
0
240
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
150
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
520
alien-signals と自作 OSS で実現する フレームワーク非依存な ロジック共通化の探求 / Exploring Framework-Agnostic Logic Sharing with alien-signals and Custom OSS
aoseyuu
3
5.4k
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
120
iOSでSVG画像を扱う
kishikawakatsumi
0
180
Claude Agent SDK を使ってみよう
hyshu
0
1.5k
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
110
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
1.1k
Introduce Hono CLI
yusukebe
6
3.3k
業務でAIを使いたい話
hnw
0
220
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
57k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
650
How to train your dragon (web standard)
notwaldorf
97
6.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
RailsConf 2023
tenderlove
30
1.3k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
710
Building Applications with DynamoDB
mza
96
6.7k
Agile that works and the tools we love
rasmusluckow
331
21k
Documentation Writing (for coders)
carmenintech
76
5.1k
Fireside Chat
paigeccino
41
3.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Transcript
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++ͱ3VTUͷҧ͍͕ͳΜͱͳ͘Θ͔Δ͜ͱɻ ɹ$$ ܦݧऀ͕3VTUͷ҆શੑΛཧղ͢Δ͡ΊͷาͱͳΕخ͍͠Ͱ͢ɻ త 5
ɹ˙ࢿྉͷ͍ํ ɹޙͷϫʔΫͰ$$ ͱ3VTUͷίʔυΛॻ͍࣮ͯߦ͠·͢ɻ ɹίʔυɺ࣮ߦ݁ՌΛ௨ͯ͠$$ ɾ3VTUͷ͕ࣝΞοϓσʔτͰ͖Εخ͍͠ɻ ɹ$$ ɾ3VTUͷίʔυΛ࣮ࡍʹखΛಈ͔࣮ͯ͠ߦɺ݁ՌΛ֬ೝ͢Δ͜ͱΛ͓קΊ͠·͢ɻ ɹίʔυͷ࣮ߦϒϥβͰಈ͘γϛϡϨʔγϣϯڥΛ͏ͷͰ։ൃڥͷ४උෆཁͰ͢ɻ త 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ͷ߹ ⇛Cwarning, ࣮ߦՄೳɻ ϫʔΫ(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ͷ߹ ⇛Cwarning, ࣮ߦՄೳɻ ϫʔΫ(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ͷ߹ ⇛Cwarning, ࣮ߦՄೳ⇛ྫ֎ൃੜɻ ϫʔΫ(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ͷ߹ ⇛Cwarningɻ࣮ߦՄೳɻ ϫʔΫ(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ͷ߹ ⇛Cwarningɻ࣮ߦՄೳɻ ϫʔΫ(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