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
30
【連続講座2】デザインパターンを学び、ソフトウェア設計に生かそう(Builder・Strategy・Composite)
kabe
0
26
【連続講座1】デザインパターンを学び、ソフトウェア設計に生かそう(Adapter・Factory Method・Singleton)
kabe
0
36
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー)
kabe
0
69
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
kabe
0
340
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則
kabe
0
580
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則
kabe
0
360
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた
kabe
0
76
テストからより良い組込みソフトウェア開発を考える
kabe
0
120
Other Decks in Programming
See All in Programming
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
2.5k
Jakarta EE meets AI
ivargrimstad
0
570
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
140
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
640
バッチを作らなきゃとなったときに考えること
irof
2
550
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.5k
Honoとフロントエンドの 型安全性について
yodaka
7
1.5k
Jasprが凄い話
hyshu
0
180
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
200
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
290
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
250
Boos Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
510
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
44
14k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
What's in a price? How to price your products and services
michaelherold
244
12k
Why Our Code Smells
bkeepers
PRO
336
57k
Writing Fast Ruby
sferik
628
61k
Typedesign – Prime Four
hannesfritz
41
2.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
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