rust for c++ programmers
TRANSCRIPT
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.