Mit Jan-Erik Rediger haben wir über Redis und Rust gesprochen. Redis und Rust sind Open Source Projekte an denen Jan-Erik schon länger aktiv beteiligt ist. Wir sprechen kurz über Redis und deutlich ausgiebiger über Rust. Dabei gehen wir – neben diversen Ausflügen und Deep Dives in Spracheigenschaften – vor allem immer wieder auf die Arbeit an Open Source Projekten selber ein.

Wir sprachen mit Jan-Erik Rediger über Redis, Rust und Open Source Projekte
Jan-Erik Rediger (00:00:00)

https://twitter.com/badboy_, http://fnordig.de/
Irgendwas zwischen Entwickler und Administrator
Aktuell sehr aktiv in Redis und Rust (seit ~3 Jahren)
Jan-Erik ist über das Interesse an Algorithmen an Redis gekommen (lesbares C)

Redis (00:03:00)

https://redis.io/
Key-Value Datenbank

Open Source (00:08:00)

Einstieg in Open Source Projekte
erstes Projekt: Redis
Einstieg z.B. über Dokumentation
Redis ist inzwischen nicht mehr so einfach für den Einstieg
Es gibt Projekte (wie Rust), die Issues zum Einstieg markieren

Rust (00:13:30)

Jan-Erik ist bei Rust 0.11 eingestiegen
Probleme von C/C++
sehr alt :)
kommen aus einer Welt, wo es nur eine CPU gab
wenig (gute) Spracheigenschaften um Parallelität gut abzubilden
Rust erkennt viele der herkömmlichen Probleme schon beim Kompilieren
Rust will eine Low-Level Sprache sein, mit weniger Problemen

Rust's Ursprung & Andere Ansätze (00:19:25)

Graydon Hoare hat ~2006 angefangen an einer eigenen Sprache zu arbeiten
Seit 2009 hat sich Mozilla dem Projekt angenommen
D https://dlang.org/

Rust's Entwicklung (00:23:00)

Rust hatte bis vor ein paar Jahren immer noch eine Runtime
Fokus sollte wieder auf die Sprache selber gehen und die Runtime wurde entfernt, die Standard Library aufgeräumt
Rust 1.0 wurde am 2015 released (aktuell 1.19)
bis Rust 1.0 war die Sprache durch viele Änderungen extrem volatil

Einstieg in Rust (00:29:00)

Jan-Erik's Einstieg: Steve Klabnik's "Rust for Rubyists": https://github.com/steveklabnik/rust_for_rubyists
Rust legt großen Wert auf gute Dokumentation

Rust Releases, Plattformen, Buildsystem (00:33:30)

Rust wird alle zwei Wochen released
Es gibt aktuell keine "Marketing" Releases, sondern einfach nur einen festen Release Zyklus
Jeder Pull Request wird getestet
Zum Testen von Kompileränderungen werden alle aktuellen Pakete gebaut und getestet
(fast) alles was LLVM unterstützt, wird auch von Rust unterstützt
installieren kann man den Rustcompiler z.B. via rustup: https://www.rustup.rs/
cargo ist das Buildsystem und der Paketmanager von Rust: https://crates.io/

Womit loslegen in Rust? (00:40:00)

"Alles, was man sonst so mit C machen würde" :)
Jan-Erik schlägt CLI Tools als Einstiegspunkt vor
Aber: Rust ist keine besondere einfache Sprache

Testen in Rust (00:44:12)

Unit Tests sind direkt in das Tooling eingebaut: cargo test
In der Dokumentation können Codebeispiele verwendet werden, die ebenfalls getestet werden können: https://github.com/steveklabnik/rustdoc

Deployments (00:48:00)

rust kompiliert nicht sonderlich schnell
trust: Travis CI Template um Binary Releases zu bauen https://github.com/japaric/trust
rust Programme sind statisch gelinkt (ähnlich zu Go)

Firefox und Rust (00:54:30)

Mozilla baut eine neue Browser-Engine: servo https://servo.org/
Firefox ist größtenteils in C++ geschrieben
daher hat Rust eine gute Integration mit C/C++ (ohne Overhead)
Stylo ist eine neue CSS Engine für Firefox

Spracheigenschaften von Rust (01:02:30)

die Intergation in C/C++ kann unsicher sein: unsafe
besonders effizenter code kann auch schon mal unsafe benötigen
Code aus unsafe kann auch den sicheren (save) Code beeinflussen
Type Inference
Borrowship und Ownership: Jeder Wert hat einen Besitzer
Mutable und Immutable Data
Send und Sync
Wrap und Unwrap
"Result" Datentyp
Keine Exceptions
Refactoring Ruby with Monads: https://codon.com/refactoring-ruby-with-monads

Rust und Nebenläufigkeit (01:33:00)

Basis ist Borrowship und Ownership, sowie Send und Sync

Rust Entwicklung (01:43:15)

von Mozilla gespondert, aber viele Contributor
RFC Prozess, um Vorschläge von Sprachänderungen zu diskutieren
https://github.com/rust-lang/rfcs

Redis und Rust Communities (01:52:20)

Twitter Mentions