"Austin Ziegler" <halostatue / gmail.com>
> I understand that you believe that freeze
> should freeze the object and everything it contains

Not at all.

It depends totally on the intended semantics of the frozen object -- which
of the (local or non-local, virtual, logical, ... pick your term here)
object state should appear immutable. This, and only this, decides which of
the corresponding instance variables (or array indices, or hash keys or
values, or C-coded structures...) needs to be traversed, and how far, and
which parts of that traversed sub-graph needs to be made immutable, to
implement that freeze correctly for a particular object.