1 | |
---|
2 | GNU Objective C notes |
---|
3 | ********************* |
---|
4 | |
---|
5 | This document is to explain what has been done, and a little about how |
---|
6 | specific features differ from other implementations. The runtime has |
---|
7 | been completely rewritten in gcc 2.4. The earlier runtime had several |
---|
8 | severe bugs and was rather incomplete. The compiler has had several |
---|
9 | new features added as well. |
---|
10 | |
---|
11 | This is not documentation for Objective C, it is usable to someone |
---|
12 | who knows Objective C from somewhere else. |
---|
13 | |
---|
14 | |
---|
15 | Runtime API functions |
---|
16 | ===================== |
---|
17 | |
---|
18 | The runtime is modeled after the NeXT Objective C runtime. That is, |
---|
19 | most functions have semantics as it is known from the NeXT. The |
---|
20 | names, however, have changed. All runtime API functions have names |
---|
21 | of lowercase letters and underscores as opposed to the |
---|
22 | `traditional' mixed case names. |
---|
23 | The runtime api functions are not documented as of now. |
---|
24 | Someone offered to write it, and did it, but we were not allowed to |
---|
25 | use it by his university (Very sad story). We have started writing |
---|
26 | the documentation over again. This will be announced in appropriate |
---|
27 | places when it becomes available. |
---|
28 | |
---|
29 | |
---|
30 | Protocols |
---|
31 | ========= |
---|
32 | |
---|
33 | Protocols are now fully supported. The semantics is exactly as on the |
---|
34 | NeXT. There is a flag to specify how protocols should be typechecked |
---|
35 | when adopted to classes. The normal typechecker requires that all |
---|
36 | methods in a given protocol must be implemented in the class that |
---|
37 | adopts it -- it is not enough to inherit them. The flag |
---|
38 | `-Wno-protocol' causes it to allow inherited methods, while |
---|
39 | `-Wprotocols' is the default which requires them defined. |
---|
40 | |
---|
41 | |
---|
42 | +initialize |
---|
43 | =========== |
---|
44 | |
---|
45 | This method, if defined, is called before any other instance or class |
---|
46 | methods of that particular class. This method is not inherited, and |
---|
47 | is thus not called as initializer for a subclass that doesn't define |
---|
48 | it itself. Thus, each +initialize method is called exactly once (or |
---|
49 | never if no methods of that particular class is never called). |
---|
50 | Besides this, it is allowed to have several +initialize methods, one |
---|
51 | for each category. The order in which these (multiple methods) are |
---|
52 | called is not well defined. I am not completely certain what the |
---|
53 | semantics of this method is for other implementations, but this is |
---|
54 | how it works for GNU Objective C. |
---|
55 | |
---|
56 | |
---|
57 | Passivation/Activation/Typedstreams |
---|
58 | =================================== |
---|
59 | |
---|
60 | This is supported in the style of NeXT TypedStream's. Consult the |
---|
61 | headerfile Typedstreams.h for api functions. I (Kresten) have |
---|
62 | rewritten it in Objective C, but this implementation is not part of |
---|
63 | 2.4, it is available from the GNU Objective C prerelease archive. |
---|
64 | There is one difference worth noting concerning objects stored with |
---|
65 | objc_write_object_reference (aka NXWriteObjectReference). When these |
---|
66 | are read back in, their object is not guaranteed to be available until |
---|
67 | the `-awake' method is called in the object that requests that object. |
---|
68 | To objc_read_object you must pass a pointer to an id, which is valid |
---|
69 | after exit from the function calling it (like e.g. an instance |
---|
70 | variable). In general, you should not use objects read in until the |
---|
71 | -awake method is called. |
---|
72 | |
---|
73 | |
---|
74 | Acknowledgements |
---|
75 | ================ |
---|
76 | |
---|
77 | The GNU Objective C team: Geoffrey Knauth <gsk@marble.com> (manager), |
---|
78 | Tom Wood <wood@next.com> (compiler) and Kresten Krab Thorup |
---|
79 | <krab@iesd.auc.dk> (runtime) would like to thank a some people for |
---|
80 | participating in the development of the present GNU Objective C. |
---|
81 | |
---|
82 | Paul Burchard <burchard@geom.umn.edu> and Andrew McCallum |
---|
83 | <mccallum@cs.rochester.edu> has been very helpful debugging the |
---|
84 | runtime. Eric Herring <herring@iesd.auc.dk> has been very helpful |
---|
85 | cleaning up after the documentation-copyright disaster and is now |
---|
86 | helping with the new documentation. |
---|
87 | |
---|
88 | Steve Naroff <snaroff@next.com> and Richard Stallman |
---|
89 | <rms@gnu.ai.mit.edu> has been very helpful with implementation details |
---|
90 | in the compiler. |
---|
91 | |
---|
92 | |
---|
93 | Bug Reports |
---|
94 | =========== |
---|
95 | |
---|
96 | Please read the section `Submitting Bugreports' of the gcc manual |
---|
97 | before you submit any bugs. |
---|