Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20210830_Rust入学式.pdf

k-abe
August 30, 2021

 20210830_Rust入学式.pdf

2021.8.30 社内向け勉強会資料。
RustとC/C++のソースコードを実行し、比較する。

k-abe

August 30, 2021
Tweet

More Decks by k-abe

Other Decks in Programming

Transcript

  1. 2021.8.30 Ѩ෦ߞೋ
    Rustೖֶࣜ
    Rustͷಛ௃ɺC/C++ͱͷҧ͍ΛͳΜͱͳ͘ཧղ͠Α͏


    View Slide

  2. ࣗݾ঺հ


    ໨త


    ͳͥRust͔?


    C/C++ͷ՝୊


    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞/RustͷϞμϯ͞Λମݧ)


    Rustͷ૊ࠐΈ։ൃ΁ͷద༻
    ໨࣍
    2

    View Slide

  3. ■໊લɿѨ෦ɹߞೋ(͋΂ɹ͜͏͡)


    ■૊ࠐΈιϑτ΢ΣΞ։ൃ19೥໨ɻ


    ɹCݴޠɺOSͳ͠(ϕΞϝλϧ)ͷ։ൃۀ຿ܦݧ͕΄ͱΜͲɻ


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


    ɹࠓճͷϫʔΫͷιʔείʔυɿhttps://github.com/grace2riku/c_cpp_vs_rust/tree/master
    ࣗݾ঺հ
    3

    View Slide

  4. 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

    View Slide

  5. ɾRustͬͯ͜ΜͳݴޠͳΜͩʔɺͱͳΜͱͳ͘Θ͔Δ͜ͱɻ
    ɹॳ৺ऀ޲͚ͷ಺༰Ͱ͢ɻ
    ɾC/C++ͱ3VTUͷҧ͍͕ͳΜͱͳ͘Θ͔Δ͜ͱɻ
    ɹ$$ܦݧऀ͕3VTUͷ҆શੑΛཧղ͢Δ͸͡ΊͷาͱͳΕ͹خ͍͠Ͱ͢ɻ
    ໨త
    5

    View Slide

  6. ɹ˙ࢿྉͷ࢖͍ํ
    ɹޙ൒ͷϫʔΫͰ͸$$ͱ3VTUͷίʔυΛॻ͍࣮ͯߦ͠·͢ɻ
    ɹίʔυɺ࣮ߦ݁ՌΛ௨ͯ͠$$ɾ3VTUͷ஌͕ࣝΞοϓσʔτͰ͖Ε͹خ͍͠ɻ
    ɹ$$ɾ3VTUͷίʔυΛ࣮ࡍʹखΛಈ͔࣮ͯ͠ߦɺ݁ՌΛ֬ೝ͢Δ͜ͱΛ͓קΊ͠·͢ɻ
    ɹίʔυͷ࣮ߦ͸ϒϥ΢βͰಈ͘γϛϡϨʔγϣϯ؀ڥΛ࢖͏ͷͰ։ൃ؀ڥͷ४උ͸ෆཁͰ͢ɻ
    ໨త
    6

    View Slide

  7. ɾ҆શɾ҆৺ɻ


    ⇛ଟػೳɺߴػೳɺෳࡶԽ͢Δ૊ࠐΈػثͷཁٻ࢓༷ʹC/C++Ͱཱͪ
    ޲͔͑Δ͔ɻ࣌୅ʹ߹Θͤͨϓϩάϥϛϯάݴޠͷ࠾༻Λݕ౼͢Δͷ
    ͸Ͳ͏͔ɻ


    ɾϞμϯ͔ͩΒɻ


    ͳͥRust͔?
    7

    View Slide

  8. ɾCͷ͍͋·͍ͳݴޠ࢓༷(ະఆٛಈ࡞)


    ɾϝϞϦ؅ཧ


    ɾC++͸೉͍͠


    ɾͦͷଞ
    C/C++ͷ՝୊
    8

    View Slide

  9. ɾCͷʲະఆٛಈ࡞ʳͱ͸?


    Cݴޠͷඪ४ن֨Ͱ͋ΔJIS X 3010ɿ2003(ISO/IEC 9899ɿ1999)ΑΓҾ༻ɻ


    ʲ3.4.3 ະఆٛͷಈ࡞ʢundefined behaviorʣ Մൖੑ͕ͳ͍ए͘͠͸ਖ਼͘͠ͳ͍ϓϩάϥϜߏ੒ཁૉ
    Λ࢖༻ͨ͠ͱ͖ͷಈ࡞ɼຢ͸ਖ਼͘͠ͳ͍σʔλΛ࢖༻ͨ͠ͱ͖ͷಈ࡞Ͱ͋Γɼ͜ͷن͕֨ԿΒཁٻ
    Λ՝͞ͳ͍΋ͷɻ


    ࢀߟ ະఆٛͷಈ࡞ʹରͯ͠ɼͦͷঢ়گΛແࢹͯ͠༧ଌෆՄೳͳ݁ՌΛฦͯ͠΋Α͍ɻ຋༁࣌ຢ͸ϓ
    ϩάϥϜ࣮ߦ࣌ʹɼจॻԽ͞Εͨɼ؀ڥʹಛ༗ͳํ๏Ͱॲཧͯ͠΋Α͍ʢ਍அϝοηʔδͷൃߦΛ
    ൐ͬͯ΋൐Θͳͯ͘΋Α͍ɻʣɻ͞Βʹʢ਍அϝοηʔδΛग़ྗ͠ʣ຋༁ຢ͸࣮ߦΛதஅͯ͠΋Α
    ͍ɻʳ


    C/C++ͷ՝୊
    9

    View Slide

  10. ɾCͷະఆٛಈ࡞ͳͲ͍͋·͍ͳಈ࡞Λ͢ΔίʔυΛRustͰ࣮ߦ
    ͯ͠Έ·͠ΐ͏ɻ


    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    10

    View Slide

  11. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  12. ϫʔΫͷιʔείʔυ͸࣍ʹஔ͖·ͨ͠ɻ


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


    Code -> Download ZIPΛબ୒ɻ


    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    12

    View Slide

  13. ■ϫʔΫͷ؀ڥʹ͍ͭͯ


    ●C/C++͸࣍ͷΞυϨεͷγϛϡϨʔλ(wandbox)Λ࢖༻͠·͢ɻ


    ɹhttps://wandbox.org/

    ●Rust͸࣍ͷΞυϨεͷγϛϡϨʔλ(Rust Playground)Λ࢖༻͠
    ·͢ɻ


    ɹhttps://play.rust-lang.org/
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    13

    View Slide

  14. ■ϫʔΫͷ؀ڥʹ͍ͭͯɹCͷઃఆ


    ●Languages

    ɹ⇛C

    ●gcc 11.1.0Λબ୒

    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    14

    View Slide

  15. ■ϫʔΫͷ؀ڥʹ͍ͭͯɹCͷઃఆ


    ●Cͷόʔδϣϯ͸ʲC99ʳΛબ୒


    ※C99બ୒ͷཧ༝


    ࢓ࣄͰ࢖͍ͬͯΔϚΠίϯͷίϯύΠϥ͕


    C99४ڌͩͬͨͨΊɻ


    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    15

    View Slide

  16. ■ϫʔΫͷ؀ڥʹ͍ͭͯɹCͷઃఆ


    ᶃίʔυೖྗΤϦΞ


    ᶄίϯύΠϧɾίʔυ࣮ߦϘλϯ


    ᶅ࣮ߦ݁Ռදࣔ


    ΢ΥʔχϯάɾίϯύΠϧΤϥʔ


    ͕͋Ε͹දࣔɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    16



    View Slide

  17. ■ϫʔΫͷ؀ڥʹ͍ͭͯɹRustͷઃఆ


    ●σϑΥϧτ͔Βઃఆมߋෆཁɻ


    ᶃίʔυೖྗΤϦΞ


    ᶄ࣮ߦ݁Ռදࣔ


    ΢ΥʔχϯάɾίϯύΠϧΤϥʔ


    ͕͋Ε͹දࣔɻ


    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    17


    View Slide

  18. ■ϫʔΫͷ؀ڥʹ͍ͭͯɹRustͷઃఆ


    σϑΥϧτͷઃఆ


    ɾStable version: 1.54


    ɾEdition 2018
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    18

    View Slide

  19. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸C͸*.c, C++͸*.cpp, Rust͸*.rs


    1. enum, switch: enum_switch.*


    ɹCͱRustͷίʔυΛൺֱɻ


    ɹenumܕͷൺֱɻCͷswitchɾRustͷmatchࣜͷൺֱɻ


    2. ଟଶ: polymorphism.*


    ɹC++ͱRustͷίʔυΛൺֱɻ
    ϫʔΫ(RustͷϞμϯ͞Λମݧ)
    19

    View Slide

  20. 1. enum, switch: enum_switch.*


    ɹenumܕͷൺֱɻCͷswitchɾRustͷmatchࣜͷൺֱɻ


    ●ࢼͯ͠Έͯ΄͍͜͠ͱ


    ɾC:switchɾRust:matchจͷ৚݅Λͻͱͭ࡟আ࣮ͯ͠ߦɻ


    ɾprint_shape(Circle);ͷҾ਺CircleΛ0(·ͨ͸೚ҙͷ੔਺஋)ʹม
    ߋ࣮ͯ͠ߦɻ
    ϫʔΫ(RustͷϞμϯ͞Λମݧ)
    20

    View Slide

  21. 2. ଟଶ: polymorphism.*


    ɾC++ͱRustͰଟଶΛ࣮૷ɻιʔείʔυΛൺֱͯ͠Έͯͩ͘͞
    ͍ɻɹ


    ɾΫϥεਤͱ؆୯ͳઆ໌Λ࣍ϖʔδʹهࡌɻ
    ϫʔΫ(RustͷϞμϯ͞Λମݧ)
    21

    View Slide

  22. 2. ଟଶ: polymorphism.*ɹ


    ɾଟଶͷઆ໌Ͱ͋Γͦ͏ͳαϯϓϧϓϩάϥϜΛ


    ɹC, RustͰͦΕͧΕ࣮૷ɻ


    ɾਤܗͱԁɾࡾ֯ܗɾਖ਼ํܗͷΫϥεɻ


    ɹShapeɿந৅Ϋϥε


    ɹCircle, Triangle, Square: ShapeΛ۩৅Խͨ͠Ϋϥε


    ɾprint_type(), calc_area(): ۩৅ԽΫϥεͰ࣮ߦ݁Ռ͕มΘΔɻ
    ϫʔΫ(RustͷϞμϯ͞Λମݧ)
    22
    ଟଶͷαϯϓϧίʔυͷΫϥεਤ

    View Slide

  23. ੋඇɺ࣮ࡍʹखΛಈ͔ͯ͠ιʔείʔυΛγϛϡϨʔγϣϯͯ͠
    Έ͍ͯͩ͘͞ɻ


    ͦͯ͠C/C++ͱRustͷίʔυʹ͍ͭͯߟ࡯ͯ͠ΈΔͱྑ͍ͱ͓΋
    ͍·͢ɻ


    ※ຊॻ຤ඌʹιʔείʔυͷ࣮ߦ݁ՌΛهࡌ͠·͢ɻγϛϡϨʔ
    γϣϯ࣮ߦޙʹ֬ೝ͍͚ͨͩΕ͹ͱࢥ͍·͢ɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    23

    View Slide

  24. ͍͋·͍ͳίʔυ͕͋ͬͨͱ͖ɺίϯύΠϥʹ๬Ή͜ͱɻ


    ɹ1. ίϯύΠϥΤϥʔʹͯ͠ཉ͍͠ɻ


    ɹ2. ΢Υʔχϯά͸ग़ͯ͠ཉ͍͠ɻ


    ɹ3. ͍͋·͍ͳίʔυΛ࣮ߦͨ͠Β࣮ߦ࣌Τϥʔʹͯ͠ཉ͍͠ɻ


    ɹ4. ͍͋·͍ͳίʔυΛ࣮ߦ͠ɺ͍͋·͍ͳಈ࡞Λߦ͏ɻ ⾨͜͜ʹࢸΔલʹόάʹؾ͖ͮ௚͍ͨ͠!!!


    ɾιʔείʔυͷ࣮ߦલʹ͍͋·͍ͳίʔυʹؾ͖ͮɺमਖ਼͍ͨ͠ɻ΋࣮͠ߦͯ͠΋࣮ߦ࣌Τϥʔʹ͠
    ͯཉ͍͠ɻ͍͋·͍ͳίʔυ͕૊Έࠐ·Ε΋ؾ͔ͮͣɺϦϦʔε͞Εͯ͠·͏͜ͱ΄Ͳා͍͜ͱ͸ͳ
    ͍ɻ
    ։ൃऀ͕ίϯύΠϥʹ๬Ή͜ͱ
    24

    View Slide

  25. ɾଟ͘ͷຊɺϒϩάͰRustΛARM Cortex-MίΞͰಈ͔͢νϡʔ
    τϦΞϧ͕ܝࡌ͞Ε͍ͯΔɻ࣮ػͰ֬ೝ͍ͨ͠৔߹ɺARM
    Cortex-MͷλʔήοτϘʔυ͕ݸਓతʹ͓͢͢Ίɻ


    ɾ࣮ػͷલʹखܰʹࢼͯ͠Έ͍ͨ৔߹ɺQEMUͰࢼͯ͠ΈΔͷ΋
    ྑ͍͔΋͠ͳ͍ɻ


    ɾArduinoͰಈ͔ͨ͠ࣄྫ΋͋Δɻ
    Rustͷ૊ࠐΈ։ൃ΁ͷద༻
    25

    View Slide

  26. ɾॴ༗ݖγεςϜɿίϯύΠϧͰ͖ͨΒϝϞϦ҆શੑΛอূɻ


    ɾCargoɿϏϧυπʔϧɾύοέʔδϚωʔδϟ


    ɹςετɾυΩϡϝϯτɾͦͷଞଟ͘ͷػೳɻ


    ɾC FFIɿRust㱻Cͷ૬ޓݺͼग़͠Մೳɻ
    ·ͩ·ͩ͋ΔΑɺRustͷັྗ———
    26

    View Slide

  27. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
    ऴΘΓ
    27

    View Slide

  28. ɹҎ߱ʹϫʔΫͷC/C++, Rustͷιʔείʔυ
    ͷγϛϡϨʔγϣϯ࣮ߦ݁ՌΛهࡌ͠·͢ɻ


    γϛϡϨʔγϣϯ࣮ߦ֬ೝޙʹݟΔ͜ͱΛ͓
    קΊ͠·͢ɻ
    ϫʔΫͷ࣮ߦ݁Ռ
    28

    View Slide

  29. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  30. ˒1. ੔਺ܕΦʔόʔϑϩʔ: val_overflow.*


    Cͷ৔߹


    ⇛C͸warning, ࣮ߦՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    30

    View Slide

  31. ˒1. ੔਺ܕΦʔόʔϑϩʔ: val_overflow.*


    Rustͷ৔߹


    ⇛ίϯύΠϧΤϥʔ, ࣮ߦෆՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    31

    View Slide

  32. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  33. ˒2. ະॳظԽม਺ͷࢀর: uninitialized_val.*


    Cͷ৔߹


    ⇛C͸warning, ࣮ߦՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    33

    View Slide

  34. ˒2. ະॳظԽม਺ͷࢀর: uninitialized_val.*


    Rustͷ৔߹


    ⇛ίϯύΠϧΤϥʔ, ࣮ߦෆՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    34

    View Slide

  35. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  36. ˒3. θϩׂΓ: div_by_zero.*


    Cͷ৔߹


    ⇛C͸warning, ࣮ߦՄೳ⇛ྫ֎ൃੜɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    36

    View Slide

  37. ˒3. θϩׂΓ: div_by_zero.*


    Rustͷ৔߹


    ⇛ίϯύΠϧΤϥʔ, ࣮ߦෆՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    37

    View Slide

  38. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  39. ˒4. ഑ྻཁૉ֎ΞΫηε: array_index_err.*


    Cͷ৔߹


    ⇛C͸࣮ߦՄೳɻ഑ྻཁૉ֎΁ΞΫηε͢Δɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    39

    View Slide

  40. ˒4. ഑ྻཁૉ֎ΞΫηε: array_index_err.*


    Rustͷ৔߹


    ⇛࣮ߦՄೳɻ࣮ߦ࣌Τϥʔɻpanic!Λ࢖͑͹࣮ߦ࣌Τϥʔ಺༰͕Θ͔Δɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    40

    View Slide

  41. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  42. ˒5. ϏοτγϑτΦʔόʔϑϩʔ: shift_overflow.*


    Cͷ৔߹


    ⇛C͸warningɻ࣮ߦՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    42

    View Slide

  43. ˒5. ϏοτγϑτΦʔόʔϑϩʔ: shift_overflow.*


    Rustͷ৔߹


    ⇛ίϯύΠϧΤϥʔ, ࣮ߦෆՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    43

    View Slide

  44. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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

    View Slide

  45. ˒6. Ϗοτγϑτෛͷ਺: shift_negative.*


    Cͷ৔߹


    ⇛C͸warningɻ࣮ߦՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    45

    View Slide

  46. ˒6. Ϗοτγϑτෛͷ਺: shift_negative.*


    Rustͷ৔߹


    ⇛ίϯύΠϧΤϥʔ, ࣮ߦෆՄೳɻ
    ϫʔΫ(Cͷ͍͋·͍ͳಈ࡞Λମݧ)
    46

    View Slide

  47. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸C͸*.c, C++͸*.cpp, Rust͸*.rs


    1. enum, switch: enum_switch.*


    ɹCͱRustͷίʔυΛൺֱɻ


    ɹenumܕͷൺֱɻCͷswitchɾRustͷmatchࣜͷൺֱɻ


    2. ଟଶ: polymorphism.*


    ɹC++ͱRustͷίʔυΛൺֱɻ
    ϫʔΫ(RustͷϞμϯ͞Λମݧ)
    47

    View Slide