DAB> This is the so-called "class instance variable", which is really just
DAB> "an instance variable that happens to belong to a Class object". It's
DAB> common to use the phrase "class instance variable", but it's just a
DAB> way of clarifying what you mean. There's no separate "class instance
DAB> variable" language-level construct.

So ... let's see if I get this.

class X
  # "equivalent" to C++'s
  # class X {
  #   protected:
  #   static sometype at_at_x = 3;
  # };
  @@x = 3

  # "equivalent" to C++'s
  # class X {
  #   private:
  #   sometype at_x;
  #   X::X() {at_x =3;}
  # };
  # at_x is not "inheritable" since it is private.
  @x = 3


  # No equivalent notion in C++.  It's just a temporary variable
  x = 3
end



- - - -



It appears to me that "class" is a jumble of two kinds of very
different semantics.

There is the notion of a class as a template for instances of the
class.

Then there is a very different notion of a sorta static class that
has it's own variables that do not propagate to instances; and may
(@@x) or may not (@x) propagate and be accessile to static subclasses inherited from
the static superclass.



A lot to wrap one's head around.  I assume that there are good design
reasons to jumble these two concepts together in the semantics of
"class".