diff --git a/Cargo.toml b/Cargo.toml index 0bbad94..6c18755 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "180daysofrust" +name = "_180daysofrust" version = "0.1.0" edition = "2021" diff --git a/src/day01_to_day03/mod.rs b/src/day01_to_day03/mod.rs index dd10781..7eaa987 100644 --- a/src/day01_to_day03/mod.rs +++ b/src/day01_to_day03/mod.rs @@ -10,4 +10,21 @@ pub mod loops; pub mod structs; pub mod conditionals; pub mod enums; -pub mod pointer_ref; \ No newline at end of file +pub mod pointer_ref; + +pub fn run() { + println!("Days 1-3: Getting Started"); + print::run(); + strings::run(); + functions::run(); + types::run(); + arrays::run(); + vars::run(); + cli::run(); + vectors::run(); + loops::run(); + structs::run(); + conditionals::run(); + enums::run(); + pointer_ref::run(); +} \ No newline at end of file diff --git a/src/day04_to_day06/mod.rs b/src/day04_to_day06/mod.rs index bbfa740..af58164 100644 --- a/src/day04_to_day06/mod.rs +++ b/src/day04_to_day06/mod.rs @@ -1,3 +1,10 @@ pub mod shadowing; pub mod ownership; pub mod borrowing; + +pub fn run() { + println!("Days 4-6: Understanding Ownership"); + shadowing::run(); + ownership::run(); + borrowing::run(); +} diff --git a/src/day07_to_day09/mod.rs b/src/day07_to_day09/mod.rs index 967f10f..ef9ade6 100644 --- a/src/day07_to_day09/mod.rs +++ b/src/day07_to_day09/mod.rs @@ -3,4 +3,14 @@ pub mod linear_search; pub mod binary_search; pub mod bubble_sort; pub mod palindrome_checker; -pub mod fibonacci_sequence; \ No newline at end of file +pub mod fibonacci_sequence; + +pub fn run() { + println!("Days 7-9: Common Collections"); + fibonacci_sequence::run(); + linear_search::run(); + binary_search::run(); + bubble_sort::run(); + palindrome_checker::run(); + fibonacci_sequence::run(); +} \ No newline at end of file diff --git a/src/day10_to_day12/mod.rs b/src/day10_to_day12/mod.rs index 8f4cff2..a1bbde6 100644 --- a/src/day10_to_day12/mod.rs +++ b/src/day10_to_day12/mod.rs @@ -3,4 +3,16 @@ pub mod error_handling; pub mod generics; pub mod iterators; pub mod lifetimes; -pub mod smart_pointers; \ No newline at end of file +pub mod smart_pointers; +pub mod traits; + +pub fn run() { + println!("Days 10-12: Advanced Rust Concepts"); + closures::examples(); + error_handling::examples(); + generics::examples(); + iterators::examples(); + lifetimes::examples(); + smart_pointers::examples(); + traits::examples(); +} \ No newline at end of file diff --git a/src/day13_to_day15/advanced_concurrency.rs b/src/day13_to_day15/advanced_concurrency.rs new file mode 100644 index 0000000..5a3269e --- /dev/null +++ b/src/day13_to_day15/advanced_concurrency.rs @@ -0,0 +1,24 @@ +use std::sync::{Arc, Mutex}; +use std::thread; + +pub fn examples() { + println!("Advanced Concurrency Examples:"); + + let counter = Arc::new(Mutex::new(0)); + let mut handles = vec![]; + + for _ in 0..10 { + let counter = Arc::clone(&counter); + let handle = thread::spawn(move || { + let mut num = counter.lock().unwrap(); + *num += 1; + }); + handles.push(handle); + } + + for handle in handles { + handle.join().unwrap(); + } + + println!("Result: {}", *counter.lock().unwrap()); +} \ No newline at end of file diff --git a/src/day13_to_day15/advanced_lifetimes.rs b/src/day13_to_day15/advanced_lifetimes.rs new file mode 100644 index 0000000..34f075b --- /dev/null +++ b/src/day13_to_day15/advanced_lifetimes.rs @@ -0,0 +1,27 @@ +pub fn examples() { + println!("Advanced Lifetimes Examples:"); + + let x = 5; + let r = &x; + print_ref(r); + + let context = Context("context"); + let parser = Parser { context: &context }; + parser.parse("input"); +} + +fn print_ref<'a, T>(t: &'a T) where T: std::fmt::Debug + 'a { + println!("t: {:?}", t); +} + +struct Context<'a>(&'a str); + +struct Parser<'a> { + context: &'a Context<'a>, +} + +impl<'a> Parser<'a> { + fn parse(&self, input: &str) { + println!("Parsing {} in context {}", input, self.context.0); + } +} \ No newline at end of file diff --git a/src/day13_to_day15/advanced_traits.rs b/src/day13_to_day15/advanced_traits.rs new file mode 100644 index 0000000..fd2f38c --- /dev/null +++ b/src/day13_to_day15/advanced_traits.rs @@ -0,0 +1,46 @@ +use std::ops::Add; + +pub fn examples() { + println!("Advanced Traits Examples:"); + + // Associated types + let point1 = Point { x: 1, y: 0 }; + let point2 = Point { x: 2, y: 3 }; + let sum = point1 + point2; + println!("Sum of points: {:?}", sum); + + // Default type parameters + let millimeters = Millimeters(100); + let meters = Meters(1); + let sum = millimeters + meters; + println!("Sum of lengths: {:?}", sum); +} + +#[derive(Debug)] +struct Point { + x: i32, + y: i32, +} + +impl Add for Point { + type Output = Point; + + fn add(self, other: Point) -> Point { + Point { + x: self.x + other.x, + y: self.y + other.y, + } + } +} + +#[derive(Debug)] +struct Millimeters(u32); +struct Meters(u32); + +impl Add for Millimeters { + type Output = Millimeters; + + fn add(self, other: Meters) -> Millimeters { + Millimeters(self.0 + (other.0 * 1000)) + } +} \ No newline at end of file diff --git a/src/day13_to_day15/macros.rs b/src/day13_to_day15/macros.rs new file mode 100644 index 0000000..77d42ce --- /dev/null +++ b/src/day13_to_day15/macros.rs @@ -0,0 +1,29 @@ +macro_rules! say_hello { + () => { + println!("Hello!"); + }; + ($name:expr) => { + println!("Hello, {}!", $name); + }; +} + +macro_rules! create_function { + ($func_name:ident) => { + fn $func_name() { + println!("You called {:?}()", stringify!($func_name)); + } + }; +} + +create_function!(foo); +create_function!(bar); + +pub fn examples() { + println!("Macros Examples:"); + + say_hello!(); + say_hello!("Alice"); + + foo(); + bar(); +} \ No newline at end of file diff --git a/src/day13_to_day15/mod.rs b/src/day13_to_day15/mod.rs new file mode 100644 index 0000000..0ca3b51 --- /dev/null +++ b/src/day13_to_day15/mod.rs @@ -0,0 +1,14 @@ +mod advanced_traits; +mod advanced_lifetimes; +mod unsafe_rust; +mod macros; +mod advanced_concurrency; + +pub fn run() { + println!("Days 13-15: Advanced Rust Concepts"); + advanced_traits::examples(); + advanced_lifetimes::examples(); + unsafe_rust::examples(); + macros::examples(); + advanced_concurrency::examples(); +} \ No newline at end of file diff --git a/src/day13_to_day15/unsafe_rust.rs b/src/day13_to_day15/unsafe_rust.rs new file mode 100644 index 0000000..a5b8f74 --- /dev/null +++ b/src/day13_to_day15/unsafe_rust.rs @@ -0,0 +1,24 @@ +pub fn examples() { + println!("Unsafe Rust Examples:"); + + let mut num = 5; + + let r1 = &num as *const i32; + let r2 = &mut num as *mut i32; + + unsafe { + println!("r1 is: {}", *r1); + println!("r2 is: {}", *r2); + + *r2 = 10; + println!("r2 is now: {}", *r2); + } + + unsafe { + dangerous(); + } +} + +unsafe fn dangerous() { + println!("This function is unsafe"); +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 95d367e..c801d61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,76 +1,23 @@ //Day 01 to day03 pub mod day01_to_day03; -use day01_to_day03::print; -use day01_to_day03::strings; -use day01_to_day03::functions; -use day01_to_day03::types; -use day01_to_day03::arrays; -use day01_to_day03::vars; -use day01_to_day03::cli; -use day01_to_day03::loops; -use day01_to_day03::vectors; -use day01_to_day03::structs; -use day01_to_day03::conditionals; -use day01_to_day03::enums; -use day01_to_day03::pointer_ref; - //Day04 to day06 pub mod day04_to_day06; -use day04_to_day06::shadowing; -use day04_to_day06::ownership; -use day04_to_day06::borrowing; - //Day 07 to day 09 pub mod day07_to_day09; -use day07_to_day09::fibonacci; -use day07_to_day09::linear_search; -use day07_to_day09::binary_search; -use day07_to_day09::bubble_sort; -use day07_to_day09::palindrome_checker; -use day07_to_day09::fibonacci_sequence; //Day 10 to day 12 pub mod day10_to_day12; -use day10_to_day12::closures; -use day10_to_day12::error_handling; -use day10_to_day12::generics; -use day10_to_day12::iterators; -use day10_to_day12::lifetimes; -use day10_to_day12::smart_pointers; + + +mod day13_to_day15; fn main() { - //Hello world in rust - // println!("Hello, world!"); - // //Print from an another file! - // print::run(); - // strings::run(); - // functions::run(); - // types::run(); - // arrays::run(); - // vars::run(); - // cli::run(); - // loops::run(); - // vectors::run(); - // structs::run(); - // conditionals::run(); - // enums::run(); - // pointer_ref::run(); - // shadowing::run(); - // ownership::run(); - // borrowing::run(); - // fibonacci::run(); - // linear_search::run(); - // binary_search::run(); - // bubble_sort::run(); - // palindrome_checker::run(); - // fibonacci_sequence::run(); - // closures::run(); - // error_handling::run(); - // generics::run(); - // iterators::run(); - // lifetimes::run(); - // smart_pointers::run(); + // day01_to_day03::run(); + // day04_to_day06::run(); + // day07_to_day09::run(); + // day10_to_day12::run(); + day13_to_day15::run(); }