Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
An introduction to the Rust ecosystem
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Zbigniew Siciarz
May 18, 2015
Programming
1.9k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
An introduction to the Rust ecosystem
Slides from my talk at Rust Warsaw #1.
Zbigniew Siciarz
May 18, 2015
More Decks by Zbigniew Siciarz
See All by Zbigniew Siciarz
What if Socrates was a dev?
zsiciarz
0
210
Calling Rust from other languages
zsiciarz
3
650
Python3-only Django project - the benefits
zsiciarz
1
400
My God, it's full of stars! (and planets and Python)
zsiciarz
0
3.6k
PostgreSQL & Django - a tasty mix
zsiciarz
2
470
Building an online PDF editor from scratch
zsiciarz
3
1.2k
IPython: tips, tricks & magic
zsiciarz
8
3.6k
ShiningPanda: simple CI hosting for Python
zsiciarz
1
130
requests, czyli HTTP dla ludzi
zsiciarz
1
140
Other Decks in Programming
See All in Programming
net-httpのHTTP/2対応について
naruse
0
440
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
760
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
110
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
500
JavaDoc 再入門
nagise
0
280
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
210
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
190
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
960
dRuby over BLE
makicamel
2
320
Claspは野良GASの夢をみるか
takter00
0
170
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.7k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.2k
Agile that works and the tools we love
rasmusluckow
331
21k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
840
Mind Mapping
helmedeiros
PRO
1
230
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
240
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
350
Designing Powerful Visuals for Engaging Learning
tmiket
1
400
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Code Review Best Practice
trishagee
74
20k
Chasing Engaging Ingredients in Design
codingconduct
0
210
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Transcript
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18
http://mickmcdee.deviantart.com/art/Fungi-ecosystem-272294806
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18 The language itself
„a systems programming language that runs blazingly fast, prevents nearly
all segfaults, and guarantees thread safety.”
<graydon> I think I named it after fungi. rusts are
amazing creatures. https://www.flickr.com/photos/basf/4837713556/
memory safety no data races zero-cost abstractions
rustup.sh distro package Windows installer
https://www.flickr.com/photos/tschaut/857853764/ https://www.flickr.com/photos/101307973@N04/13254114423/ https://www.flickr.com/photos/101307973@N04/17099131997/
https://github.com/brson/multirust manages multiple toolchains local overrides
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18 The package manager
fetches dependencies compiles code runs build scripts
[package] name = "rustwarsaw" version = "0.0.1" authors = ["Zbigniew
Siciarz <
[email protected]
>"] [dependencies] rustc-serialize = "~0.3.14" docopt = "~0.6.64" iron = "~0.1.17" mount = "~0.0.7" staticfile = "~0.0.2"
unit tests integration tests doctests examples
#[cfg(test)] mod test { #[test] fn test_solution() { assert_eq!(2 *
21, 42); } }
uploads package to crates.io
/// Gets the CPU clock frequency in MHz. /// ///
The underlying implementation uses several methods to discover CPU /// speed, including direct measurement. If all these methods fail, function /// returns `None`. pub fn clock_frequency() -> Option<i32> { // ... }
rustfmt? future! guidelines http://doc.rust-lang.org/1.0.0/style/
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18 when stdlib doesn’t
cut it
#[derive(RustcDecodable, RustcEncodable)] struct Movie { title: String, pub_year: usize, }
let mut reader = Reader::from_file(path).unwrap(); for row in reader.decode() { let movie: Movie = row.unwrap(); println!("{}", movie.title); }
fn get_content(url: &str) -> hyper::Result<String> { let mut client =
Client::new(); let mut response = try!(client.get(url).send()); let mut buf = String::new(); try!(response.read_to_string(&mut buf)); Ok(buf) } println!("{:?}", get_content("http://www.google.com"));
use hyper::server::{Request, Response}; fn hello(_: Request, res: Response) { res.send(b"Hello
Rust Warsaw!").unwrap(); } fn main () { hyper::Server::http(hello).listen("127.0.0.1:3000"); }
let mut sha = Sha256::new(); sha.input_str("Hello world!"); println!("{}", sha.result_str()); let
mut cipher = aes::ctr(KeySize::KeySize128, &key, &nonce); let secret = "I like Nickelback"; let mut out: Vec<u8> = repeat(0u8).take(secret.len()).collect(); cipher.process(secret.as_bytes(), &mut out[..]); println!("Ciphertext: {}", out.to_base64(STANDARD));
3D game engine http://www.piston.rs/ https://github.com/PistonDevelopers /piston-examples
rusqlite postgres redis mysql
anymap capnproto chrono conrod docopt fuse gl glutin html5ever image
iron itertools nalgebra openssl quickcheck rand regex rustache rustless sodiumoxide ssh2 time winapi zmq ...
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18 FFI to&from other
languages
#[link(name = "cpuid")] extern { pub fn cpuid_present() -> c_int;
pub fn cpuid_lib_version() -> *const c_char; pub fn cpuid_error() -> *const c_char; // ... } pub fn is_present() -> bool { unsafe { ffi::cpuid_present() == 1 } }
extern crate libc; use std::ffi::CStr; use libc::c_char; #[no_mangle] pub extern
"C" fn count_substrings(value: *const c_char, substr: *const c_char) -> i32 { let c_value = unsafe { CStr::from_ptr(value).to_bytes() }; let c_substr = unsafe { CStr::from_ptr(substr).to_bytes() }; // ... }
#include <stdint.h> #include <stdio.h> int32_t count_substrings(const char* value, const char*
substr); int main() { printf("%d\n", count_substrings("banana", "na")); return 0; }
import ctypes library_name = "../target/debug/libstringtools.so" stringtools = ctypes.CDLL(library_name) print(stringtools.count_substrings(b"banana", b"na"))
var ffi = require('ffi'); var library_name = '../target/debug/libstringtools.so'; var stringtools = ffi.Library(library_name, { 'count_substrings': ['int', ['string', 'string']] }); console.log(stringtools.count_substrings("banana", "na"));
https://github.com/zsiciarz/rust-ffi-stringtools https://github.com/alexcrichton/rust-ffi-examples https://doc.rust-lang.org/book/ffi.html
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18 Show me the
real deal
None
None
None
None
None
standard library docs rustbyexample.com users.rust-lang.org /r/rust #rustlang zsiciarz.github.io/24daysofrust
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18
Zbigniew Siciarz @zsiciarz Rust Warsaw #1 2015-05-18