comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Inherited Methods and such
Date: Tue, 25 Sep 2007 10:59:09 +0200
Date: 2007-09-25T10:53:34+02:00	[thread overview]
Message-ID: <19ie8rfpiitdx$.i2sz3r6uj66w.dlg@40tude.net> (raw)
In-Reply-To: fd9ptb$ct7$1@jacob-sparre.dk

On Mon, 24 Sep 2007 20:59:53 -0500, Randy Brukardt wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> news:9ukf2wtqjs0q$.iuijmal4x56b$.dlg@40tude.net...
> ...
>>> Right. Ada doesn't have *any* constructors. :-)
>>
>> Surely it has. The point is that in NO typed language a constructor can be
>> defined solely in the language terms. Constructors have to be generated
>> "per magic." But the language shall provide hooks for user-defined
>> insertions in the generated constructors at the points, where the type
>> contracts are satisfied. Isn't it obvious?
>>
>> Ada keeps on trying to use only magic. Returning limited types, new in Ada
>> 2005, is just another step in this direction.
> 
> Ada has no choice. You agree that "magic" is needed to do the memory
> allocation, layout, etc. for the underlying object. (To say otherwise would
> be to require all objects to be fixed in size.) But that is not divisible
> from the initialization of the value in Ada (and the values of the
> components), because the memory allocation depends on the value of the
> discriminants, and even the components that exist depends on those values.

It can be made divisible:

For each type T we define a plain built-in record type T'Constraints such
that it has all the constraints (discriminants, bounds, tags) of T. Prior
allocation of T a user hook is called to return T'Constrants. It gets the
parameters of the constructor. Then the memory is allocated. After that the
implementation type of T is constructed (the constraints are set, the
components are constructed). Then we proceed to the construction of T. Here
the parent types are constructed first and finally a user hook equivalent
to Initialize is called on T. For class-wide types there is an additional
step where the class-wide user hook is called.

> Note that this is very similar to the reasons that Ada cannot have "real"
> user-defined assignment; it's not possible to divide an assignment into
> components managed separately.

Same as above. Moreover it would be probably possible to make the old LHS
visible in the hook computing the constraints.

>> And also, it is inconsistent with Ada's own stance on types
>> matching by-name rather than by-structure.
> 
> This I don't see at all. Since constructors are named (and I agree that
> Initialize is not a constructor in any sense, its more of an initial
> mutator) and are tied to the return types, they fit well into the Ada type
> model. The best constructors are dispatching, and those surely are
> one-to-one with the types that they construct (Ada 95 required those to be
> overridden for each new type; the Amendment changed that over my strong
> objections, but even so you surely are allowed to override them).

That was a mistake, but overriding is a wrong model for constructors
anyway. Constructors are extended but overridden. Further I don't think
that constructing functions can be called constructors.

