# [Rust], score \$2 \uparrow\uparrow\uparrow 126\$ 

<!-- language-all: lang-rust -->

    fn main(){let b='~' as usize;let mut n=b+b;for _ in b..n{n<<=n;for _ in b..n{n<<=n;print!("{}",n)}}}

[Try it online!][TIO-kgs2cxda]

Note that the code's validity is dependent on the assumption that a computer with infinite memory will have an arbitrary precision pointer to index the infinite memory. I also attempted to write a version that wouldn't overflow instantly with arbitrary precision integers but it still overflowed on the second bitshift. 

## Size analysis:
A bit-shifting \$n\$ leftward \$n\$ times is equivalent to the function \$n2^n = f_2(n)\$. My code applies recursion in a manner consistent with the fast-growing hierarchy to achieve \$f_4(n)\$. let the final value of the local variable `n` in my code above be denoted as \$o\$. It will require \$log(o)\$ bitshifts to create \$o\$. The `print!` statement runs every time the inner bitshift does, meaning the order of magnitude of my score is the sum of the change in the order of magnitude of the variable `n` between the inner bitshifts. The order of magnitude of `n` should be growing exponentially since it is being tetrated, so the expression for the order of magnitude of the result is 
$$\sum_i^{log(o)}2^i$$
telling us that the final number is \$10^{2^{log(o)+1}-1}\$ which is not meaningfully different from \$o\$ itself since \$o\$ in this case is \$f_4(126)\$ or \$2 \uparrow\uparrow\uparrow 126\$. Please let me know if this explanation seems wrong or incomplete because I am new to the domain of big numbers. 

[Rust]: https://www.rust-lang.org/
[TIO-kgs2cxda]: https://tio.run/##bchLCoAgFAXQrbycaBRuQF1LJCgIeQs/k8S2bjTvDE@quYzhQXEPEHM7XCFr@MNpz1RzuJ36KtZCMHaxyp@JNgogKyUatDb4vSsFlEmw1tmKufc@xgs "Rust – Try It Online"