From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: another way to shoot yourself in the foot?
Date: Fri, 20 Jun 2008 12:26:28 +0200
Date: 2008-06-20T12:26:28+02:00 [thread overview]
Message-ID: <p7donb2fivf8$.q6ln9ujbcu1l.dlg@40tude.net> (raw)
In-Reply-To: 54435596-5e7f-4686-a2b7-1e22d7c4b186@p25g2000hsf.googlegroups.com
On Fri, 20 Jun 2008 03:05:29 -0700 (PDT), christoph.grein@eurocopter.com
wrote:
>> --- Factory ads ---
>> with Named;
>> with Some;
>>
>> package Factory is
>> � �function Create(class: String; name: String) return
>> Named.Object'Class;
>> end Factory;
>>
>> --- Factory.adb ---
>>
>> with Ada.Strings.Fixed; use Ada.Strings.Fixed;
>> with Some;
>>
>> package body Factory is
>> � �--- this one is ugly, but in sake of simplicity ...
>> � �function Create(class: String; name: String) return
>> Named.Object'Class is
>> � �begin
>> � � � if Index(class, "Some") /= 0 then
>> � � � � �return Some.Create(name);
>> � � � end if;
>> � � � raise Program_Error with "Unknown class " & class;
>> � �end;
>> end Factory;
>
> Since Some.Object is limited, Factory must construct in place. The
> normal return statement produces a copy (I guess there should be a
> warning here - no compiler bug, since the RM has nothing to say about
> warnings).
Are you sure? Then it would be worse, a language design bug. Anyway a
limited object cannot be copied, so it must be an error if an attempt is
made.
> So use the extended return statement as in Some.Create.
It already does. Did you mean in Factory as well? Like this:
function Create (class: String; name: String) return Named.Object'Class is
begin
if Index (class, "Some") /= 0 then
return X : Named.Object'Class := Some.Create (name);
end if;
raise Program_Error with "Unknown class " & class;
end;
end Create;
I bet it would not help.
-------------------------
Honestly I have no idea how it is managed on the language level. A limited
interface can be implemented by a non-limited object. Thus from the
declaration of a factory function, returning a class-wide of some limited
interface, the compiler cannot decide whether the result should be in-place
or not. Therefore, IMO, it must consider the worst case, i.e. an in-place
"return".
Language lawyers?
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2008-06-20 10:26 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-20 9:03 another way to shoot yourself in the foot? fedya_fedyakoff
2008-06-20 9:34 ` Dmitry A. Kazakov
2008-06-20 9:48 ` fedya_fedyakoff
2008-06-20 10:01 ` Ludovic Brenta
2008-06-20 10:05 ` christoph.grein
2008-06-20 10:26 ` Dmitry A. Kazakov [this message]
2008-06-20 16:12 ` Adam Beneschan
2008-06-20 15:48 ` Adam Beneschan
2008-06-20 19:27 ` Robert A Duff
2008-06-20 23:37 ` Jeffrey R. Carter
2008-06-21 8:56 ` Dmitry A. Kazakov
2008-06-22 20:44 ` Robert A Duff
2008-06-23 7:49 ` Dmitry A. Kazakov
2008-06-24 4:02 ` george.priv
2008-06-24 7:30 ` Dmitry A. Kazakov
2008-06-24 17:16 ` Robert A Duff
2008-06-24 19:15 ` Jeffrey R. Carter
2008-06-24 20:31 ` Robert A Duff
2008-06-24 20:50 ` Ludovic Brenta
2008-06-24 23:02 ` Robert A Duff
2008-06-24 23:42 ` Georg Bauhaus
2008-06-24 21:24 ` Jeffrey R. Carter
2008-06-24 23:24 ` Robert A Duff
2008-06-25 15:07 ` Adam Beneschan
2008-06-24 14:59 ` Adam Beneschan
2008-06-24 16:41 ` Dmitry A. Kazakov
2008-06-24 17:20 ` Robert A Duff
2008-06-24 17:52 ` Dmitry A. Kazakov
2008-06-24 23:35 ` Georg Bauhaus
2008-06-25 8:09 ` Dmitry A. Kazakov
2008-06-25 10:32 ` Georg Bauhaus
2008-06-25 12:06 ` Dmitry A. Kazakov
2008-06-22 20:37 ` Robert A Duff
2008-06-22 21:25 ` Jeffrey R. Carter
2008-07-04 20:52 ` Colin Paul Gloster
2008-07-04 22:15 ` (see below)
2008-07-05 16:06 ` Colin Paul Gloster
2008-07-05 13:38 ` Gary Scott
2008-07-05 16:42 ` Colin Paul Gloster
2008-07-05 19:00 ` Gary Scott
2008-07-09 19:39 ` Colin Paul Gloster
2008-07-09 20:35 ` Richard Maine
2008-07-09 22:49 ` Terence
2008-07-10 1:07 ` Gary Scott
2008-07-10 14:10 ` Colin Paul Gloster
2008-07-10 14:57 ` fj
2008-07-10 16:47 ` Richard Maine
2008-07-10 17:03 ` Dick Hendrickson
2008-07-10 17:26 ` Craig Powers
2008-07-10 19:55 ` James Giles
2008-07-10 20:45 ` Dick Hendrickson
2008-07-10 21:22 ` Richard Maine
2008-07-10 21:29 ` Craig Powers
2008-07-10 20:45 ` Craig Powers
2008-07-10 19:51 ` James Giles
2008-07-11 15:02 ` Colin Paul Gloster
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox