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
next prev parent 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