Challenge 3: Method vs. Associated Function, Explained — Possible Solution ==================================================================== The defining difference is whether the function takes self as its first parameter. A METHOD (like area(&self)) takes self, which means it needs an EXISTING INSTANCE to operate on — self IS that instance, borrowed or owned depending on which form (&self, &mut self, or self) is used. An ASSOCIATED FUNCTION (like new(radius: f64) -> Circle) has no self parameter at all — it isn't tied to any particular instance, it's just a function that happens to live inside the type's own impl block, namespaced under that type. WHY Struct::new(...) CAN'T BE CALLED AS instance.new(...): dot syntax (instance.method()) only works for functions that actually accept an instance as their first argument — under the hood, rect.area() is essentially sugar for Rectangle::area(&rect), automatically passing rect as the self argument. new() has no self parameter to fill that role at all — there's no instance to automatically pass in, because call to new() is what PRODUCES the instance in the first place. Trying instance.new(...) would be asking Rust to pass an already-existing instance into a function whose signature doesn't have any parameter slot for one — a fundamental syntactic mismatch, not just a style restriction, which is exactly why associated functions are always called via Type::function_name(...) instead.