This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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



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>




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]