From: Ziemowit Laski <zlaski@apple.com>
To: gcc mailing list <gcc@gcc.gnu.org>
Cc: Matt Austern <austern@apple.com>
Subject: Re: generalized lvalues
Date: Thu, 18 Nov 2004 23:36:00 -0000 [thread overview]
Message-ID: <852F83A5-39B9-11D9-8317-00039390FFE2@apple.com> (raw)
In-Reply-To: <8AD5AEEF-3914-11D9-8BD2-000A95BCF344@apple.com>
Just to give a little background: the reason for Matt's (and Apple's)
renewed interest in being able to cast lvalues (so that they retain
their lvalueness) is that we realized (somewhat belatedly, I admit)
that removing this feature may cause problems for us. The first
problem is one of legacy code with lvalue casts, which I'm sure all of
us share to some degree regardless of target platform.
The second problem has to do with emerging garbage collection (GC)
support in ObjC/ObjC++ (which, of course, we hope to offer back to the
FSF once the design gets baked in, though it is not ready for prime
time just yet). It turns out that lvalue casts are extremely useful in
this context, e.g.:
void *objPtr;
:
(__strong id)objPtr = someOtherObj;
Since objPtr is a plain-vanilla 'void *', it is not in general subject
to the new NeXT runtime GC regime. However, if we happen to assign a
pointer to an ObjC instance to it, then we do want to give a hint to
the compiler that objPtr _should_ be tracked by GC. The most
straighforward -- and intuitive -- way of doing this is precisely via a
cast applied to the lvalue, as seen above (with '__strong' expanding to
an appropriate attribute). While we have investigated some syntactic
alternatives to the cast in light of the impending lvalue cast removal,
all of them are counterintuitive in that they fail to express what is
being done -- namely, altering the type of a variable for a particular
assignment. (The GC-enabled compiler will look at the type of the lhs
to decide whether to emit a write-barrier call.)
So, at least as far as Apple is concerned, it would be great if the
casts-as-lvalues functionality were retained in GCC. :-) Of course, if
the compiler is run in -strict/-pedantic/-ansi/whatever mode, it should
be free to reject this construct if it is not in the appropriate
standard. It's just that there are C/C++ usage idioms out there (as
non-standard as they may be) for which the lvalue cast is a better
semantic fit than any alternative.
I'll attempt to address the various technical reasons for removing
lvalue casts in a separate e-mail. For the time being, though, I just
wanted to express a partisan viewpoint on the issue. :-)
Thanks,
--Zem
--------------------------------------------------------------
Ziemowit Laski 1 Infinite Loop, MS 301-2K
Mac OS X Compiler Group Cupertino, CA USA 95014-2083
Apple Computer, Inc. +1.408.974.6229 Fax .5477
next prev parent reply other threads:[~2004-11-18 23:28 UTC|newest]
Thread overview: 116+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-18 3:50 Matt Austern
2004-11-18 3:52 ` Andrew Pinski
2004-11-18 4:01 ` Andrew Pinski
2004-11-18 4:18 ` Daniel Berlin
2004-11-18 4:21 ` Andrew Pinski
2004-11-18 4:27 ` Matt Austern
2004-11-18 7:15 ` Joe Buck
2004-11-18 7:37 ` Matt Austern
2004-11-18 13:17 ` Giovanni Bajo
2004-11-18 17:57 ` Joe Buck
2004-11-18 18:28 ` Mike Stump
2004-11-18 18:44 ` Joe Buck
2004-11-19 1:39 ` Mike Stump
2004-11-19 4:52 ` Matt Austern
2004-11-19 22:24 ` Michael Matz
2004-11-19 22:30 ` Robert McNulty Junior
2004-11-20 1:00 ` Ziemowit Laski
2004-11-20 1:20 ` Joe Buck
2004-11-20 1:51 ` Ziemowit Laski
2004-11-20 5:04 ` Joe Buck
2004-11-20 5:17 ` Ziemowit Laski
2004-11-22 20:54 ` generalized lvalues -- patch outline Ziemowit Laski
2004-11-22 21:01 ` Andrew Pinski
2004-11-22 21:11 ` Ziemowit Laski
2004-11-22 21:39 ` Matt Austern
2004-11-22 22:11 ` Joe Buck
2004-11-22 22:12 ` Matt Austern
2004-11-23 0:06 ` Gabriel Dos Reis
2004-11-23 0:04 ` Gabriel Dos Reis
2004-11-23 0:27 ` Mike Stump
2004-11-24 20:40 ` Kai Henningsen
2004-11-23 0:11 ` Mark Mitchell
2004-11-23 1:19 ` Matt Austern
2004-11-23 1:26 ` Mark Mitchell
2004-11-23 1:32 ` Dale Johannesen
2004-11-23 1:42 ` Mark Mitchell
2004-11-23 1:45 ` Andrew Pinski
2004-11-23 1:55 ` Dale Johannesen
2004-11-23 1:56 ` Andrew Pinski
2004-11-23 2:12 ` Dale Johannesen
2004-11-23 2:10 ` Marcus G. Daniels
2004-11-23 9:43 ` Eric Botcazou
2004-11-23 18:27 ` Aaron W. LaFramboise
2004-11-22 21:23 ` Nathan Sidwell
2004-11-22 22:33 ` Ziemowit Laski
2004-11-23 0:09 ` Gabriel Dos Reis
2004-11-23 9:54 ` Nathan Sidwell
2004-11-23 13:35 ` Michael Matz
2004-11-23 14:56 ` Daniel Berlin
2004-11-23 15:02 ` Michael Matz
2004-11-23 15:15 ` Andrew Pinski
2004-11-23 15:47 ` Michael Matz
2004-11-23 15:56 ` Gabriel Dos Reis
2004-11-23 15:50 ` Steve Naroff
2004-11-23 15:51 ` Gabriel Dos Reis
2004-11-23 16:50 ` Eric Botcazou
2004-11-23 17:01 ` Paul Koning
2004-11-23 17:16 ` Andreas Schwab
2004-11-23 18:03 ` Thomas Kunert
2004-11-23 18:30 ` Nathan Sidwell
2004-11-23 18:57 ` Thomas Kunert
2004-11-23 21:21 ` Paul Koning
2004-11-23 21:52 ` Thomas Kunert
2004-11-23 15:51 ` Gabriel Dos Reis
2004-11-23 16:12 ` Michael Matz
2004-11-23 16:31 ` Richard Guenther
2004-11-23 16:44 ` Andreas Schwab
2004-11-23 20:16 ` Gabriel Dos Reis
2004-11-23 15:01 ` Nathan Sidwell
2004-11-23 15:09 ` Michael Matz
2004-11-23 19:11 ` Matt Austern
2004-11-23 21:10 ` Eric Botcazou
2004-11-23 21:34 ` Ziemowit Laski
2004-11-23 22:09 ` Joseph S. Myers
2004-11-23 22:23 ` Eric Botcazou
2004-11-23 22:27 ` Joseph S. Myers
2004-11-24 0:05 ` Eric Botcazou
2004-11-24 0:07 ` Steven Bosscher
2004-11-24 0:32 ` Joseph S. Myers
2004-11-25 8:41 ` Ian Lance Taylor
2004-11-25 20:41 ` Gabriel Dos Reis
2004-11-25 21:54 ` Matt Austern
2004-11-25 23:27 ` Gabriel Dos Reis
2004-11-29 18:06 ` Joe Buck
2004-11-29 18:57 ` Matt Austern
2004-11-23 23:27 ` Gabriel Dos Reis
2004-11-23 22:24 ` Nathan Sidwell
2004-11-23 0:07 ` Gabriel Dos Reis
2004-11-24 20:43 ` Kai Henningsen
2004-11-24 23:09 ` Gabriel Dos Reis
2004-11-24 23:17 ` Zack Weinberg
2004-11-22 21:31 ` Richard Henderson
2004-11-23 0:11 ` Gabriel Dos Reis
2004-11-23 0:03 ` Jonathan Lennox
2004-11-20 1:40 ` generalized lvalues Joseph S. Myers
2004-11-18 19:11 ` Alex Rosenberg
2004-11-18 4:24 ` Matt Austern
2004-11-18 5:33 ` Dale Johannesen
2004-11-18 17:14 ` Fariborz Jahanian
2004-11-18 18:23 ` Joe Buck
2004-11-19 0:20 ` Ziemowit Laski
2004-11-19 0:40 ` Steven Bosscher
2004-11-19 1:20 ` Joe Buck
2004-11-19 2:00 ` Ziemowit Laski
2004-11-18 23:36 ` Ziemowit Laski [this message]
2004-11-18 23:37 ` Matt Austern
2004-11-18 23:49 ` Zack Weinberg
2004-11-19 1:38 ` Ziemowit Laski
2004-11-19 2:52 ` Zack Weinberg
2004-11-19 3:56 ` Ziemowit Laski
2004-11-19 4:22 ` Zack Weinberg
2004-11-19 13:10 ` Nathan Sidwell
2004-11-19 21:58 ` Ziemowit Laski
2004-11-18 23:44 ` Andrew Pinski
2004-11-18 23:45 ` Joe Buck
2004-11-25 4:42 ` Aaron W. LaFramboise
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=852F83A5-39B9-11D9-8317-00039390FFE2@apple.com \
--to=zlaski@apple.com \
--cc=austern@apple.com \
--cc=gcc@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).