[wwwdocs]: Updated gcc-4.6/changes.html for Objective-C/Objective-C++

IainS developer@sandoe-acoustics.co.uk
Wed Nov 17 10:53:00 GMT 2010


On 17 Nov 2010, at 10:13, Nicola Pero wrote:

>
>>> This patch updates the wwwdocs with the changes that were done
>>> for Objective-C and Objective-C++ for GCC 4.6.  There's quite a lot
>>> of stuff :-) ... and I didn't include all the bugfixes.
>>
>> maybe we don't need to include all
>
> I don't see why not - interested users benefit a lot from well- 
> formatted
> and well-organized lists of changes.

I meant "I don't think we need mention all bug-fixes" ;-)

[Of course, the enhancements are very important - I was not suggesting  
to leave any out!]

>  They are usually very eager to read
> such a list (as confirmed by the fact that we got people posting on  
> the
> mailing list asking precisely for a list of the Objective-C changes  
> in GCC 4.6.0!).
> They shouldn't have to go through ChangeLogs to figure out if ObjC  
> method
> arguments are now supported or not. ;-)
>
> Users who are not interested in Objective-C/Objective-C++ will just  
> skip
> the section.
>
>> - but we might mention that ObjC* now supports LTO.
>> and,  perhaps that FSF gcc/ObjC* can, once again, build m32 NeXT
>> runtime on Darwin.
>
> Ok - good idea - here's a modified patch where I added a mention of  
> these.
> I think the "can build m32 NeXT runtime on Darwin" would be very  
> important/interesting
> for users, so I put it towards the top of the list ... in fact, at  
> the very top,
> just after the mention of the command-line argument changes.
>
> I wasn't aware of changes in Objective-C wrt LTO (other than some  
> bugfixes)
> but presumably these happened 6 months ago or so when I wasn't  
> paying attention
> to GCC.  Anyway, I added a mention of that as you suggested.

well, this is a bug-fix - but an important one.

>
> (the revised patch below also fixes a couple of places where I had  
> written 'GNU Objective-C
> library' instead of 'GNU Objective-C runtime library')
>
> Ok to commit ?
>
> Thanks
>
> <h3 id="objective-c">Objective-C and Objective-C++</h3>
>
>  <ul>
>    <li>The <code>-fobjc-excceptions</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>
>

move this ...
>    <li>GCC can now be used to build Objective-C and Objective-C++
>    software that uses the m32 NeXT runtime on Darwin.</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 parsed both
>    in Objective-C and Objective-C++, but are ignored.</li>

... to here and maybe re-word a little:

<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>GCC now supports LTO when compiling Objective-C and
>    Objective-C++.</li>

??? maybe  ==

<li>A serious bug was fixed that was preventing LTO when compiling
  Objective-C and  Objective-C++.</li>

== or perhaps a separate section for 'important' bug-fixes (as I said,  
we could leave that for now).

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



More information about the Gcc-patches mailing list