[net.lang] Objective-C??

graeme@cheviot.uucp (Graeme Dixon) (10/03/85)

Has anybody any experience of Objective-C from PPI?

Does it live up to the promises made?


Mail me and I'll summarise to the net.


Objective-C is a trademoark of PPI.

-- 

Graeme Dixon -
  Computing Laboratory, University of Newcastle upon Tyne, UK

  ARPA  : graeme%cheviot.newcastle.ac.uk@ucl-cs.arpa
  JANET : graeme@uk.ac.newcastle.cheviot
  UUCP  : <UK>!ukc!cheviot!graeme

riferguson@watmath.UUCP (Rob Ferguson [MFCF]) (10/09/85)

About a year ago, I was part of a research team which evaluated Objective-C 
as part of a project investigating software development tools for large
applications. I wrote a report on Objective-C and its potential usefulness
which I can probably exhume if anyone is that interested, but I'll summarize
the basic conclusions (as I remember them) here.


[Disclaimer: it's been over a year since I looked at this, and even then
my experience was much more limited than I would have liked. This is also
discussing Objective-C as it was at that time; I have no idea if the product 
has been improved or changed in the interval...]

[Disclaimer #2: I'm going to assume that the reader understands the basics
of object-oriented programming; it'd be too long to explain all that here...]

_________________


Objective-C is a pre-processor for the C language which claims to allow
object-oriented programming (a la Smalltalk) in a more traditional
environment than is normally associated with object-oriented systems.
The basic claim of PPI is that Objective-C provides the efficiency of
traditional programming languages coupled with the ease of use and
development associated with the object-oriented paradigm (e.g.
polymorphic code and inheritance, data abstraction, etc.).

Well, as with all sweeping claims like that, it's both true and false. 
First, the good points:

	- Objective-C works. You really can produce working C programs
	  which have "message passes" embedded in them. The inheritance
	  mechanism works, too.

	- It is easy (syntactically) to switch from writing normal C code
	  to writing code which (conceptually, at least) passes messages
	  to objects.

	- The mechanism for compiling an Objective-C program is identical
	  to that of compiling a regular C program (you type "objcc" as
	  opposed to "cc"). What actually happens is that the Objective-C
	  compiler is invoked, which produces a  "normal" .c file; this 
	  second file is then fed into 'cc'. The compile times are not
	  slower by any appreciable amount than those which would be
	  produced by feeding a normal C file of the same size to 'cc'.

	- My dealings with the company itself were great. Prompt service 
	  and replies to technical questions -- they seemed to be genuinely 
	  interested in how things were going. 


There are lots of bad points, however:

	- the integration between "normal" C and Objective-C is poor.
	  If you have an "string" object (i.e. something which you
	  could use as the receiver of messages recognized by the
	  "String" class), you have to explicitly convert it into a
	  "normal" C string before you can use it for anything like
	  strlen.  I suppose this is a reasonably obvious fallout of
	  having both types of programming paradigm available, but when
	  you are writing code, the mental context switches are very
	  annoying ("Is str an object-string or a string-string?").

	- the supplied class library is trash - poorly designed and
	  poorly implemented. The interfaces conform to selected parts
	  of the Blue Book ["Smalltalk-80, The Language and its
	  Implementation"], but the implementations differ greatly and
	  are generally much poorer.  We threw the library away, except
	  for the most basic things like the "Object" class (which we didn't
	  dare to rewrite). To PPI's credit, at least they supplied us
	  with the Objective-C source to all the class libraries.

	- Objective-C doesn't come with any sort of browser or other
	  online interface to the class library. You don't realize what
	  you are missing until you use Smalltalk for a while...

	- when writing an Objective-C program, the user must declare
	  not only the classes which he references in the program
	  (not unreasonable) but also all classes which are referenced
	  by the classes which he references, and so on (very unreasonable).
	  In other words, the programmer must know how all the classes 
	  which he references are implemented (!). This sort of nullifies
	  the claims of data abstraction that PPI makes.
	  [ Note: I recall PPI saying they were going to fix this. I don't
	    know if they have or not. ]

	- there is no source level debugging facility for Objective-C
	  programs. One can use the "normal" C files which are produced
	  by the Objective-C compiler for debugging, but they're cryptic,
	  to say the least.

	- The syntax of the object-oriented parts of Objective-C is one 
	  of the most aesthically unpleasing things I have ever seen.

	- The actual implementation of message passes involve a call to 
	  a routine called _message, which is an assembler hack. Objective-C
	  must therefore be specifically tuned to the machine and C compiler
	  that you are going to use it with.


My only fundamental problem with Objective-C, though, had to do with the
lack of compatablility between the two different ways of programming:
Algol-style vs. Smalltalk-style. It can be very awkward switching contexts
continually -- and you must, in order to interface with the Unix system
calls (for example). I think all the other problems that I've mentioned can 
either be easily solved or aren't all that important; the compatability
problem is intrinsic to the entire idea of Objective-C, however.


----------------

Hope this answers some of the recent questions about Objective-C and PPI. 


Cheers,

rif

.......................

Rob Ferguson 	{allegra,clyde,decvax,ihnp4,linus,utzoo}!watmath!riferguson