Geekstammtisch   /     GST040 - Es gibt kein GOTO in Rust!

Description

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.

Subtitle
Wir sprachen mit Jan-Erik Rediger über Redis, Rust und Open Source Projekte
Duration
7386
Publishing date
2017-09-08 12:37
Link
http://geekstammtisch.de/40-es-gibt-kein-goto-in-rust
Contributors
  Dirk Breuer, Sebastian Cohnen
author  
Enclosures
https://cdn.podigee.com/media/podcast_902_geekstammtisch_episode_40_gst040_es_gibt_kein_goto_in_rust.m4a?v=1504874221&source=feed
audio/aac

Shownotes

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)

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)