|GNU Objective C notes
|This document is to explain what has been done, and a little about how
|specific features differ from other implementations. The runtime has
|been completely rewritten in gcc 2.4. The earlier runtime had several
|severe bugs and was rather incomplete. The compiler has had several
|new features added as well.
|This is not documentation for Objective C, it is usable to someone
|who knows Objective C from somewhere else.
|Runtime API functions
|The runtime is modeled after the NeXT Objective C runtime. That is,
|most functions have semantics as it is known from the NeXT. The
|names, however, have changed. All runtime API functions have names
|of lowercase letters and underscores as opposed to the
|`traditional' mixed case names.
| The runtime api functions are not documented as of now.
|Someone offered to write it, and did it, but we were not allowed to
|use it by his university (Very sad story). We have started writing
|the documentation over again. This will be announced in appropriate
|places when it becomes available.
|Protocols are now fully supported. The semantics is exactly as on the
|NeXT. There is a flag to specify how protocols should be typechecked
|when adopted to classes. The normal typechecker requires that all
|methods in a given protocol must be implemented in the class that
|adopts it -- it is not enough to inherit them. The flag
|`-Wno-protocol' causes it to allow inherited methods, while
|`-Wprotocols' is the default which requires them defined.
|This method, if defined, is called for each class and category
|implementation when the class is loaded into the runtime. This method
|is not inherited, and is thus not called for a subclass that doesn't
|define it itself. Thus, each +load method is called exactly once by
|the runtime. The runtime invocation of this method is thread safe.
|This method, if defined, is called before any other instance or class
|methods of that particular class. For the GNU runtime, this method is
|not inherited, and is thus not called as initializer for a subclass that
|doesn't define it itself. Thus, each +initialize method is called exactly
|once by the runtime (or never if no methods of that particular class is
|never called). It is wise to guard against multiple invocations anyway
|to remain portable with the NeXT runtime. The runtime invocation of
|this method is thread safe.
|This is supported in the style of NeXT TypedStream's. Consult the
|headerfile Typedstreams.h for api functions. I (Kresten) have
|rewritten it in Objective C, but this implementation is not part of
|2.4, it is available from the GNU Objective C prerelease archive.
| There is one difference worth noting concerning objects stored with
|objc_write_object_reference (aka NXWriteObjectReference). When these
|are read back in, their object is not guaranteed to be available until
|the `-awake' method is called in the object that requests that object.
|To objc_read_object you must pass a pointer to an id, which is valid
|after exit from the function calling it (like e.g. an instance
|variable). In general, you should not use objects read in until the
|-awake method is called.
|The GNU Objective C team: Geoffrey Knauth <email@example.com> (manager),
|Tom Wood <firstname.lastname@example.org> (compiler) and Kresten Krab Thorup
|<email@example.com> (runtime) would like to thank a some people for
|participating in the development of the present GNU Objective C.
|Paul Burchard <firstname.lastname@example.org> and Andrew McCallum
|<email@example.com> has been very helpful debugging the
|runtime. Eric Herring <firstname.lastname@example.org> has been very helpful
|cleaning up after the documentation-copyright disaster and is now
|helping with the new documentation.
|Steve Naroff <email@example.com> and Richard Stallman
|<firstname.lastname@example.org> has been very helpful with implementation details
|in the compiler.
|Please read the section `Submitting Bugreports' of the gcc manual
|before you submit any bugs.