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
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.2k
rage against annotate_predecessor
junk0612
0
160
MCPで実現するAIエージェント駆動のNext.jsアプリデバッグ手法
nyatinte
7
1k
AIレビュアーをスケールさせるには / Scaling AI Reviewers
technuma
2
240
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
440
TanStack DB ~状態管理の新しい考え方~
bmthd
2
450
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
2
1.8k
MLH State of the League: 2026 Season
theycallmeswift
0
210
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
120
Claude Codeで挑むOSSコントリビュート
eycjur
0
190
OSS開発者という働き方
andpad
5
1.7k
レガシープロジェクトで最大限AIの恩恵を受けられるようClaude Codeを利用する
tk1351
4
1.6k
Featured
See All Featured
Writing Fast Ruby
sferik
628
62k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6.1k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
800
BBQ
matthewcrist
89
9.8k
Six Lessons from altMBA
skipperchong
28
4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
It's Worth the Effort
3n
187
28k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Become a Pro
speakerdeck
PRO
29
5.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