|
Unix Programming - Basics of the Unix Philosophy - Rule of Representation: Fold knowledge into data,
Rule of Representation: Fold knowledge into data,
soprogram logic can be stupid and robust.
Even the simplest procedural logic is hard for humans to verify,
but quite complex data structures are fairly easy to model and reason
about. To see this, compare the expressiveness and explanatory power
of a diagram of (say) a fifty-node pointer tree with a flowchart of a
fifty-line program. Or, compare an array initializer expressing a conversion
table with an equivalent switch statement. The difference in
transparency and
clarity is dramatic. See Rob Pike's Rule 5.
Data is more tractable than program logic. It follows that where
you see a choice between complexity in data structures and
complexity in code, choose the former. More: in evolving a design,
you should actively seek ways to shift complexity from code to
data.
The Unix community did not originate this insight, but a lot of
Unix code displays its influence. The
C language's facility at
manipulating pointers, in particular, has encouraged the use of
dynamically-modified reference structures at all levels of coding from
the kernel upward. Simple pointer chases in such structures frequently
do duties that implementations in other languages would instead have
to embody in more elaborate procedures.
(We also cover these techniques in Chapter9.)
[an error occurred while processing this directive]
|