[][src]Crate plutonium

Helping you make your programs less safe.

You can learn more about plutonium at the Rust Security Advisory Database.

Usage

Add plutonium to your Cargo.toml:

[dependencies]
plutonium = "*"

and go:

use plutonium::*;

#[safe]
fn super_safe(x: f32) -> i32 {
    std::mem::transmute::<f32, i32>(x)
}

#[safe]
unsafe fn deref_null() {
    *std::ptr::null::<u8>();
}

println!("{:?}", super_safe(1.0));
deref_null();
use plutonium::optimize;

let mut vec: Vec<u32> = (10000..=0).collect();
let mut vec2 = vec.clone();

vec.sort();
optimize! { vec2.sort(); };

assert_eq!(vec, vec2);

Roadmap:

  1. Disable #![forbid(unsafe_code)]
  2. Add #![forbid(safe_code)] proc-macro lint

Macros

optimize

Apply extreme optimizations to your code (requires Rust 1.45 or later).

Attribute Macros

safe

Turn unsafe code into "safe" code.