"Why Black Boxes are so Hard to Reuse?", a lecture by Gregor Kiczales
Mark
smarksc at gmail.com
Wed Feb 14 01:20:24 UTC 2018
I came across this one hour lecture [1] on Youtube. It's from
1994, but I think it's still very relevant today, both to
developers in general and to the D language in particular.
A TL;DR summary of the lecture:
Abstraction is a central theme in software engineering, since it
allows us to control complexity. However, most abstractions in
software development do not (and cannot) completely hide their
implementation; the implementation leaks via the performance
characteristics of the abstraction. This is because the designer
of the abstraction chose to implement its interface in some
specific way, making design decisions that may be different than
those that some clients would have wanted. The lecturer then
suggests the following remedy:
In addition to providing the client with a suitable interface, we
should also allow him to make changes to the implementation
through a separate "meta interface", i.e. we should allow him to
change some (or all) of our design decisions. The lecturer
suggests making such a meta interface using reflection and OO
techniques but doesn't go deep into that.
This reminds me a lot of D's Design by Introspection, and also of
a previous paradigm that Andrei introduced to C++ (Policy Based
Design [2]). C++ and Rust throw the phrase "zero cost
abstractions" around but without good compile-time introspection
support, you can't really get there - as soon as you make a
non-trivial design decision you've limited the user of the
abstraction in some way. For instance, the interfaces of Rust's
HashMap [3] and C++'s unordered_map [4] do not allow for a custom
collision handling policy. The Rust implementation uses Round
Robin hashing while for C++ it isn't specified (as far as I can
see). That said, Phobos doesn't have a hash table implementation
at all so maybe this isn't the best example :=) Still, I think
that D looks much better than them as far as "zero cost
abstractions" go.
[1] https://www.youtube.com/watch?v=5l2wMgm7ZOk
[2] https://en.wikipedia.org/wiki/Policy-based_design
[3] https://doc.rust-lang.org/std/collections/struct.HashMap.html
[4]
http://www.cplusplus.com/reference/unordered_map/unordered_map/
More information about the Digitalmars-d
mailing list