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
Zbigniew Siciarz
May 18, 2015
Programming
5
1.9k
An introduction to the Rust ecosystem
Slides from my talk at Rust Warsaw #1.
Zbigniew Siciarz
May 18, 2015
Tweet
Share
More Decks by Zbigniew Siciarz
See All by Zbigniew Siciarz
What if Socrates was a dev?
zsiciarz
0
140
Calling Rust from other languages
zsiciarz
3
630
Python3-only Django project - the benefits
zsiciarz
1
370
My God, it's full of stars! (and planets and Python)
zsiciarz
0
3.3k
PostgreSQL & Django - a tasty mix
zsiciarz
2
440
Building an online PDF editor from scratch
zsiciarz
3
1.1k
IPython: tips, tricks & magic
zsiciarz
8
3.5k
ShiningPanda: simple CI hosting for Python
zsiciarz
1
110
requests, czyli HTTP dla ludzi
zsiciarz
1
120
Other Decks in Programming
See All in Programming
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
200
物語を動かす行動"量" #エンジニアニメ
konifar
14
5.5k
Ruby Parser progress report 2025
yui_knk
1
150
Claude Codeで挑むOSSコントリビュート
eycjur
0
180
Infer入門
riru
4
1.6k
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
2
1.6k
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
170
The State of Fluid (2025)
s2b
0
200
UbieのAIパートナーを支えるコンテキストエンジニアリング実践
syucream
2
750
SOCI Index Manifest v2が出たので調べてみた / Introduction to SOCI Index Manifest v2
tkikuc
1
110
旅行プランAIエージェント開発の裏側
ippo012
1
360
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Become a Pro
speakerdeck
PRO
29
5.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
A better future with KSS
kneath
239
17k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
480
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Building Applications with DynamoDB
mza
96
6.6k
How to Ace a Technical Interview
jacobian
279
23k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
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