diff options
Diffstat (limited to 'rust-book/advanced/unsafe-rust')
-rwxr-xr-x | rust-book/advanced/unsafe-rust/Cargo.lock | 4 | ||||
-rwxr-xr-x | rust-book/advanced/unsafe-rust/Cargo.toml | 7 | ||||
-rwxr-xr-x | rust-book/advanced/unsafe-rust/src/main.rs | 62 |
3 files changed, 73 insertions, 0 deletions
diff --git a/rust-book/advanced/unsafe-rust/Cargo.lock b/rust-book/advanced/unsafe-rust/Cargo.lock new file mode 100755 index 0000000..fbd902c --- /dev/null +++ b/rust-book/advanced/unsafe-rust/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "unsafe-rust" +version = "0.1.0" + diff --git a/rust-book/advanced/unsafe-rust/Cargo.toml b/rust-book/advanced/unsafe-rust/Cargo.toml new file mode 100755 index 0000000..b37474a --- /dev/null +++ b/rust-book/advanced/unsafe-rust/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "unsafe-rust" +version = "0.1.0" +authors = ["Adam Carpenter <53hornet@gmail.com>"] +edition = "2018" + +[dependencies] diff --git a/rust-book/advanced/unsafe-rust/src/main.rs b/rust-book/advanced/unsafe-rust/src/main.rs new file mode 100755 index 0000000..c9967a8 --- /dev/null +++ b/rust-book/advanced/unsafe-rust/src/main.rs @@ -0,0 +1,62 @@ +fn main() { + let mut num = 5; + + let r1 = &num as *const i32; + let r2 = &mut num as *mut i32; + + let address = 0x012345usize; + let r = address as *const i32; + + unsafe { + println!("{}", *r1); + println!("{}", *r2); + } + + unsafe { + dangerous(); + } + + + unsafe { + println!("c call: {}", abs(-3)); + } + + + unsafe { + HELLO_WORLD = "test"; + println!("{}", HELLO_WORLD); + } + println!("{}", HI_THERE); + + add_to_count(3); + + unsafe { + println!("counter: {}", COUNTER); + } +} + +unsafe fn dangerous() {} + +extern "C" { + fn abs(input: i32) -> i32; +} + +static mut HELLO_WORLD: &str = "hello world"; +static mut COUNTER: u32 = 0; + +fn add_to_count(inc: u32) { + unsafe { + COUNTER += inc; + } +} + +const HI_THERE: &str = "hi there"; + +unsafe trait Foo { + // methods +} + +unsafe impl Foo for i32 { + // implementations +} + |