Rust#
Resources#
Organisation#
- Cargo.lock
- Cargo.toml
- src
- lib.rs (normal code, unit tests, and run function)
- main.rs (calls run function)
- tests
- integration_test.rs (for run function from lib.rs)
Python extensions#
Make Rust modules for Python bottlenecks
Arrays#
Pre-allocate memory in Python before using rust calls
Multi-threading#
par_bridge().try_for_each
enables error from one of threads to be propagated back e.g., for columnspar_azip
is similar for arrays
Error handling#
Pattern match range of Rust errors to Python ones, so these are returned to the Python user
Cloud#
Read cloud files
apache/arrow-rs (
object_store
)Also
Format#
Lint#
Profile#
Benchmark#
Logging#
JSON#
async#
Docs#
#![warn(missing_docs)]
all public stuff
create simple examples
#![doc = include_str!("../README.md")]
cargo doc --no-deps --open
good example: bed_reader - Rust (docs.rs)
Database#
Builder pattern for keyword arguments#
Plotting#
Concatenating strings#
let s1 = String::from("tic");
let s2 = String::from("tac");
let s3 = String::from("toe");
let s = format!("{s1}-{s2}-{s3}");
Using an Enum to Store Multiple Types#
use std::collections::HashMap;
use std::hash::Hash;
#[derive(Debug, Eq, PartialEq, Hash)]
enum Keys {
Int(i32),
Text(String),
}
#[derive(Debug)]
#[allow(dead_code)]
enum SpreadsheetCell {
Int(i32),
Float(f64),
Text(String),
}
fn main() {
let mut scores = HashMap::new();
scores.insert(Keys::Text(String::from("Blue")), 10);
scores.insert(Keys::Text(String::from("Yellow")), 50);
scores.insert(Keys::Int(42), 30);
println!("{:#?}", scores);
let row = vec![
SpreadsheetCell::Int(3),
SpreadsheetCell::Text(String::from("blue")),
SpreadsheetCell::Float(10.12),
];
println!("{:#?}", row);
}