123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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
- =========
- 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.
- +load
- ===========
- 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.
- +initialize
- ===========
- 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.
- Passivation/Activation/Typedstreams
- ===================================
- 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.
- Acknowledgements
- ================
- The GNU Objective C team: Geoffrey Knauth <gsk@marble.com> (manager),
- Tom Wood <wood@next.com> (compiler) and Kresten Krab Thorup
- <krab@iesd.auc.dk> (runtime) would like to thank a some people for
- participating in the development of the present GNU Objective C.
- Paul Burchard <burchard@geom.umn.edu> and Andrew McCallum
- <mccallum@cs.rochester.edu> has been very helpful debugging the
- runtime. Eric Herring <herring@iesd.auc.dk> has been very helpful
- cleaning up after the documentation-copyright disaster and is now
- helping with the new documentation.
- Steve Naroff <snaroff@next.com> and Richard Stallman
- <rms@gnu.ai.mit.edu> has been very helpful with implementation details
- in the compiler.
- Bug Reports
- ===========
- Please read the section `Submitting Bugreports' of the gcc manual
- before you submit any bugs.
|