rust programming language

Post on 14-Jul-2015

1.294 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introduction to Rust

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

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.

Use-after free

Simple and trivial case

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.

Hard case: Iterator invalidation

Can you see the problem?

Even a famous library may betray you

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

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?

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.

Garbage Collection

• No predictability– cannot used for real-time system

• Limited concurrency– global interpreter lock

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

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!

Rust programming language

• Zero-cost abstraction

• Memory safety without garbage collection

• Super fast code generation

• C function compatibility (extern "C")

• Simpler syntax than C++

Basic: move sementic

http://is.gd/pZKiBw

Basic: mutability

http://is.gd/OQDszP

Benchmark

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

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

Reminder: iterator invalidation

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

Performance enhencement

http://is.gd/dEamuS

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

remember this?

&

http://is.gd/3MTsSC

Lifetime

borrowed pointer cannot outlivesthe owner!!

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

top related