comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: Re: Self pointer in limited record
Date: Thu, 05 Jul 2007 03:35:54 -0700
Date: 2007-07-05T03:35:54-07:00	[thread overview]
Message-ID: <1183631754.917400.257350@n2g2000hse.googlegroups.com> (raw)
In-Reply-To: <juo4g99n23mu$.1g739a1n21zi2.dlg@40tude.net>

On 5 Lip, 10:22, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
wrote:

> > What is the use for Self?
>
> The pattern (also called Rosen trick) is used:

That's cheating - I was told there are no tricks in Ada! ;-)

> 1. to having mutable arguments of functions:
>
>    function Search (X : T; K : Key) return Value is
>       Object : T renames X.Self.all;
>    begin
>       ... -- Modify the search cache associated with X via
>           -- mutable Object view

OK, makes sense. I have seen it used with rendezvous and I guess the
motivation was similar.

> 2. to re-dispatch from primitive operations:
>
>    type T_Access is access all T'Class;  -- Note 'Class
>    type T is  new Ada.Finalization.Limited_Controlled with record
>       Self : T_Access := T'Unchecked_Access;
>
>    procedure Bar (X : T); -- Primitive
>    procedure Foo (X : T); -- Primitive
>
>    procedure Foo (X : T) is
>       Object : T'Class renames X.Self.all;
>    begin
>       Bar (X); -- This does not dispatch!
>       Bar (Object.Self.all); -- This dispatches

I guess Bar (Object) should be enough?

Yes, it makes sense as well.

> Both defeat the type system in some sense and potentially indicate a
> design problem.

I have seen it applied *regularly* in some Ada project, so it looked
like "default" idiom for OO programming.

> > And why is it Unchecked?
>
> Because of accessibility rules.

You mean - the access type is defined in the same scope as the record
and there is a potential danger that the access component in the
record can point to some other record that may disappear leading to
dangling pointer?

Thank you for explanation.

--
Maciej Sobczak
http://www.msobczak.com/




  reply	other threads:[~2007-07-05 10:35 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-04 19:31 Self pointer in limited record Maciej Sobczak
2007-07-05  8:22 ` Dmitry A. Kazakov
2007-07-05 10:35   ` Maciej Sobczak [this message]
2007-07-05 11:01     ` Pascal Obry
2007-07-05 11:14     ` Georg Bauhaus
2007-07-05 12:36     ` Dmitry A. Kazakov
2007-08-31 16:47 ` amado.alves
2007-08-31 17:09   ` Pascal Obry
2007-08-31 17:37   ` Adam Beneschan
2007-08-31 18:26   ` Jeffrey R. Carter
2007-08-31 19:33   ` Dmitry A. Kazakov
2007-09-01 13:33     ` Georg Bauhaus
2007-09-01 13:46       ` Dmitry A. Kazakov
2007-09-01 14:15         ` Georg Bauhaus
2007-09-01 16:03           ` Dmitry A. Kazakov
2007-09-01 19:49             ` Georg Bauhaus
2007-09-01 20:09               ` Dmitry A. Kazakov
2007-09-02 21:37                 ` Georg Bauhaus
     [not found]                   ` <re7ei5lc7dzf$.11qtcnh35jmzg$.dlg@40tude.net>
2007-09-03 10:51                     ` Georg Bauhaus
2007-09-03 14:17                       ` Dmitry A. Kazakov
2007-09-03 15:55                         ` Jean-Pierre Rosen
2007-09-03 19:17                           ` Dmitry A. Kazakov
2007-09-03 19:32                             ` Markus E L
2007-09-03 20:14                             ` Georg Bauhaus
2007-09-04  8:24                               ` Dmitry A. Kazakov
2007-09-04  9:36                                 ` Jean-Pierre Rosen
2007-09-04 10:14                                   ` Dmitry A. Kazakov
2007-09-05 10:49                                 ` Georg Bauhaus
2007-09-05 12:04                                   ` Dmitry A. Kazakov
2007-09-05 13:12                                     ` Jean-Pierre Rosen
2007-09-05 15:10                                       ` Dmitry A. Kazakov
2007-09-05 16:25                                         ` Jean-Pierre Rosen
2007-09-05 19:52                                           ` Dmitry A. Kazakov
2007-09-06  7:19                                             ` Jean-Pierre Rosen
2007-09-06  9:28                                               ` Dmitry A. Kazakov
2007-09-06 11:53                                                 ` Jean-Pierre Rosen
2007-09-06 15:35                                                   ` Dmitry A. Kazakov
2007-09-05 18:31                                     ` Georg Bauhaus
2007-09-05 19:52                                       ` Dmitry A. Kazakov
2007-09-05 21:38                                         ` Georg Bauhaus
2007-09-06  7:37                                           ` Dmitry A. Kazakov
2007-09-06 10:26                                             ` Georg Bauhaus
2007-09-06 12:25                                               ` Dmitry A. Kazakov
2007-09-08  1:27                                               ` Randy Brukardt
2007-09-06  9:14                                         ` Markus E L
2007-09-06  9:48                                           ` Dmitry A. Kazakov
2007-09-04  8:23                             ` Jean-Pierre Rosen
2007-10-31 23:59                           ` adaworks
2007-09-03 20:38                         ` Georg Bauhaus
2007-09-04  8:24                           ` Dmitry A. Kazakov
2007-09-03  7:54             ` Jean-Pierre Rosen
2007-09-01 15:33         ` Markus E L
2007-09-04 14:55           ` Adam Beneschan
2007-09-04 15:09             ` Jean-Pierre Rosen
2007-09-08  1:36               ` Randy Brukardt
2007-09-04 17:31             ` Georg Bauhaus
2007-09-08  1:16     ` Randy Brukardt
2007-09-10 16:27       ` amado.alves
2007-09-10 17:13         ` Adam Beneschan
2007-09-10 19:00         ` Dmitry A. Kazakov
2007-09-11  3:12           ` Randy Brukardt
2007-09-11  9:38             ` Dmitry A. Kazakov
2007-09-12 21:57               ` Randy Brukardt
2007-09-13  8:03                 ` Dmitry A. Kazakov
2007-09-13 21:37                   ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox