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
110
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
54
【連続講座2】デザインパターンを学び、ソフトウェア設計に生かそう(Builder・Strategy・Composite)
kabe
0
42
【連続講座1】デザインパターンを学び、ソフトウェア設計に生かそう(Adapter・Factory Method・Singleton)
kabe
0
56
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー)
kabe
0
92
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
kabe
0
400
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則
kabe
0
730
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則
kabe
0
410
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた
kabe
0
100
テストからより良い組込みソフトウェア開発を考える
kabe
0
160
Other Decks in Programming
See All in Programming
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
What's new in AppKit on macOS 26
1024jp
0
120
技術同人誌をMCP Serverにしてみた
74th
1
660
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
280
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
11
6.1k
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
290
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
790
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
120
Goで作る、開発・CI環境
sin392
0
240
AI Agent 時代のソフトウェア開発を支える AWS Cloud Development Kit (CDK)
konokenj
3
340
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
160
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
190
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Embracing the Ebb and Flow
colly
86
4.7k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
GitHub's CSS Performance
jonrohan
1031
460k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Building Adaptive Systems
keathley
43
2.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
970
Visualization
eitanlees
146
16k
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