rust programming language

25
Introduction to Rust

Upload: jaeju-kim

Post on 14-Jul-2015

1.293 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Rust Programming Language

Introduction to Rust

Page 2: Rust Programming Language

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

Page 3: Rust Programming Language

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.

Page 4: Rust Programming Language

Use-after free

Simple and trivial case

Page 5: Rust Programming Language

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.

Page 6: Rust Programming Language

Hard case: Iterator invalidation

Can you see the problem?

Page 7: Rust Programming Language

Even a famous library may betray you

If you do not know much about the internals...

Page 8: Rust Programming Language

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?

Page 9: Rust Programming Language

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.

Page 10: Rust Programming Language

Garbage Collection

• No predictability– cannot used for real-time system

• Limited concurrency– global interpreter lock

• Larger code size– VM(or GC) must included

Page 11: Rust Programming Language

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!

Page 12: Rust Programming Language

Rust programming language

• Zero-cost abstraction

• Memory safety without garbage collection

• Super fast code generation

• C function compatibility (extern "C")

• Simpler syntax than C++

Page 13: Rust Programming Language

Basic: move sementic

http://is.gd/pZKiBw

Page 14: Rust Programming Language

Basic: mutability

http://is.gd/OQDszP

Page 15: Rust Programming Language

Benchmark

• http://benchmarksgame.alioth.debian.org/u64q/rust.html

• Program written in Rust is as fast as that of C!

Page 16: Rust Programming Language

Reminder: iterator invalidation

Page 17: Rust Programming Language

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

Page 18: Rust Programming Language

Performance enhencement

Page 19: Rust Programming Language

http://is.gd/dEamuS

Page 20: Rust Programming Language

The ownership magic

v is an owner of the vector

x borrows the vector from v

now v cannot modify the vectorbecause it lent the ownership to x

Page 21: Rust Programming Language

remember this?

&

Page 22: Rust Programming Language

http://is.gd/3MTsSC

Page 23: Rust Programming Language

Lifetime

borrowed pointer cannot outlivesthe owner!!

Page 24: Rust Programming Language

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

Page 25: Rust Programming Language