This article is disingenuous with its Vec benchmark. Each call to `validate` creates a new Vec, but that means you allocate + free the vec for <i>each</i> validation. Why not store the vec on the validator to reuse the allocation? Why not mention this in the article, i had to dig in the git history to find out whether the vec was getting reallocated. This feels like you had a cool conclusion for your article, 'linked lists faster than vec', but you had to engineer the vec example to be worse. Maybe I'm being cynical.<p>It would be interesting to see the performance of a `Vec<&str>` where you reuse the vector, but also a `Vec<u8>` where you copy the path bytes directly into the vector and don't bother doing any pointer traversals. The example path sections are all very small - 'inner', 'another', 5 bytes, 7 bytes - less than the length of a pointer! storing a whole `&str` is 16 bytes per element and then you have to rebuild it again anyway in the invalid case.<p>---<p>This whole article is kinda bad, it's titled 'blazingly fast linked lists' which gives it some authority but the approach is all wrong. Man, be responsible if you're choosing titles like this. Someone's going to read this and assume it's a reasonable approach, but the entire section with Vec is bonkers.<p>Why are we designing 'blazingly fast' algorithms with rust primitives rather than thinking about where the data needs to go first? Why are we even considering vector clones or other crazy stuff? The thought process behind the naive approach and step 1 is insane to me:<p>1. i need to track some data that will grow and shrink like a stack, so my solution is to copy around an immutable Vec (???)<p>2. this is really slow for obvious reasons, how about we: pull in a whole new dependency ('imbl') that attempts to optimize for the general case using complex trees (???????????????)<p>You also mention:<p>> In some scenarios, where modifications occur way less often than clones, you can consider using Arc as explained in this video<p>I understand you're trying to be complete, but 'some scenarios' is doing a lot of work here. An Arc<[T]> approach is <i>literally</i> just the same as the naive approach <i>but</i> with extra atomic refcounts! Why mention it in this context?<p>You finally get around to mutating the vector + using it like a stack, but then comment:<p>> However, this approach requires more bookkeeping and somewhat more lifetime annotations, which can increase code complexity.<p>I have no idea why you mention 'code complexity' here (complexity introduced <i>by rust</i> and its lifetimes), but fail to mention how adding a dependency on 'imbl' is a negative.