Saying abstractions leak is pretty silly. In the SQL example, the speed at which a query executes has absolutely nothing to do with the basic abstraction provided by SQL. The TCP example is particularly awful since it's actually implicit in the abstraction that all networks can have errors. The so-called "Law of Leaky Abstractions" amounts to nothing more than saying "computers aren't perfect/infinitely fast" and sometimes you have to know what's going on under the covers to achieve your goals. So yes, since the theoretical computer doesn't exist there will always be a place where the abstraction meets the real world. This is not new information.
But the purpose of abstractions has never been to simply hide what's going on under the covers but rather to redefine the problem domain. The goal is rarely to hide something behind a facade but rather to actually introduce essentially new ideas ie abstractions.
What is important to realize is that abstractions don't exist independently in some Platonic space. Instead, abstractions are very much "tainted" by the context in which they're used. The Archivist interface is a good example; the fixed interface is probably the most intuitive one but, due to performance requirements, the Adaptive or Adjusting models might be needed. I would not to say one model "leaks" any more than the other, but rather they are completely different abstractions. An Archivist which exposes knowledge of ordering is, in fact, very different from one that doesn't--it makes different assumptions (particularly about the objects being archived) and enforces a very different contract. |