We don't need constructors, we need insertions in the compiler-generated
ones.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-09-25  8:59 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-17 14:26 Inherited Methods and such shaunpatterson
2007-09-17 15:11 ` Ludovic Brenta
2007-09-17 16:46   ` shaunpatterson
2007-09-17 19:07     ` Ludovic Brenta
2007-09-17 20:22   ` Maciej Sobczak
2007-09-17 21:07     ` Ludovic Brenta
2007-09-18 14:27       ` Maciej Sobczak
2007-09-18 14:27       ` Maciej Sobczak
2007-09-18 15:25         ` Dmitry A. Kazakov
2007-09-18 18:34           ` Ludovic Brenta
2007-09-18 19:29             ` Dmitry A. Kazakov
2007-09-18 19:39               ` Ludovic Brenta
2007-09-18 20:49                 ` Dmitry A. Kazakov
2007-09-18 21:10               ` Simon Wright
2007-09-18 20:39           ` Maciej Sobczak
2007-09-18 21:12             ` Dmitry A. Kazakov
2007-09-19 14:49               ` Maciej Sobczak
2007-09-19 15:16                 ` Dmitry A. Kazakov
2007-09-19 22:13                   ` Maciej Sobczak
2007-09-20  8:12                     ` Dmitry A. Kazakov
2007-09-20 13:52                       ` Maciej Sobczak
2007-09-20 16:22                         ` Dmitry A. Kazakov
2007-09-20 20:45                           ` Maciej Sobczak
2007-09-21 18:59                             ` Dmitry A. Kazakov
2007-09-21 21:02                               ` Maciej Sobczak
2007-09-22  8:48                                 ` Dmitry A. Kazakov
2007-09-22 21:53                                   ` Maciej Sobczak
2007-09-23  8:41                                     ` Dmitry A. Kazakov
2007-09-23 20:36                                       ` Maciej Sobczak
2007-09-24  9:32                                         ` Dmitry A. Kazakov
2007-09-24 15:02                                           ` Maciej Sobczak
2007-09-24 19:20                                             ` Dmitry A. Kazakov
2007-09-25 20:53                                               ` Maciej Sobczak
2007-09-26 10:42                                                 ` Dmitry A. Kazakov
2007-09-26 21:31                                                   ` Maciej Sobczak
2007-09-27 15:02                                                     ` Dmitry A. Kazakov
2007-09-27 21:02                                                       ` Maciej Sobczak
2007-09-26 12:21                                                 ` Robert A Duff
2007-09-26 12:54                                                   ` Dmitry A. Kazakov
2007-09-26 21:37                                                   ` Maciej Sobczak
2007-09-26 23:47                                                     ` Randy Brukardt
2007-09-27 21:08                                                       ` Maciej Sobczak
2007-09-28  0:44                                                         ` Randy Brukardt
2007-09-28 20:32                                                           ` Maciej Sobczak
2007-09-28 22:35                                                             ` Randy Brukardt
2007-09-29 23:58                                                             ` Robert A Duff
2007-09-26 12:26                                                 ` Robert A Duff
2007-09-26 21:50                                                   ` Maciej Sobczak
2007-09-26 22:20                                                     ` Ray Blaak
2007-09-27  0:01                                                     ` Randy Brukardt
2007-09-27 13:39                                                     ` Robert A Duff
2007-09-27 14:54                                                       ` Dmitry A. Kazakov
2007-09-28  0:35                                                         ` Randy Brukardt
     [not found]                                                           ` <7p6gc1s9imfa$.kmvwf5zyf8e9.dlg@40tude.net>
2007-09-28 22:53                                                             ` Randy Brukardt
2007-09-29 20:37                                                               ` Dmitry A. Kazakov
2007-09-27 21:23                                                       ` Maciej Sobczak
2007-09-28 19:12                                                         ` Robert A Duff
2007-09-28 19:02                                                     ` Robert A Duff
2007-09-28 19:42                                                       ` Robert A Duff
2007-09-28 20:44                                                         ` Maciej Sobczak
2007-09-28 22:40                                                           ` Randy Brukardt
2007-09-29 20:35                                                           ` Dmitry A. Kazakov
2007-09-29 20:52                                                             ` Maciej Sobczak
2007-09-30  8:38                                                               ` Dmitry A. Kazakov
2007-09-29 23:47                                                             ` Robert A Duff
2007-09-29 20:48                                                           ` Maciej Sobczak
2007-09-29 23:39                                                             ` Robert A Duff
2007-09-30  8:38                                                               ` Dmitry A. Kazakov
2007-09-29 23:42                                                           ` Robert A Duff
2007-09-25  1:59                                   ` Randy Brukardt
2007-09-25  8:59                                     ` Dmitry A. Kazakov [this message]
2007-09-25 21:02                                       ` Randy Brukardt
2007-09-26 12:42                                         ` Dmitry A. Kazakov
2007-09-18  4:03 ` Steve
replies disabled

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