![Page 1: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/1.jpg)
![Page 2: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/2.jpg)
$ cat ~/.profile
GIT_AUTHOR_NAME=Florian Gilcher
TWITTER_HANDLE=argorak
GITHUB_HANDLE=skade
BLOG=skade.me
YAKS=yakshav.es
![Page 3: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/3.jpg)
• Rust and Elasticsearch Trainer
• Event organiser
• Ruby Programmer since 2003
• Rust Programmer since 2013
• CEO asquera GmbH
![Page 4: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/4.jpg)
• Community person
• Rust/Search Meetups
• eurucamp/jrubyconf.eu
• RustFest
• Part of the global Rust communityteam
![Page 5: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/5.jpg)
As a hobby, I shoot arrows at stuff
![Page 6: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/6.jpg)
Why is Rustsuccessful?
![Page 7: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/7.jpg)
Problem
![Page 8: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/8.jpg)
There’s almost no comparable metricsfor programming languages around.
![Page 9: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/9.jpg)
Define"Success"
![Page 10: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/10.jpg)
• Moves the state of technology for-ward
• Is used in sizable production envi-ronments
• Attracts contribution
• Has sizable growth
• Attracts positive feedback
![Page 11: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/11.jpg)
What isRust?
![Page 12: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/12.jpg)
• new systems programming language
• powers and was developed in alongwith Servo, a new browser engine
• by Mozilla and the Community
• First stable release May 15th, 2015
![Page 13: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/13.jpg)
Providing an alternative to C/C++,but also higher-level languages.
![Page 14: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/14.jpg)
• Safe
• Concurrent
• Fast
![Page 15: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/15.jpg)
It’s generally perceived thatsafety, especially memory-safety
comes at a runtime cost.
![Page 16: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/16.jpg)
• Safe
• Concurrent
• Fast
![Page 17: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/17.jpg)
Pick Three
![Page 18: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/18.jpg)
Core features
![Page 19: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/19.jpg)
• Static type system with local typeinference
• Explicit mutability
• Zero-cost abstractions
• Runtime-independent concurrencysafety
![Page 20: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/20.jpg)
• Errors are values
• No null
• Static automatic memory manage-ment
• No garbage collection
![Page 21: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/21.jpg)
extern crate tempdir;
use tempdir::*;
use std::fs::File;
fn main() {
let tempdir = TempDir::new("goto-berlin");
let mut tempfile = match tempdir {
Ok(dir) => {
File::create(
dir.path().join("tmpfile")
)
}
Err(_) => { panic!("Couldn’t open tempdir") }
}
do_something(&mut tempfile);
// look, no close necessary!
}
![Page 22: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/22.jpg)
Base concept:Mutability
![Page 23: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/23.jpg)
struct InnerData {
val: i32
}
struct Data {
inner: InnerData
}
fn main() {
let d = Data { inner: InnerData { val: 41 }};
d.inner.val = 42;
// error: cannot assign to immutable field `d.inner.val`
}
![Page 24: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/24.jpg)
struct InnerData {
val: i32
}
struct Data {
inner: InnerData
}
fn main() {
let mut d = Data { inner: InnerData { val: 41 }};
d.inner.val = 42;
}
![Page 25: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/25.jpg)
Base concept:Ownership & Borrowing
![Page 26: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/26.jpg)
• Every piece of data is uniquelyowned
• Ownership can be passed
• When owned data reaches the endof a scope, it is destructed
![Page 27: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/27.jpg)
use std::fs::File;
use std::io::Write;
fn main() {
let file = File::open("test")
.expect("Unable to open file, bailing!");
take_and_write_to_file(file);
// take_and_write_to_file(file);
// ^^ Illegal
}
fn take_and_write_to_file(mut file: File) {
writeln!(file, "{}", "Hello #gotober!");
}
![Page 28: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/28.jpg)
• Access can be borrowed (mutableand immutable)
• You can borrow mutably once
• Or multiple times immutably
• Exclusive: mutable or immutable,never both
![Page 29: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/29.jpg)
Shared mutable state is an issueeven single-threaded applications!
![Page 30: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/30.jpg)
use std::fs::File;
use std::io::Write;
fn main() {
let mut file = File::open("test")
.expect("Unable to open file, bailing!");
write_to_file(&mut file);
write_to_file(&mut file);
}
fn write_to_file(file: &mut File) {
writeln!(file, "{}", "Hello #gotober!");
}
![Page 31: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/31.jpg)
fn main() {
let mut vector = vec![1,2,3];
let elem = &vector[1];
vector[2] = 4;
}
![Page 32: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/32.jpg)
error[E0502]: cannot borrow `vector` as mutable because it is also borrowed as immutable
–> src/main.rs:4:5
|
3 | let elem = &vector[1];
| —— immutable borrow occurs here
4 | vector[2] = 4;
| ^^^^^^ mutable borrow occurs here
5 | }
| - immutable borrow ends here
![Page 33: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/33.jpg)
Rust checks validity of allreferences at compile-time.
![Page 34: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/34.jpg)
struct Data<’a> {
inner: &’a i32
}
fn return_reference<’a>() -> Data<’a> {
let number = 4;
Data { inner: &number }
}
![Page 35: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/35.jpg)
–> src/main.rs:8:20
|
8 | Data { inner: &number }
| ^^^^^^ does not live long enough
9 | }
| - borrowed value only lives until here
|
![Page 36: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/36.jpg)
All Rust function signatures not onlysignal data types, but also mutability,
ownership and interconnectionsbetween input and output types.
![Page 37: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/37.jpg)
100, 1000, 10.000 lines of calledcode, Rust keeps these properties!
![Page 38: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/38.jpg)
Abstractions
Rust provides higher-level abstractionsthrough Generics and Traits, similarto C++ Templates or Java Generics.
![Page 39: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/39.jpg)
Concurrencywithout fear
![Page 40: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/40.jpg)
let counter = Counter { count: 0 };
for _ in 1..3 {
std::thread::spawn(move || {
increment(&mut counter);
// capture of moved value: `counter`
});
}
![Page 41: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/41.jpg)
use std::rc::Rc;
let rc = Rc::new(Counter { count: 0 });
for _ in 1..3 {
let handle = rc.clone();
std::thread::spawn(move || {
// `std::rc::Rc<Counter>` cannot be sent between
threads safely
increment(&mut handle);
});
}
![Page 42: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/42.jpg)
use std::rc::Rc;
let rc = Rc::new(Counter { count: 0 });
for _ in 1..3 {
let handle = rc.clone();
std::thread::spawn(move || {
increment(&mut handle.lock().unwrap());
});
}
![Page 43: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/43.jpg)
This example could be aconcurrency bug in many
languages, or even a double-free!
![Page 44: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/44.jpg)
This analysis is purely static andindependent of concurrency primitive!Rusts type system allows no data races.
![Page 45: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/45.jpg)
Low-levelcontrol & safety!
![Page 46: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/46.jpg)
• Borrows boil down to pointers atruntime
• Values are plain values just like ine.g. C
• Optional unsafe sub-language
![Page 47: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/47.jpg)
“ Safe code means youcan take better risks.”
– @QEDunham
![Page 48: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/48.jpg)
Is Rustsuccessful?
![Page 49: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/49.jpg)
Moves the state oftechnology forward
![Page 50: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/50.jpg)
Rust wraps safety techniquespreviously only used in researchsettings in a production-ready
package. It brings memory-safetyto environments where it
was previously not possible.
![Page 51: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/51.jpg)
Is used in sizableproduction
environments
![Page 52: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/52.jpg)
![Page 53: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/53.jpg)
• Dropbox has sizable backend sys-tems in it
• Chef Habitat is written using Rust
• Canonical: from server monitoringto middleware
• Used in several games
• Schauspiel Dortmund
![Page 54: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/54.jpg)
https://www.rust-lang.org/friends.html
![Page 55: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/55.jpg)
Attracts contribution
![Page 56: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/56.jpg)
More then 4/5 of contributionsto the Rust language come
from outside Mozilla.The compiler has morethen 2000 contributors.
![Page 57: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/57.jpg)
https://thanks.rust-lang.org/rust/all-time
![Page 58: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/58.jpg)
![Page 59: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/59.jpg)
Has sizable growth
![Page 60: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/60.jpg)
• Doubled in TIOBE and Redmonk in-dices since last year.
• This maps to increased survey re-spondent numbers
• Currently has 5 conferences peryear
• Over 100 Meetups around the world
• Newcomers from all directions
![Page 61: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/61.jpg)
![Page 62: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/62.jpg)
Attracts positiveFeedback
• Voted "Most loved language" onStackoverflow 2017, 2016
• Only 1/100 of survey respondentshave issues with the Rust commu-nity
![Page 63: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/63.jpg)
![Page 64: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/64.jpg)
Why is Rustsuccessful?
![Page 65: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/65.jpg)
Rust wants to be used
![Page 66: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/66.jpg)
Rust was always intended as aindustry production language.For that reason, it was alwaysdeveloped in lockstep witha huge application (Servo).
![Page 67: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/67.jpg)
Rust is approachable
![Page 68: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/68.jpg)
• Easy to get an environment setup
• Build and dependency managementpart of the toolchain
• Development tooling as well, likelinters
• We take pride in error messages
![Page 69: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/69.jpg)
• Great docs through the book and a(almost) fully documented standardAPI
• Central YouTube channel with talksand lectures
• Maintained forums and IRC
![Page 70: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/70.jpg)
Rust is pragmatic
![Page 71: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/71.jpg)
• All features are driven by needs ofreal software
• The language is evolved with userfeedback
• Consciously chooses familiar con-structs
• Picks good ideas from others
![Page 72: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/72.jpg)
Rust plays wellwith others
![Page 73: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/73.jpg)
• Rust interfaces to other languagesthrough the C ABI at zero cost
• Binding generators C and C++
• High-level bindings for some lan-guages (Ruby, JavaScript)
![Page 74: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/74.jpg)
Rust is a great partner
• Preserves the conveniences of high-level languages in low-level land.
• Doesn’t want to be the primary lan-guage at all cost
• Built for gradual adoption
![Page 75: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/75.jpg)
Project:Stylo
Stylo is Firefox new stylingengine, taken from Servo.
![Page 76: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/76.jpg)
• Stylo is heavily parallel and concur-rent
• Multithreading without support wasa huge source of bugs
• Concurrency assistance allowed arewrite in about a year
• Rusts FFI allowed easy integration
![Page 77: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/77.jpg)
Beyondplain code
![Page 78: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/78.jpg)
Commitmentto stability
• Rust is released every 6 weeks
• Rust is backwards-compatible, withhuge machinery to ensure that
• Currently at version 1.21.0
![Page 79: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/79.jpg)
Commitmentto stability
• Rust stable allows no use of unsta-ble features
• These are only available in nightlybuilds
• Features that are not ready for wideuse are not released for wide use.
![Page 80: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/80.jpg)
Maturity
• Code generation is providedthrough LLVM
• No runtime, no runtime bugs
• Very conservative approach tostdlib adoption
![Page 81: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/81.jpg)
Cross-capabilities
• rustc is a cross-compiler by defaultand the whole toolchain is aware
• Almost-no-setup cross compilation!(getting better)
• Rust supports embedded and IoTusecases
• Yes, we WASM
![Page 82: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/82.jpg)
Governance & Care
All changes go throughan open RFC process!
![Page 83: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/83.jpg)
Mozilla has great experience with opendiscussion and processes and it shows!
![Page 84: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/84.jpg)
Medium time to mergedPR for changes: 6 days!
![Page 85: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/85.jpg)
Supportingcommercial users
![Page 86: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/86.jpg)
• regular interviews with prod users,to hear about their issues
• the core team can always be spokento
• consulting, development and train-ing available, through integer32 andasquera.
![Page 87: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/87.jpg)
Have a [email protected]
![Page 88: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/88.jpg)
Rust brings safe programmingto targets where it was unfeasiblebefore while also bringing newthings to the table to competewith other safe languages.
![Page 89: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me](https://reader035.vdocuments.site/reader035/viewer/2022062919/5edfc269ad6a402d666b12b8/html5/thumbnails/89.jpg)
You can’tspell trust
without Rust