Rust is a systems programming language developed by Mozilla that provides memory safety without garbage collection. It uses concepts of ownership and borrowing to ensure memory safety issues like use-after-free do not occur. Rust offers zero-cost abstractions meaning abstraction mechanisms like generics have little to no performance overhead. It allows high levels of concurrency but requires memory references be valid during their entire lifetime.
2. Brief introduction
• First Inventor: Graydon Hoare (about 8 years)
• Mozilla foundation(2009~)
• Trait-based OOP
• Zero-cost abstraction
• High concurrency support
• Memory safety by ownership and lifetime
concept
3. Problem: Memory Safety
• Use-after-free (dangling pointer)
• Double free
• Null pointer dereference
These kind of problems cause not only
software crash, but also security
vulnerabilities.
5. Dangling pointer
&
Local variable is allocated in stack,
a temporal storage of function.
If you return a reference of local variable,
the address will be invalidated.
If these two functions are far away from each other,
this kind of bugs can be very hard to find.
7. Even a famous library
may betray you
If you do not know much
about the internals...
8. Garbage collection
• Java, Python, Ruby, C#, Scala, Go...
• Programmer creates objects. However,
the computer is responsible to remove
them.
• No explicit malloc and free.
– Therefore no mistake.
Is the world saved?
9. The real life is not that easy...
• Computer cannot know the exact timing
that each object should be freed.
– tracing GC:GC engine should track all objects
periodically.
– reference counting: every object has a
counter; the number of pointers referencing
itself.
• Both ways need more memory and CPU
power.
10. Garbage Collection
• No predictability
– cannot used for real-time system
• Limited concurrency
– global interpreter lock
• Larger code size
– VM(or GC) must included
11. System program
• Must be FAST.
• Must has runtime overhead as little as
possible.
• Must be memory SAFE.
• Should be possible to direct memory
access.
• GC cannot be used in such area!
12. Rust programming language
• Zero-cost abstraction
• Memory safety without garbage collection
• Super fast code generation
• C function compatibility (extern "C")
• Simpler syntax than C++
17. Case study: Servo
• Mozilla's next-gen web browser engine
• Written in Rust
• Parallel layout, rendering, ... almost
everything
• "During the 2 years of development, we
have never experienced any memory-
related bugs like use-after-free or double
free."
- an engineer from Mozilla
24. Borrowing rules
• You cannot borrow mutable reference from immutable
object
• You can borrow immutable reference many times
• You cannot borrow more than one mutable reference
• There cannot exist a mutable reference and an
immutable one simultaneously
• The lifetime of a borrowed reference should be ended
before the owner object do