Rust for C++ programmers

Preview:

Citation preview

1 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Adenilson Cavalcanti BSc MSc

WebKit & Blink committer W3C CSS WG member

Rust for C++ programmers

2 Open Source Group – Samsung Research America (Silicon Valley) © 2014 Samsung Electronics Co.

Summary

Introduction

The case for Rust

Operators x traits

Templates x generics

Macros x attributes

Threads x tasks

Heap x boxes

3 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Introduction

The problem: •  There are many C++ programmers •  But few Rust programmers

The solution: Why not explain Rust comparing it with modern C++11?

4 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ x Rust

5 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Why Rust?

•  It aims to solve some gruesome issues in C/C++.

• Be more expressive for hard tasks. • Safety X performance: have both!

The case for Rust

6 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ example: anything wrong here?

http://doc.rust-lang.org/nightly/intro.html#ownership

7 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Run on valgrind: warnings

8 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Using gdb to understand what is happening…

9 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Address: 0x100103af0

Address

10 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Change! Now: 0x100103b10

Address

11 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Ref points to old address!

Compiler warnings won’t catch it:

12 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust to the rescue!

13 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust stops bugs from happening.

14 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Introduction

• A C++ example is given • A similar Rust program is presented

How it is done

15 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Introduction

• Get used to Rust syntax • Compare it with a mainstream language

Objective

16 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ operators

• Allows to overload operators (e.g. +, -, (), [], etc)

• Improves code readability and reuse

Use

17 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ operators

18 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust traits

19 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ templates

• Parametric types at compile type

• Improves performance and code reuse

Use

20 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ templates

21 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust generics

//http://doc.rust-lang.org/src/core/home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libcore/mem.rs.html#270-284 http://en.cppreference.com/w/cpp/utility/move

22 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ macros

• Conditional compilation, performance code, etc

• When possible, use inline functions instead.

Use

23 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ macros

24 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust attributes

25 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ threads

• Parallelism, performance.

• Can get messy pretty fast.

Use

26 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

27 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust tasks

28 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ heap

• Memory allocation of objects (i.e. stack has a fixed size).

• Be careful with leaks (smart pointers are your friend).

Use

29 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

C++ heap use

30 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Rust boxes

31 © 2014 Samsung Electronics Co. Open Source Group – Samsung Research America (Silicon Valley)

Conclusions •  Rust has equivalent features to modern C++; •  The same programming style won’t work to both languages: you have to code in the right style; •  For smaller tasks, C++ may have more compact code; •  For more complex tasks (i.e. multitask), Rust seems to be more expressive; •  Most importantly: Rust avoids common traps in C++.

32 Open Source Group – Samsung Research America (Silicon Valley) © 2014 Samsung Electronics Co.

Questions?

Thank you.

33 Open Source Group – Samsung Research America (Silicon Valley) © 2014 Samsung Electronics Co.

Recommended