GO IS GETTING
RUSTY
me {
Name: "Alon Nativ",
Status: "Married + 2",
Company: "ClimaCell",
Position: "System Architect",
StartProgramingAge: 5,
}
HISTORY
1973 1983 1991 1995 1996
2009 2010
GO VS RUST
VS
CC Renée French
FERRIS
RUST IS FASTER
GO HAS GC
CONCURRENCY
PROGRAMING LANGUAGES
ARE LIKE RELIGIONS ON
SCALE
REAL WORLD EXAMPLES
K8s ‫ק9ס‬
Istio
SERVICE MASH
Network of microservices
that make up such
applications and the
interactions between them.
Control Plane
C++
Data Plane
API BREAKS
PERFORMANCE
C
● Use after free
● Double free
● Memory leaks
● Buffer overreads/overwrites
● Null pointers
● Data races
“Around 70 percent of all the
vulnerabilities in Microsoft
products addressed through a
security update each year are
memory safety issues”
Matt Mileer, MS security engineer ZDNet, 11.02.2019
NO GC NO CODE!
fn main() {
let x = String::from("Go!");
println!("{}", x);
}
fn main() {
let x = String::from("Go!");
println!("{}", x);
}
fn main() {
let x = String::from("Go!");
println!("{}", x);
}
fn main() {
let x = String::from("Go!");
println!("{}", x);
}
fn main() {
let x = String::from("Go!");
println!("{}", x);
} Memory get’s FREE!
fn main() {
let x = String::from("Go!");
let y = x;
println!("{}", x);
println!("{}", y);
}
fn main() {
let x = String::from("Go!");
let y = x;
println!("{}", x);
}
error[E0382]: borrow of moved value:`x`
^ value borrowed
here after move
fn main() {
let x = String::from("Go!");
let y = x;
println!("{}", x);
println!("{}", y);
}
Move ownership x → y
fn main() {
let x = String::from("Go!");
let y = &x;
println!("{}", x);
println!("{}", y);
}
Immutable borrow
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
Immutable borrow
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
error[E0502]: cannot borrow `v` as
mutable because it is also borrowed as
immutable
| ^^^^^^^^^ mutable borrow occurs
here
1 2 3
let mut v = vec![1, 2, 3];
1 2 3
let v2 = &v;
1 2 3
1 2 3 4
v.push(4)
1 2 3
1 2 3 4
v.push(4)
1 2 3 4
👿
println!("{:?}", v2);
CC Zero - CC0
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
v.push(4);
println!("{:?}", v2);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
println!("{:?}", v2);
v.push(4);
println!("{:?}", v);
}
fn main() {
let mut v = vec![1, 2, 3];
let v2 = &v;
println!("{:?}", v2);
v.push(4);
println!("{:?}", v);
}
v2 - no one use it from here
MUTABLE
MUTABLE
MUTABLEMUTABLEMUTABLEMUTABLEMUTABLEIMMUTABLE
MUTABLE
MUTABLE
MUTABLEMUTABLEMUTABLEMUTABLEMUTABLEIMMUTABLE
“Rust is the first new* language
that could replace C in every
role”
Jeremy Fitzhardinge Facebook Engineer, RustConf 2019
STACK OVERFLOW
SURVEY 4 YEARS
IN A ROW
CC Brain Black
GO
RUST
ADD RUST TO YOUR
TOOLBOX
Rust Book
Community
Diving Into Rust For The First Time
A Case for Oxidation: The Rust Programming Language
Rust: A Language for the Next 40 Years - Carol Nichols
#rust-beginners http://irc.mozilla.org/
Thank You!
@anativ
@anativ

Go is geting Rusty