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. ɾCͷʲະఆٛಈ࡞ʳͱ͸? Cݴޠͷඪ४ن֨Ͱ͋ΔJIS X 3010ɿ2003(ISO/IEC 9899ɿ1999)ΑΓҾ༻ɻ ʲ3.4.3 ະఆٛͷಈ࡞ʢundefined behaviorʣ Մൖੑ͕ͳ͍ए͘͠͸ਖ਼͘͠ͳ͍ϓϩάϥϜߏ੒ཁૉ Λ࢖༻ͨ͠ͱ͖ͷಈ࡞ɼຢ͸ਖ਼͘͠ͳ͍σʔλΛ࢖༻ͨ͠ͱ͖ͷಈ࡞Ͱ͋Γɼ͜ͷن͕֨ԿΒཁٻ

    Λ՝͞ͳ͍΋ͷɻ ࢀߟ ະఆٛͷಈ࡞ʹରͯ͠ɼͦͷঢ়گΛແࢹͯ͠༧ଌෆՄೳͳ݁ՌΛฦͯ͠΋Α͍ɻ຋༁࣌ຢ͸ϓ ϩάϥϜ࣮ߦ࣌ʹɼจॻԽ͞Εͨɼ؀ڥʹಛ༗ͳํ๏Ͱॲཧͯ͠΋Α͍ʢ਍அϝοηʔδͷൃߦΛ ൐ͬͯ΋൐Θͳͯ͘΋Α͍ɻʣɻ͞Βʹʢ਍அϝοηʔδΛग़ྗ͠ʣ຋༁ຢ͸࣮ߦΛதஅͯ͠΋Α ͍ɻʳ C/C++ͷ՝୊ 9
  2. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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
  3. 2. ଟଶ: polymorphism.*ɹ ɾଟଶͷઆ໌Ͱ͋Γͦ͏ͳαϯϓϧϓϩάϥϜΛ ɹC, RustͰͦΕͧΕ࣮૷ɻ ɾਤܗͱԁɾࡾ֯ܗɾਖ਼ํܗͷΫϥεɻ ɹShapeɿந৅Ϋϥε ɹCircle, Triangle,

    Square: ShapeΛ۩৅Խͨ͠Ϋϥε ɾprint_type(), calc_area(): ۩৅ԽΫϥεͰ࣮ߦ݁Ռ͕มΘΔɻ ϫʔΫ(RustͷϞμϯ͞Λମݧ) 22 ଟଶͷαϯϓϧίʔυͷΫϥεਤ
  4. ͍͋·͍ͳίʔυ͕͋ͬͨͱ͖ɺίϯύΠϥʹ๬Ή͜ͱɻ ɹ1. ίϯύΠϥΤϥʔʹͯ͠ཉ͍͠ɻ ɹ2. ΢Υʔχϯά͸ग़ͯ͠ཉ͍͠ɻ ɹ3. ͍͋·͍ͳίʔυΛ࣮ߦͨ͠Β࣮ߦ࣌Τϥʔʹͯ͠ཉ͍͠ɻ ɹ4. ͍͋·͍ͳίʔυΛ࣮ߦ͠ɺ͍͋·͍ͳಈ࡞Λߦ͏ɻ ⾨͜͜ʹࢸΔલʹόάʹؾ͖ͮ௚͍ͨ͠!!!

    ɾιʔείʔυͷ࣮ߦલʹ͍͋·͍ͳίʔυʹؾ͖ͮɺमਖ਼͍ͨ͠ɻ΋࣮͠ߦͯ͠΋࣮ߦ࣌Τϥʔʹ͠ ͯཉ͍͠ɻ͍͋·͍ͳίʔυ͕૊Έࠐ·Ε΋ؾ͔ͮͣɺϦϦʔε͞Εͯ͠·͏͜ͱ΄Ͳා͍͜ͱ͸ͳ ͍ɻ ։ൃऀ͕ίϯύΠϥʹ๬Ή͜ͱ 24
  5. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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
  6. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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
  7. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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
  8. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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
  9. ςʔϚ͸ͪ͜Βɹ˞ϑΝΠϧ֦ுࢠ͸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
  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ͷ͍͋·͍ͳಈ࡞Λମݧ) 44