This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [wwwdocs]: Updated gcc-4.6/changes.html for Objective-C/Objective-C++
>> <li>Objective-C 2.0 class and protocol attributes are parsed both
>> in Objective-C and Objective-C++, but are ignored.</li>
>
> If the words are not implemented apply, then I prefer the phrasing, <li>Objective-C 2.0 class and protocol attributes are not implemented, presently they are just ignored.
Thanks a lot for your feedback. I have incorporated both IainS's and Mike's changes (including some changes
that IainS suggested in private emails). :-)
Hopefully I'll finish the implementation of Objective-C 2.0 class and protocol attributes
before the release and we can remove the clumsy sentence about these being not implemented but ignored. ;-)
At the end of this email the exact text I committed. There should be no surprises
but I'm happy to make more changes if anyone has any additional suggestions. :-)
I actually would like to maybe suggest that we put a two line summary on this on the GCC
news front page - mostly to make a statement about FSF GCC's commitment to support Objective-C
going forward. Some people keep rumouring about the FSF GCC's lack of commitment to Objective-C.
These rumours are in my opinion unfounded as I found everyone in GCC to be very helpful when I
started to work on improving the Objective-C compiler and I'd like to suggest that a good
way to stop the rumours would be to show some official project support for Objective-C on
the front page. :-)
Thanks
<h3 id="objective-c">Objective-C and Objective-C++</h3>
<ul>
<li>The <code>-fobjc-exceptions</code> flag is now required to
enable Objective-C exception and synchronization syntax
(introduced by the keywords <code>@try</code>,
<code>@catch</code>, <code>@finally</code> and
<code>@synchronized</code>).</li>
<li>A number of Objective-C 2.0 features and extensions are now
supported by GCC. These features are enabled by default; you can
disable them by using the new <code>-fobjc-std=objc1</code>
command-line option.</li>
<li>The Objective-C 2.0 dot-syntax is now supported both in
Objective-C and Objective-C++. The dot-syntax is an alternative
syntax for using getters and setters; <code>object.count</code> is
automatically converted into <code>[object count]</code> or
<code>[object setCount: ...]</code> depending on context; for
example <code>if (object.count > 0)</code> is automatically
compiled into the equivalent of <code>if ([object count] >
0)</code> while <code>object.count = 0;</code> is automatically
compiled into the equivalent ot <code>[object setCount:
0];</code>. The dot-syntax can be used with instance and class
objects and with any setters or getters, no matter if they are
part of a declared property or not.</li>
<li>Objective-C 2.0 declared properties are now supported both in
Objective-C and Objective-C++. Declared properties are declared
using the new <code>@property</code> keyword, and are most
commonly used in conjunction with the new Objective-C 2.0
dot-syntax. The <code>nonatomic</code>, <code>readonly</code>,
<code>readwrite</code>, <code>assign</code>, <code>retain</code>,
<code>copy</code>, <code>setter</code> and <code>getter</code>
attributes are all supported. Marking declared properties with
<code>__attribute__ ((deprecated))</code> is supported too.</li>
<li>The Objective-C 2.0 <code>@synthesize</code> and
<code>@dynamic</code> keywords are supported both in Objective-C
and Objective-C++. <code>@synthesize</code> causes the compiler
to automatically synthesize a declared property, while
<code>@dynamic</code> is used to disable all warnings for a
declared property for which no implementation is provided at
compile time. Synthesizing declared properties requires runtime
support in most useful cases; to be able to use it with the GNU
runtime, appropriate helper functions have been added to the GNU
Objective-C runtime ABI, and are implemented by the GNU
Objective-C runtime library shipped with GCC.</li>
<li>The Objective-C 2.0 fast enumeration syntax is supported in
Objective-C. This is currently not yet available in
Objective-C++. Fast enumeration requires support in the runtime,
and such support has been added to the GNU Objective-C runtime
library (shipped with GCC).</li>
<li>The Objective-C 2.0 <code>@optional</code> keyword is
supported in Objective-C and Objective-C++. This keyword allows
you to mark methods or properties in a protocol as optional as
opposed to required.</li>
<li>The Objective-C 2.0 <code>@package</code> keyword is
supported in Objective-C and Objective-C++. This keyword has
currently the same effect as the <code>@public</code>
keyword.</li>
<li>Objective-C 2.0 method attributes are supported both in
Objective-C and Objective-C++. Currently the supported attributes
are <code>deprecated</code>, <code>sentinel</code>,
<code>noreturn</code> and <code>format</code>.</li>
<li>Objective-C 2.0 method argument attributes are supported
both in Objective-C and Objective-C++. The most widely used
attribute is <code>unused</code>, to mark an argument as unused in
the implementation.</li>
<li>Objective-C 2.0 class and protocol attributes are not
implemented, presently they are just ignored.</li>
<li>As a result of these enhancements, GCC can now be used to
build Objective-C and Objective-C++ software that uses Foundation
and other important system frameworks with the NeXT runtime on
Darwin 9 and Darwin 10 (OSX 10.5 and 10.6). Currently this is for
m32 code only.</li>
<li>Many bugs in the Objective-C and Objective-C++ compiler have
been fixed in this release; in particular, LTO can now be used
when compiling Objective-C and Objective-C++ and the Objective-C
and Objective-C++ parsers are much more robust in dealing with
invalid code.</li>
</ul>
<h4>Runtime Library (libobjc)</h4>
<ul>
<li>The GNU Objective-C runtime library now defines the macro
<code>__GNU_LIBOBJC__</code> (with a value that is increased at
every release where there is any change to the API) in
<code>objc/objc.h</code> making it easy to determine if the GNU
Objective-C runtime library is being used, and if so, which
version. Previous versions of the GNU Objective-C runtime library
(and other Objective-C runtime libraries such as the Apple one) do
not define this macro.</li>
<li>A new Objective-C 2.0 API, almost identical to the one
implemented by the Apple Objective-C runtime, has been implemented
in the GNU Objective-C runtime library. The new API hides the
internals of most runtime structures but provides a more extensive
set of functions to operate on them. It is much easier, for
example, to create or modify classes at runtime. The new API also
makes it easier to port software from Apple to GNU as almost no
changes should be required. The old API is still supported for
backwards compatibility; including the old
<code>objc/objc-api.h</code> header file automatically selects the
old API, while including the new <code>objc/runtime.h</code>
header file automatically selects the new API. Support for the
old API is being phased out and upgrading the software to use the
new API is strongly recommended. To check for the availability of
the new API, the <code>__GNU_LIBOBJC_</code> macro can be used as
older versions of the GNU Objective-C runtime library, which do
not support the new API, do not define such a macro.</li>
<li>Runtime support for <code>@synchronized</code> has been added
to the runtime.</li>
<li>Runtime support for Objective-C 2.0 synthesized property
accessors has been added to the runtime.</li>
<li>Runtime support for Objective-C 2.0 fast enumeration has been
added to the runtime.</li>
</ul>