Newsgroups: comp.std.c++
Path: utzoo!utgpu!craig
From: craig@gpu.utcs.utoronto.ca (Craig Hubley)
Subject: Re: Dynamic type loss considered harmless
Message-ID: <1991Mar3.005515.18159@gpu.utcs.utoronto.ca>
Organization: UTCS Public Access
References: <1991Feb19.051123.5198@gpu.utcs.utoronto.ca> <27C2D4B8.3AD3@tct.uucp> <1991Feb25.201923.14554@gpu.utcs.utoronto.ca> <27CD13B1.649B@tct.uucp>
Date: Sun, 3 Mar 1991 00:55:15 GMT

In article <27CD13B1.649B@tct.uucp> chip@tct.uucp (Chip Salzenberg) writes:
>Adding dynamic type information would entail significant changes to
>the meaning of "type".  Under current rules, a |Base| that is part of
>a |Derived| is indistinguishable from a plain |Base|.  Inventing a
>distinction between them would require rethinking the type conversion
>rules, especially in view of multiple inheritance.

You refer only to the byte storage that is associated with the type Base.

In behavior terms, the distinction is already there.  I can build a Derived 
that acts very similarly, or totally differently from its Base, through 
private inheritance, hiding members, or other means.  With virtual inheritance,
I can decide that several functions may share one copy of the Base part of
the object.

The distinction only matters if one is going to invoke type-specific behavior
in an application-specific context.  The type tag is necessary for those
cases.

>attitude that the feature is almost indepensible.  IMHO, it's not.

Every other object-oriented language has it, so burden of proof is on you.

>>Those other uses can be supported without requiring every object to carry
>>a type tag through to runtime.
>
>I don't see how, unless you are referring to the optimization that
>objects without virtual function tables do not maintain a type tag.

I do.  And objects that don't have virtual functions don't have any
potentially type-specific functionality.  So NO additional type tags
are required - we only want to see what's already there.

>>As it stands, you cannot add any type- and context-specific functionality 
>>to an object without access to its source code.  This greatly restricts
>>reusability, to a level between that of say, Eiffel, and that of Ada.
>
>"Well, don't do that, then."  If I can't modify the source code to a
>class, I may use use it, but I usually won't derive from it.

Then you will never extend anyone else's code, use a framework, etc.  It
seems we have found the source of our disagreement.

You want a "better C".  We want a "reusable library language".  I would
suggest that if we can get what we want without imposing any overhead on
you (in fact removing some), you should stop arguing with us.  :)

>>I do not consider this sufficient to support a components industry, as it
>>leaves too many ways for producing programmers to cut off options for those
>>building on their code.
>
>IMHO, any attempt to distribute binary-only C++ components intended
>for use _as_base_classes_ is probably doomed to failure in all but the

If true, I would suggest that C++ itself is probably doomed to failure too.
No need to argue this point, we have been over it already.
 
>simplest cases, for reasons that go far beyond the lack of dynamic
>typing.  Adding a type tag won't solve the problems of non-virtual
>member functions and private (as opposed to protected) members.

Why are private members a problem ?  The guarantee a programmer makes in
providing public members are that they are sufficient to do whatever the
object is supposed to do - access to privates is in principle unnecessary.
If this is untrue in some cases, then the member should be protected or
(more likely) the functionality redefined.

>So C++ isn't a good language for binary components; so what?  If I
>want Objective-C, I know where to find it.

As I say, we've been over this already.  Objective-C has its own problems.

I would think you are in a minority in not wanting C++ to support binary
components.  I would appreciate hearing from others on this point.  On
this question I think we must agree to disagree.
-- 
  Craig Hubley   "...get rid of a man as soon as he thinks himself an expert."
  Craig Hubley & Associates------------------------------------Henry Ford Sr.
  craig@gpu.utcs.Utoronto.CA   UUNET!utai!utgpu!craig   craig@utorgpu.BITNET
  craig@gpu.utcs.toronto.EDU   {allegra,bnr-vpa,decvax}!utcsri!utgpu!craig
