Newsgroups: comp.object,comp.lang.c++,comp.lang.eiffel,comp.lang.java,comp.lang.objective-c,comp.lang.sather,comp.lang.smalltalk
Path: cantaloupe.srv.cs.cmu.edu!bb3.andrew.cmu.edu!newsfeed.pitt.edu!gatech!news.mathworks.com!uunet!in1.uu.net!ftpbox!mothost!schbbs!news
From: shang@corp.mot.com (David L. Shang)
Subject: Re: # ANNOUNCEMENT #: The Developer - A New Object-Oriented Language And IDE
Reply-To: shang@corp.mot.com
Organization: MOTOROLA 
Date: Mon, 8 Jul 1996 15:41:59 GMT
Message-ID: <1996Jul8.154159.12589@schbbs.mot.com>
References: <31DE50B6.1C5E@earthlink.net>
Sender: news@schbbs.mot.com (SCHBBS News Account)
Nntp-Posting-Host: 129.188.128.126
Lines: 37
Xref: glinda.oz.cs.cmu.edu comp.object:51598 comp.lang.c++:198888 comp.lang.eiffel:15150 comp.lang.java:66776 comp.lang.objective-c:5351 comp.lang.sather:2806 comp.lang.smalltalk:40453

In article <31DE50B6.1C5E@earthlink.net> Jon Rosen <jfrx@earthlink.net> writes:
> Mitsu,
> 
> I am going to spare everyone a replication of your long post.  Suffice 
> it to say that I think a lot of your reasoning stems from a lack of real 
> understanding about how true OOP languages need to work.  Many of the 
> problems of C++ (and indeed of Obj-C and Java as well) are that they are 
> hybrid languages.  The lack of GC in C++ and Obj-C is mostly caused by 
> the difficulty in resolving the difference between true object 
> references, non-object references (permitted in both C++ and Obj-C) and 
> internal object references (i.e., direct references to data that is 
> supposed to be encapsulated inside an object which is also permitted in 
> both C++ and Obj-C).  This makes it almost impossible to do a real GC 
> that works in all cases effectively and efficiently. 

Exactly. When object references are object themselves, the problem of GC
will go away. The only language that solves the GC dilemma is Transframe.
An abstract referential class defines a uniform protocol for all object 
references. Concrete referential classes (subclasses) are derived to
implement the protocol. Object references with GC is one specific kind
of references (smart references), which is the default choice for all
declared object references (except for references to primitive objects,
which uses static references) in the program. C++ pointers are another
specific kind of references which are used at users' own risk and
must be used carefully and be used only for system programming (e.g.
device driver in embedded systems). If you think that GC is not
enough, you'll be able to develop a new protocol (by subclassing).
Something cannot be garbage collected even there is no references.
Examples are persistent objects, network objects, etc. 

The good thing is that all object references support a uniform
protocol. Simply, "." to access member objects/classes, and ":="
for reference attachments.

David Shang


