| |
| 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. |