As a small example of where allocation doesn't need to happen, this could be rewritten as `fn components<'a>(&'a self) -> &'a [~str]`. Pretty much everything that then inherits from this could return borrowed pointers from this.