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
160
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.4k
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.6k
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
JEP 496 と JEP 497 から学ぶ耐量子計算機暗号入門 / Learning Post-Quantum Crypto Basics from JEP 496 & 497
mackey0225
2
210
開発生産性が組織文化になるまでの軌跡
tonegawa07
0
150
Promise.tryで実現する新しいエラーハンドリング New error handling with Promise try
bicstone
2
390
Java_プロセスのメモリ監視の落とし穴_NMT_で見抜けない_glibc_キャッシュ問題_.pdf
ntt_dsol_java
0
140
SidekiqでAIに商品説明を生成させてみた
akinko_0915
0
130
CSC509 Lecture 13
javiergs
PRO
0
250
業務でAIを使いたい話
hnw
0
260
Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理
matuyuhi
0
380
Kotlin + Power-Assert 言語組み込みならではのAssertion Library採用と運用ベストプラクティス by Kazuki Matsuda/Gen-AX
kazukima
0
110
AI 時代だからこそ抑えたい「価値のある」PHP ユニットテストを書く技術 #phpconfuk / phpcon-fukuoka-2025
shogogg
1
420
ノーコードからの脱出 -地獄のデスロード- / Escape from Base44
keisuke69
0
680
AI駆動開発カンファレンスAutumn2025 _AI駆動開発にはAI駆動品質保証
autifyhq
0
150
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Cult of Friendly URLs
andyhume
79
6.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Done Done
chrislema
186
16k
Agile that works and the tools we love
rasmusluckow
331
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
The Pragmatic Product Professional
lauravandoore
36
7k
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