# With Closure Ensure that the `noalias` optimization takes effect by expanding to closure call. ### Implementation This library only contains one macro definition, but the first 12 items have been expanded to ensure parameter transfer. ```rust #[doc(hidden)] #[inline(always)] pub fn with R, R>(a: A, f: F) -> R { f(a) } #[macro_export] macro_rules! with { ($($a:pat = $va:expr,)* $f:block) => { $crate::with(($($va,)*), |($($a,)*)| $f) }; } ``` ### Reason and usage Due to compiler limitations, some code cannot achieve complete alias optimization. ```rust pub fn foo(mut x: Vec) { x[0] = 1; println!("do something"); if x[0] != 1 { println!("branch"); } } ``` The compiler cannot delete the branch. After passing a function, the compiler learned about this. ```rust pub fn foo(mut x: Vec) { with!(x = x.as_mut_slice(), { x[0] = 1; println!("do something"); if x[0] != 1 { println!("branch"); } }); } ``` Branch deleted.