Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduce to Rust-A Powerful System Language

471 views

Published on

Rust is a multi-paradigm systems programming language focused on safety, especially safe concurrency. Rust is syntactically similar to C++, but is designed to provide better memory safety while maintaining high performance.

This talk covers the following: principles of design, features, and applications. There are many successful projects used Rust, including browsers, operation systems, and database management systems, which will be also discussed in the talk.

Published in: Technology
  • How can I improve my memory and concentration? How can I improve my memory for studying?●●● https://bit.ly/2GEWG9T
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Introduce to Rust-A Powerful System Language

  1. 1. Introduce to Rust A Powerful System Language Liu, An-Chi  劉劉安⿑齊 2019.4.17 1
  2. 2. Acknowledgment Lots of contents in the following slides use contents from following sources. Great thanks to the authors! • http://pages.di.unipi.it/corradini/Didattica/AP-18/DOCS/HaozhongZhang- IntroToRUST.pptx • https://nikomatsakis.github.io/rust-latam-2019/ • http://www-verimag.imag.fr/~mounier/Enseignement/Software_Security/ 19RustVsC.pdf • https://fr.slideshare.net/yann_s/introduction-to-rust-a-lowlevel-language-with- highlevel-abstractions • https://www.slideshare.net/jaejukim9/rust-programming-language • https://www.slideshare.net/rodolfoeduardofinochietti/introduction-to-rust- language-programming !2
  3. 3. About • Liu, An-Chi 劉劉安⿑齊 • ID:微中⼦子、@tigercosmos • BIME, National Taiwan University • Rust Taiwan Community • ONNC team @ Skymizer • Tennis, Animations, Coding
 3
  4. 4. What is Rust? From the official website (http://rust-lang.org): “Rust is a systems programming language that runs blazingly fast, prevents nearly all segmentation faults, and guarantees thread safety. ” !4
  5. 5. A brief history Pre-2009 Graydone Hoare terrible memory leakages/bugs in Firefox 2009 Mozilla Corp. Experimental web browser layout engine: Servo 2013 Samsung Corp. Joined 2015 v1.0 Stable Released! 2019 v1.34 2018 edition !5
  6. 6. Grow Up Fast !6 Rust v1.0
  7. 7. Who are using Rust? • Tilde • Mozilla (Servo, WebRender) • Dropbox (storage system) • Facebook (Mercurial rewrite) • Google (Fuschia operating system) • Amazon (Firecracker) • Microsoft (Azure) • PingCAP (TiKV) !7
  8. 8. Take a Look https://github.com/rust-unofficial/awesome-rust See more on https://github.com/topics/rust !8
  9. 9. People Love Rust Stack Overflow 2019 Rust 83.5 % !9
  10. 10. People Love Rust Stack Overflow 2018 Rust 78.9% !10
  11. 11. Advocates of Rust !11
  12. 12. Control & Safety Things make Rust Rust. 12
  13. 13. In the real world … •Rust is the coating closest to the bare metal. 13
  14. 14. As a programming language … •Rust is a system programming language barely on the hardware. • No runtime requirement (eg. GC/Dynamic Type/…) • More control (over memory allocation/destruction/…) • Zero-cost abstractions • Anywhere you use C, you can use Rust fn main() { println!(“Hello, world!”); } 14
  15. 15. More than that … C/C++ more control, less safety Haskell/Python less control, more safety more control, more safety Rust 15
  16. 16. What is control? 16
  17. 17. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } 16
  18. 18. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } 16
  19. 19. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } Precise memory layout 16
  20. 20. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } Precise memory layout 16
  21. 21. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } Precise memory layout Lightweight reference 16
  22. 22. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } Precise memory layout Lightweight reference 16
  23. 23. What is control? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); ptr->a = 2048; free(ptr); } Precise memory layout Lightweight reference Deterministic destruction 16
  24. 24. Rust’s Solution: Zero-cost Abstraction
  25. 25. Rust’s Solution: Zero-cost Abstraction struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy> = Box::new(Dummy { a: 0, b: 0 }); res.a = 2048; }
  26. 26. Rust’s Solution: Zero-cost Abstraction struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy> = Box::new(Dummy { a: 0, b: 0 }); res.a = 2048; } Memory allocation
  27. 27. Rust’s Solution: Zero-cost Abstraction struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy> = Box::new(Dummy { a: 0, b: 0 }); res.a = 2048; } Variable binding Memory allocation
  28. 28. Rust’s Solution: Zero-cost Abstraction struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy> = Box::new(Dummy { a: 0, b: 0 }); res.a = 2048; } Variable binding Memory allocation
  29. 29. Rust’s Solution: Zero-cost Abstraction struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy> = Box::new(Dummy { a: 0, b: 0 }); res.a = 2048; } Variable binding Memory allocation Resource owned by res is freed automatically
  30. 30. What is safety? typedef struct Dummy { int a; int b; } Dummy; void foo(void) { Dummy *ptr = (Dummy *) malloc(sizeof(struct Dummy)); Dummy *alias = ptr; free(ptr); int a = alias.a; free(alias); } ptr alias .a .b Stack Heap Dangling Pointer Use after free Double free Aliasing Mutation 18
  31. 31. Rust’s Solution: Ownership & Borrowing Compiler enforces: •Every resource has a unique owner. •Others can borrow the resource from its owner. •Owner cannot free or mutate its resource while it is borrowed. Aliasing Mutation No need for runtime Memory safety Data-race freedom 19
  32. 32. Ownership 20
  33. 33. Ownership struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); } 20
  34. 34. Ownership struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); } res .a = 0 .b = 0 Stack Heap 20
  35. 35. Ownership struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); } res .a = 0 .b = 0 Stack Heap owns 20
  36. 36. Ownership struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); } res .a = 0 .b = 0 Stack Heap owns 20
  37. 37. Ownership struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); } res Stack Heap owns 20
  38. 38. Ownership struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); } res Stack Heap owns res is out of scope and its resource is freed automatica 20
  39. 39. Ownership: Lifetime 21
  40. 40. Ownership: Lifetime struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy>; { res = Box::new(Dummy {a: 0, b: 0}); } res.a = 2048; } 21
  41. 41. Ownership: Lifetime struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy>; { res = Box::new(Dummy {a: 0, b: 0}); } res.a = 2048; } Lifetime that res owns the resource. Compiling Error: res no longer owns the resource 21
  42. 42. Ownership: Lifetime •Lifetime is determined and checked statically. struct Dummy { a: i32, b: i32 } fn foo() { let mut res: Box<Dummy>; { res = Box::new(Dummy {a: 0, b: 0}); } res.a = 2048; } Lifetime that res owns the resource. Compiling Error: res no longer owns the resource 21
  43. 43. Ownership: Unique Owner Aliasing Mutation 22
  44. 44. Ownership: Unique Owner struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); take(res); println!(“res.a = {}”, res.a); } fn take(arg: Box<Dummy>) { } Aliasing Mutation 22
  45. 45. Ownership: Unique Owner struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); take(res); println!(“res.a = {}”, res.a); } fn take(arg: Box<Dummy>) { } Aliasing Mutation 22
  46. 46. Ownership: Unique Owner struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); take(res); println!(“res.a = {}”, res.a); } fn take(arg: Box<Dummy>) { } Ownership is moved from res to arg Aliasing Mutation 22
  47. 47. Ownership: Unique Owner struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); take(res); println!(“res.a = {}”, res.a); } fn take(arg: Box<Dummy>) { } Ownership is moved from res to arg Aliasing Mutation 22
  48. 48. Ownership: Unique Owner struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); take(res); println!(“res.a = {}”, res.a); } fn take(arg: Box<Dummy>) { } Ownership is moved from res to arg arg is out of scope and the resource is freed automatically Aliasing Mutation 22
  49. 49. Ownership: Unique Owner struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy { a: 0, b: 0 }); take(res); println!(“res.a = {}”, res.a); } fn take(arg: Box<Dummy>) { } Ownership is moved from res to arg arg is out of scope and the resource is freed automatically Compiling Error! Aliasing Mutation 22
  50. 50. Immutable/Shared Borrowing (&) Aliasing Mutation 23
  51. 51. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Aliasing Mutation 23
  52. 52. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Resource is immutably borrowed by arg from res Aliasing Mutation 23
  53. 53. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Resource is immutably borrowed by arg from res Aliasing Mutation 23
  54. 54. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Resource is immutably borrowed by arg from res Aliasing Mutation 23
  55. 55. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Resource is immutably borrowed by arg from res Resource is still owned by res. No free here. Aliasing Mutation 23
  56. 56. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Resource is still owned by res. No free here. Resource is returned from arg to res Aliasing Mutation 23
  57. 57. Immutable/Shared Borrowing (&) struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{ a: 0, b: 0 }); take(&res); res.a = 2048; } fn take(arg: &Box<Dummy>) { arg.a = 2048; } Resource is still owned by res. No free here. Resource is returned from arg to res Aliasing Mutation 23
  58. 58. Immutable/Shared Borrowing (&) •Read-only sharing struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{a: 0, b: 0}); { let alias1 = &res; let alias2 = &res; let alias3 = alias2; res.a = 2048; } res.a = 2048; } Rust 2015 NLL 24
  59. 59. Non-lexical Lifetime struct Dummy { a: i32, b: i32 } fn main() { let mut res = Box::new(Dummy { a: 0, b: 0 }); let alias1 = &res; let alias2 = &res; let alias3 = alias2; res.a = 2048; } error[E0506]: cannot assign to `res.a` because it is borrowed --> src/main.rs:8:5 | 5 | let alias1 = &res; | --- borrow of `res.a` occurs here ... 8 | res.a = 2048; | ^^^^^^^^^^^^ assignment to borrowed `res.a` occurs here Rust 2015 Finished release [optimized] target(s) in 0.49s Running `target/release/playground` Rust 2018 !25
  60. 60. Mutable Borrowing (&mut) Aliasing Mutation 26
  61. 61. Mutable Borrowing (&mut) Aliasing Mutation struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{a: 0, b: 0}); take(&mut res); res.a = 4096; let borrower = &mut res; let alias = &mut res; } fn take(arg: &mut Box<Dummy>) { arg.a = 2048; } 26
  62. 62. Mutable Borrowing (&mut) Aliasing Mutation struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{a: 0, b: 0}); take(&mut res); res.a = 4096; let borrower = &mut res; let alias = &mut res; } fn take(arg: &mut Box<Dummy>) { arg.a = 2048; } Mutably borrowed by arg from res 26
  63. 63. Mutable Borrowing (&mut) Aliasing Mutation struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{a: 0, b: 0}); take(&mut res); res.a = 4096; let borrower = &mut res; let alias = &mut res; } fn take(arg: &mut Box<Dummy>) { arg.a = 2048; } Returned from arg to res 26
  64. 64. Mutable Borrowing (&mut) Aliasing Mutation struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{a: 0, b: 0}); take(&mut res); res.a = 4096; let borrower = &mut res; let alias = &mut res; } fn take(arg: &mut Box<Dummy>) { arg.a = 2048; } 26
  65. 65. Mutable Borrowing (&mut) Aliasing Mutation struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy{a: 0, b: 0}); take(&mut res); res.a = 4096; let borrower = &mut res; let alias = &mut res; } fn take(arg: &mut Box<Dummy>) { arg.a = 2048; } Multiple mutable borrowings are disallowed 26
  66. 66. Mutability •Every resource in Rust is immutable by default. •mut is used to declare a resource as mutable. 27
  67. 67. Mutability •Every resource in Rust is immutable by default. •mut is used to declare a resource as mutable. struct Dummy { a: i32, b: i32 } fn foo() { let res = Box::new(Dummy{a: 0, b: 0}); res.a = 2048; let borrower = &mut res; } Error: Resource is immutable 27
  68. 68. Mutability •Every resource in Rust is immutable by default. •mut is used to declare a resource as mutable. struct Dummy { a: i32, b: i32 } fn foo() { let res = Box::new(Dummy{a: 0, b: 0}); res.a = 2048; let borrower = &mut res; } Error: Resource is immutable Error: Cannot get a mutable borrowing of an immutable resource 27
  69. 69. Concurrency & Data-race Freedom 28
  70. 70. Concurrency & Data-race Freedom struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy {a: 0, b: 0}); std::thread::spawn(move || { let borrower = &mut res; borrower.a += 1; }); res.a += 1; } 28
  71. 71. Concurrency & Data-race Freedom struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy {a: 0, b: 0}); std::thread::spawn(move || { let borrower = &mut res; borrower.a += 1; }); res.a += 1; } Spawn a new thread 28
  72. 72. Concurrency & Data-race Freedom struct Dummy { a: i32, b: i32 } fn foo() { let mut res = Box::new(Dummy {a: 0, b: 0}); std::thread::spawn(move || { let borrower = &mut res; borrower.a += 1; }); res.a += 1; } Error: res is being mutably borrowed res is mutably borrowed Spawn a new thread 28
  73. 73. Type Error !29 int main() { unsigned int a = 4294967295; int b = -1; if (a == b) printf("%u == %dn",a,b); } C fn main() { let a = 4294967295u32; let b = -1i32; if a == b { ┆ println!("{} == {}", a, b); } } Rust tiger@tiger:~$ rustc test.rs error[E0308]: mismatched types --> test.rs:4:13 | 4 | if a == b { | ^ expected u32, found i32 error: aborting due to previous error $ ./a.out 4294967295 == -1
  74. 74. No NULL !30 enum Option { Some(T), None, } The inventor of NULL Tony Hoare apologized for inventing it at a software conference called QCon London in 2009. He called it a billion-dollar mistake. • No null value struct Foo { bar: Option<i32>, } fn main() { let foo1 = Foo { bar: Some(3) }; let foo2 = Foo { bar: None }; }
  75. 75. Unsafe Life is hard. 31
  76. 76. Raw Pointers •Raw Pointers are inevitable in the real world. •Compiler does NOT check the memory safety of most operations wrt. raw pointers. •Most operations wrt. raw pointers should be encapsulated in a unsafe {} syntactic structure. 32
  77. 77. Raw Pointers let a = 3u32; unsafe { let b = &a as *const u32 as *mut u32; *b = 4; } println!(“a = {}”, a); I know what I’m doing Print “a = 4” 33 But not recommended! More: https://doc.rust-lang.org/nomicon/meet-safe-and-unsafe.html
  78. 78. Foreign Function Interface (FFI) •All foreign functions are unsafe. extern { fn write(fd: i32, data: *const u8, len: u32) -> i32; } fn main() { let msg = b”Hello, world!n”; unsafe { write(1, &msg[0], msg.len()); } } 34
  79. 79. Inline Assembly #![feature(asm)] fn outl(port: u16, data: u32) { unsafe { asm!(“outl %0, %1” : : “a” (data), “d” (port) : : “volatile”); } } 35
  80. 80. Other Goodies Enums, Pattern Match, Generic, Traits, Tests, … 36
  81. 81. Enums •First-class • Instead of integers (C/C++) •Structural • Parameters • Replacement of union in C/C++ 37
  82. 82. Enums enum RetInt { Fail(u32), Succ(u32) } fn foo_may_fail(arg: u32) -> RetInt { let fail = false; let errno: u32; let result: u32; ... if fail { RetInt::Fail(errno) } else { RetInt::Succ(result) } } 38
  83. 83. Enums: No Null Pointers enum std::option::Option<T> { None, Some(T) } struct SLStack { top: Option<Box<Slot>> } struct Slot { data: Box<u32>, prev: Option<Box<Slot>> } 39
  84. 84. Pattern Match let x = 5; match x { 1 => println!(“one”), 2 => println!(“two”), 3|4 => println!(“three or four”), 5 ... 10 => println!(“five to ten”), e @ 11 ... 20 => println!(“{}”, e); _ => println!(“others”), } Compiler enforces the matching is complete 40
  85. 85. Pattern Match let x = Dummy{ a: 2048, b: 4096 }; match x { Dummy{ a: va, b: vb } => va + vb, } match x { Dummy{ a: va, .. } => println!(“a={}”, va), } 41
  86. 86. Pattern Match enum RetInt { Fail(u32), Succ(u32) } fn foo_may_fail(arg: u32) -> RetInt { ... } fn main() { match foo_may_fail(2048) { Fail(errno) => println!(“Failed w/ err={}”, errno), Succ(result) => println!(“Result={}”, result), } } 42
  87. 87. Pattern Match enum std::option::Option<T> { None, Some(T) } struct SLStack { top: Option<Box<Slot>> } fn is_empty(stk: &SLStack) -> bool { match stk.top { None => true, Some(..) => false, } } 43
  88. 88. Generic struct SLStack { top: Option<Box<Slot>> } struct Slot { data: Box<u32>, prev: Option<Box<Slot>> } fn is_empty(stk: &SLStack) -> bool { match stk.top { None => true, Some(..) => false, } } 44
  89. 89. struct SLStack<T> { top: Option<Box<Slot<T>>> } struct Slot<T> { data: Box<T>, prev: Option<Box<Slot<T>>> } fn is_empty<T>(stk: &SLStack<T>) -> bool { match stk.top { None => true, Some(..) => false, } } Generic 45
  90. 90. Traits •More generic •Typeclass in Haskell 46
  91. 91. Traits trait Stack<T> { fn new() -> Self; fn is_empty(&self) -> bool; fn push(&mut self, data: Box<T>); fn pop(&mut self) -> Option<Box<T>>; } impl<T> Stack<T> for SLStack<T> { fn new() -> SLStack<T> { SLStack{ top: None } } fn is_empty(&self) -> bool { match self.top { None => true, Some(..) => false, } } } Type implemented this trait Object of the type implementing this trait 47
  92. 92. Traits trait Stack<T> { fn new() -> Self; fn is_empty(&self) -> bool; fn push(&mut self, data: Box<T>); fn pop(&mut self) -> Option<Box<T>>; } fn generic_push<T, S: Stack<T>>(stk: &mut S, data: Box<T>) { stk.push(data); } fn main() { let mut stk = SLStack::<u32>::new(); let data = Box::new(2048); generic_push(&mut stk, data); } 48
  93. 93. Traits trait Clone { fn clone(&self) -> Self; } impl<T> Clone for SLStack<T> { ... } fn immut_push<T, S: Stack<T>+Clone>(stk: &S, data: Box<T>) -> S { let mut dup = stk.clone(); dup.push(data); dup } fn main() { let stk = SLStack::<u32>::new(); let data = Box::new(2048); let stk = immut_push(&stk, data); } 49
  94. 94. Abstraction Without Overhead !50 Same Performance!
 (Functional version even faster)
  95. 95. Others •Closures •Concurrency •Comments as documentations •Macro •Async •Crates and modules •… 51
  96. 96. Modern Conveniences It’s 21 century now. 52
  97. 97. Cargo: Rust’s package manager !53
  98. 98. Tests •Rust provides a builtin test system. 54
  99. 99. Tests #[test] fn test_pop_empty_stack() { let stk = SLStack::<u32>::new(); assert!(stk.pop() == None); } Testing annotation $ rustc --test slstack.rs; ./slstack running 1 test test test_pop_empty_stack … ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured Passed 55
  100. 100. Tests #[test] fn test_pop_empty_stack() { let stk = SLStack::<u32>::new(); assert!(stk.pop() == None); } Testing annotation $ rustc --test slstack.rs; ./slstack running 1 test test test_pop_empty_stack … FAILED --- test_pop_empty_stack stdout --- thread ‘test_pop_empty_stack’ panicked at ‘assertion failed: stk.pop() == None’, slstack.rs: 4 failures: test_pop_empty_stack test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured Failed 56
  101. 101. Documentation Tests /// # Examples /// ``` /// let stk = SLStack::<u32>::new(); /// assert!(stk.pop() == None); /// ``` fn pop(&mut self) -> Option<Box<T>> { ... } $ rustdoc --test slstack.rs; ./slstack running 1 test test test_pop_empty_stack_0 … ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured Passed 57
  102. 102. Community Many hands make light work! 58
  103. 103. !59
  104. 104. Rust is Open • Open-source • Thousands of contributors • Open-governance • Owned by the people who build it, not any company • Open-minded • Find the best answer, not win the argument !60
  105. 105. Ideas from People • adopting the borrow checker (ownership and borrowing) • adopting the trait system • adopting RFCs for decision making • removing the runtime and garbage collector • adopting cargo • nightly, beta, and stable, and the 6-week releases • introducing the Poll trait !61 Each introduced by different people. Each seems obvious now. None were obvious at the time .
  106. 106. Events in April 2019 !62 WOW many!
  107. 107. Learning & Development Resources 63
  108. 108. Official Resources •Rust website: http://rust-lang.org/ •Playground: https://play.rust-lang.org/ •Guide: https://doc.rust-lang.org/stable/book/ •Documents: https://doc.rust-lang.org/stable/ •User forum: https://users.rust-lang.org/ •Dev forum: https://internals.rust-lang.org/ •Source code: https://github.com/rust-lang/rust •IRC: server: irc.mozilla.org, channel: rust •Cargo: https://crates.io/ 64
  109. 109. 3rd Party Resources •Rust by example: http://rustbyexample.com/ •Reddit: https://reddit.com/r/rust •Stack Overflow: https://stackoverflow.com/ questions/tagged/rust •Rust Primer (中⽂文): https://rustcc.gitbooks.io/ rustprimer/content/ •深入淺出 Rust •Rust 的編程之道 65
  110. 110. Academic Research •https://doc.rust-lang.org/stable/book/ academic-research.html 66
  111. 111. News of Rust • This Week in Rust: https://this-week-in-rust.org/ • Rust 每⽇日新聞:https://github.com/RustStudy/ rust_daily_news !67
  112. 112. Projects • rustc: Rust compiler • https://github.com/rust-lang/rust • Cargo: Rust’s package manager • https://github.com/rust-lang/cargo • Servo: Experimental web browser layout engine • https://github.com/servo/servo • Piston: A user friendly game engine • https://github.com/PistonDevelopers/piston • TiKV: Distributed transactional key-value database • https://github.com/tikv/tikv • Tokio: A runtime for writing asynchronous applications • https://github.com/tokio-rs/tokio • On Github • https://github.com/trending?l=rust 68
  113. 113. Development Environment • VSCode • rust langular server: https://github.com/rust-lang/rls- vscode • ext install vscode-rust
 • Emacs • rust-mode: https://github.com/rust-lang/rust-mode • racer: https://github.com/phildawes/racer • flycheck-rust: https://github.com/flycheck/flycheck-rust • Vim • rust.vim: https://github.com/rust-lang/rust.vim • racer: https://github.com/rust-lang/rust.vim 69
  114. 114. –Niko Matsakis “Hack Without Fear!” !70
  115. 115. Questions? 71

×