Upgrade to Pro — share decks privately, control downloads, hide ads and more …

An introduction to the Rust ecosystem

An introduction to the Rust ecosystem

Slides from my talk at Rust Warsaw #1.

Zbigniew Siciarz

May 18, 2015
Tweet

More Decks by Zbigniew Siciarz

Other Decks in Programming

Transcript

  1. „a systems programming language that runs blazingly fast, prevents nearly

    all segfaults, and guarantees thread safety.”
  2. <graydon> I think I named it after fungi. rusts are

    amazing creatures. https://www.flickr.com/photos/basf/4837713556/
  3. [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"
  4. /// 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> { // ... }
  5. #[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); }
  6. 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"));
  7. 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"); }
  8. 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));
  9. anymap capnproto chrono conrod docopt fuse gl glutin html5ever image

    iron itertools nalgebra openssl quickcheck rand regex rustache rustless sodiumoxide ssh2 time winapi zmq ...
  10. #[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 } }
  11. 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() }; // ... }
  12. #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; }
  13. 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"));