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

技術領域を広げるためのRustのすゝめ

 技術領域を広げるためのRustのすゝめ

水戸エンジニア勉強会 #3

Avatar for Shuhei Yamashita

Shuhei Yamashita

October 26, 2019
Tweet

More Decks by Shuhei Yamashita

Other Decks in Programming

Transcript

  1. 3VTUJT w .P[JMMB͕ࢧԉ w ʹ"84͕ࢧԉ͢Δͱൃද/&8 w ৽͠ΊͷݴޠʢϓϨΞϧϑΝ൛͕೥ʣ w d೥ͷʮ࠷΋Ѫ͞Ε͍ͯΔϓϩάϥϛϯάݴޠʯͰ࿈ଓҐ w

    4UBDL0WFSqPX%FWFMPQFS4VSWFZ w $$ ͷ୅ସ w ڧ͍੩తܕ෇͚ w ($Λ࢖Θͳ͍Ϧιʔε؅ཧ ݁ߏγϏΞͳύϑΥʔϚϯεٻΊΒΕΔͱ͜ΖͰ࠾༻ࣄྫ͋Γ
  2. 3VTUͷ͍͍ͱ͜Ζ w ωΠςΟϒίϯύΠϧͳͷͰόΠφϦ୯ମͰಈ࡞͢Δ w ϚϧνϓϥοτϑΥʔϜ w ܕਪ࿦͕ڧྗ w υΩϡϝϯτ΍ΤίγεςϜ͕๛෋ w

    ߴ଎ʢ$$ ฒʣ w ҆શੑ͕ߴ͍ w جຊతʹϝϞϦϦʔΫ͕ൃੜ͠ͳ͍ w ʮॴ༗ݖʯͱ͍͏֓೦Ͱ؅ཧ w ͵ΔΆ΋ൃੜ͠ͳ͍ όΠφϦ୯ମͰಈ࡞͢Δ͔ΒTFEͱ͔ίϚϯυΛ3VTUͰॻ͍ͯΔਓ݁ߏଟ͍
  3. fn main() { let count: u8 = 10; let message

    = "Hello"; let mut mut_message = "World"; // message = "Hello!!!"; < -- Error mut_message = "World!!!"; println!("{} {}", message, mut_message); if count == 10 { println!("count is 10"); } let count_message = if count == 10 { "count is 10" } else { "count is not 10" }; println!("{}", count_message); } جૅߏจ
  4. fn main() { let count: u8 = 10; let message

    = "Hello"; let mut mut_message = "World"; // message = "Hello!!!"; < -- Error mut_message = "World!!!"; println!("{} {}", message, mut_message); if count == 10 { println!("count is 10"); } let count_message = if count == 10 { "count is 10" } else { "count is not 10" }; println!("{}", count_message); } جૅߏจ
  5. fn main() { let count: u8 = 10; let message

    = "Hello"; let mut mut_message = "World"; // message = "Hello!!!"; < -- Error mut_message = "World!!!"; println!("{} {}", message, mut_message); if count == 10 { println!("count is 10"); } let count_message = if count == 10 { "count is 10" } else { "count is not 10" }; println!("{}", count_message); } جૅߏจ
  6. fn main() { let count: u8 = 10; let message

    = "Hello"; let mut mut_message = "World"; // message = "Hello!!!"; < -- Error mut_message = "World!!!"; println!("{} {}", message, mut_message); if count == 10 { println!("count is 10"); } let count_message = if count == 10 { "count is 10" } else { "count is not 10" }; println!("{}", count_message); } جૅߏจ
  7. fn main() { let count: u8 = 10; let message

    = "Hello"; let mut mut_message = "World"; // message = "Hello!!!"; < -- Error mut_message = "World!!!"; println!("{} {}", message, mut_message); if count == 10 { println!("count is 10"); } let count_message = if count == 10 { "count is 10" } else { "count is not 10" }; println!("{}", count_message); } جૅߏจ
  8. fn main() { let count: u8 = 10; let message

    = "Hello"; let mut mut_message = "World"; // message = "Hello!!!"; < -- Error mut_message = "World!!!"; println!("{} {}", message, mut_message); if count == 10 { println!("count is 10"); } let count_message = if count == 10 { "count is 10" } else { "count is not 10" }; println!("{}", count_message); } جૅߏจ
  9. fn main() { match division(20, 5) { Ok(result) => println!("Success

    : {}", result), Err(msg) => println!("Failed : {}", msg), } } fn division(x: u8, y: u8) -> Result<u8, String> { if x == 0 || y == 0 { Err("zero devision".to_string()) } else { Ok(x/y) } } ΤϥʔϋϯυϦϯά
  10. fn main() { match division(20, 5) { Ok(result) => println!("Success

    : {}", result), Err(msg) => println!("Failed : {}", msg), } } fn division(x: u8, y: u8) -> Result<u8, String> { if x == 0 || y == 0 { Err("zero devision".to_string()) } else { Ok(x/y) } } ΤϥʔϋϯυϦϯά
  11. fn main() { match division(20, 5) { Ok(result) => println!("Success

    : {}", result), Err(msg) => println!("Failed : {}", msg), } } fn division(x: u8, y: u8) -> Result<u8, String> { if x == 0 || y == 0 { Err("zero devision".to_string()) } else { Ok(x/y) } } ΤϥʔϋϯυϦϯά
  12. fn main() { match division(20, 5) { Ok(result) => println!("Success

    : {}", result), Err(msg) => println!("Failed : {}", msg), } } fn division(x: u8, y: u8) -> Result<u8, String> { if x == 0 || y == 0 { Err("zero devision".to_string()) } else { Ok(x/y) } } ΤϥʔϋϯυϦϯά
  13. struct Point { x: i32, y: i32, } fn main()

    { let origin = Point { x: 0, y: 0 }; // origin: Point println!("The origin is at ({}, {})", origin.x, origin.y); } ߏ଄ମ
  14. struct Circle { x: f64, y: f64, radius: f64, }

    impl Circle { fn area(&self) -> f64 { std::f64::consts::PI * (self.radius * self.radius) } } τϨΠτ
  15. ॴ༗ݖ fn main() { let v = vec![1, 2, 3];

    let v2 = v; println!("v[0] is: {}", v[0]); }
  16. ॴ༗ݖ fn main() { let v = vec![1, 2, 3];

    let v2 = v; println!("v[0] is: {}", v[0]); }
  17. ॴ༗ݖ fn main() { let v = vec![1, 2, 3];

    let v2 = v; println!("v[0] is: {}", v[0]); }
  18. ॴ༗ݖ fn main() { let v = vec![1, 2, 3];

    let v2 = v; println!("v[0] is: {}", v[0]); } ͜Ε͚ͩͰ-5ຊͰ͖ΔͷͰׂѪʂʂ
  19. 3VTUͷಛ௃ w ݴޠ࢓༷͕͔ͳΓߗ͍ w ΧδϡΞϧͳԥΓॻ͖ʹ͸޲͔ͳ͍ w ٯʹݴ͏ͱ3VTUͰॻ͚Ε͹͋Δఔ౓҆શੑ͕୲อ͞Ε͍ͯ Δ w ίϯύΠϥ͕Ψν੾Εͯ͘͠Δ

    w ֮͑Δ͜ͱ͕ଟ͍ w ͿͬͪΌ͚࠷ॳ͸·ͱ΋ʹίʔυ͔͚ͳ͍ w ΤϯδχΞॳ৺ऀʹ͸ΦεεϝͰ͖ͳ͍ w ୈҰݴޠͱֶͯ͠Ϳͷ͸͓͢͢Ί͠ͳ͍ɻຊ౰ʹɻ ίϯύΠϥ༷͕పఈతʹมͳͱ͜ΖΛୟ͍ͯ͘Δ
  20. ೖ໳༻υΩϡϝϯτ • Writing an OS in Rust • https://os.phil-opp.com/ •

    Rust and WebAssembly • https://rustwasm.github.io/docs/book/ • rust-raspi3-OS-tutorials • https://github.com/rust-embedded/rust-raspi3-OS-tutorials ӳޠͷษڧͱࢥͬͯ
  21. 3VTUͷಛ௃ w ݴޠ࢓༷͕͔ͳΓߗ͍ w ΧδϡΞϧͳԥΓॻ͖ʹ͸޲͔ͳ͍ w ٯʹݴ͏ͱ3VTUͰॻ͚Ε͹͋Δఔ౓҆શੑ͕୲อ͞Ε͍ͯ Δ w ίϯύΠϥ͕Ψν੾Εͯ͘͠Δ

    w ֮͑Δ͜ͱ͕ଟ͍ w ͿͬͪΌ͚࠷ॳ͸·ͱ΋ʹίʔυ͔͚ͳ͍ w ΤϯδχΞॳ৺ऀʹ͸ΦεεϝͰ͖ͳ͍ w ୈҰݴޠͱֶͯ͠Ϳͷ͸͓͢͢Ί͠ͳ͍ɻຊ౰ʹɻ 3VTUͰͳ͙Γॻ͖Ͱ͖ΔΑ͏ʹͳͬͨΒڧ͍
  22. ೖ໳༻υΩϡϝϯτ • TRPL (The Rust Programming Language) • https://doc.rust-lang.org/book/ •

    TRPL Japanese Edition • https://doc.rust-jp.rs/book/second-edition/ ೔ຊޠ༁͋Γ͕ͯ͐