comp.lang.ada
 help / color / mirror / Atom feed
From: pythoner6@gmail.com
Subject: Re: Ada Annoyances
Date: Sat, 24 Jun 2017 06:06:20 -0700 (PDT)
Date: 2017-06-24T06:06:20-07:00	[thread overview]
Message-ID: <357b04d6-d00d-42e4-aebe-af1270f96efb@googlegroups.com> (raw)
In-Reply-To: <bb2dce33-54bd-426c-9029-f965fa007e3b@googlegroups.com>

On Saturday, June 24, 2017 at 4:34:32 AM UTC-4, Maciej Sobczak wrote:
> Because tagging (like v-table in C++) is a language design artefact that enables dynamic binding, which has its costs and has nothing to do with automated lifetime management. These concepts are orthogonal and there is no need to entangle them together.

Yes, I definitely agree with that - which is similar to the reason I started this thread.

> This has practical implications. In C++ the auto_ptr or scoped_ptr (or similar) wrapper has literally zero cost, both in space and in time. If the raw pointer has 4 bytes (on a 32-bit machine), the scoped_ptr wrapper will have 4 bytes, too. Ada imposes unnecessary cost - again, both in space and time.

As I understand it, the penalty in Ada is going to some extra space for the tag (how big is this? I haven't found much info on the size of a tag, which I'm assuming is because this may be implementation dependent?), and the smart pointer will get passed around by reference, as opposed to by value which would make more sense. While for most part I'm not too concerned about the extra space required for the tag (in other cases), for a smart pointer that's probably about doubling the size which is unfortunate.

Method calls won't be dynamically dispatched unless you're dealing with a Smart_Pointer'Class and calling methods that take a Smart_Pointer (which I don't see much reason to do if you want a low overhead smart pointer), right?

> > And how is C++ much different - other than that you can make destructors non-virtual
> 
> In a class that is not intented for use in a class hierarchy (like said RAII wrappers) the destructor should *not* be virtual, as there is no reason for it to be.
> 
> > (and therefore never dynamically dispatch, though I think the advice I usually see is to make almost all destructors virtual to avoid the case where the wrong destructor gets called).
> 
> This is not a complete advice. If the class is not part of any hierarchy, there is only one destructor and always the right one will be called.

Sure - I'm not saying it's necessarily the best practice, but I've certainly seen that advice given. Now that C++ has the final keyword, I think it's probably safer to provide nonvirtual destructors as they can be marked final to ensure that the destructor cannot be accidentally overridden.

> > Again, I'm not quite sure I follow you here. What do you mean by "not compatible with the lifetime of its parts"?
> 
> In C++ when the object of derived class is constructed, its base class constructor is called first and at that time the object is considered to have the Base dynamic type, which makes sense, as the derived parts have not yet been initialized (they will be initialized in the Derived constructor, which will happen later). Only after the base constructor finishes, the dynamic type of the object is "promoted" to Derived. This means that virtual calls within the Base constructor will never dispatch to Derived variants, which is safer, as it prevents accidental access to not-yet-initialized parts of the object from virtual functions. We say that from within constructors (and destructors, where the same process goes in the reverse direction) the static type is equal to the dynamic type of the object.
> Ada does not have this feature and diaptching calls can access uninitialized components from derived parts by means of dispatching to the not-yet-born parts of the object.
> 
> In this sense and this particular context, C++ offers better and stronger (!) type safety than Ada.
> 
> -- 
> Maciej Sobczak * http://www.inspirel.com

Ah, I see.

  reply	other threads:[~2017-06-24 13:06 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-21  1:12 Ada Annoyances pythoner6
2017-06-21 10:13 ` Lucretia
2017-06-23 15:27   ` raph.amiard
2017-06-23 17:49     ` Randy Brukardt
2017-06-23 19:21       ` Niklas Holsti
2017-06-24  4:02         ` Shark8
2017-06-24 19:55         ` Simon Wright
2017-06-24 20:56           ` Niklas Holsti
2017-06-25 23:43         ` Randy Brukardt
2017-06-26 20:20           ` Niklas Holsti
2017-06-26 21:47             ` Randy Brukardt
2017-06-26 22:23               ` Dmitry A. Kazakov
2017-06-29 19:00               ` Niklas Holsti
2017-06-29 21:29                 ` Robert A Duff
2017-06-30  0:50                   ` Randy Brukardt
2017-07-03 20:39                     ` Robert A Duff
2017-07-04 19:52                       ` Niklas Holsti
2017-07-04 19:32                   ` Niklas Holsti
2017-06-30  0:47                 ` Randy Brukardt
2017-06-30 18:45                   ` Niklas Holsti
2017-06-30 20:06                     ` Robert A Duff
2017-06-29 21:12         ` Robert A Duff
2017-07-04 19:30           ` Niklas Holsti
2017-07-05 20:03             ` Robert A Duff
2017-06-23 19:22       ` Niklas Holsti
2017-06-30 15:02       ` Norman Worth
2017-06-30 23:49         ` pythoner6
2017-07-03  0:04           ` Randy Brukardt
2017-07-03 17:47             ` Jere
2017-07-03 19:43               ` Dmitry A. Kazakov
2017-07-04  2:18               ` Randy Brukardt
2017-12-17 13:47                 ` Prefixed notation for non tagged types Jere
2017-12-17 15:06                   ` Simon Wright
2017-12-17 15:33                     ` Dmitry A. Kazakov
2017-12-18 22:31                     ` Randy Brukardt
2017-12-19  0:40                     ` Jere
2017-12-19 23:04                       ` Randy Brukardt
2017-12-20 12:33                         ` Robert Eachus
2017-06-21 11:58 ` Ada Annoyances joakimds
2017-06-21 12:29   ` Pascal Obry
2017-06-21 14:52     ` pythoner6
2017-06-21 16:11       ` J-P. Rosen
2017-06-21 16:12       ` Dmitry A. Kazakov
2017-06-21 22:45         ` pythoner6
2017-06-22  7:29           ` Dmitry A. Kazakov
2017-06-22 10:29             ` pythoner6
2017-06-22 11:04               ` Egil H H
2017-06-22 13:30               ` Dmitry A. Kazakov
2017-06-22 19:22                 ` Niklas Holsti
2017-06-22 21:52                   ` Dmitry A. Kazakov
2017-06-23  9:33                     ` AdaMagica
2017-06-23 10:25                       ` Simon Wright
2017-06-23  1:00                 ` pythoner6
2017-06-23 15:23         ` raph.amiard
2017-06-23 16:10           ` Dmitry A. Kazakov
2017-06-23 17:41           ` Randy Brukardt
2017-06-23 18:56           ` Maciej Sobczak
2017-06-23 22:18             ` pythoner6
2017-06-24  8:05               ` Dmitry A. Kazakov
2017-06-24  8:35                 ` Maciej Sobczak
2017-06-24  9:07                   ` Dmitry A. Kazakov
2017-06-24 20:50                     ` Maciej Sobczak
2017-06-24 21:06                       ` Dmitry A. Kazakov
2017-06-25 11:33                         ` Maciej Sobczak
2017-06-25 14:32                           ` Dmitry A. Kazakov
2017-06-25 20:50                             ` Maciej Sobczak
2017-06-26  7:58                               ` Dmitry A. Kazakov
2017-06-26 13:24                                 ` Maciej Sobczak
2017-06-26 16:38                                   ` Dmitry A. Kazakov
2017-06-26 20:42                                     ` Maciej Sobczak
2017-06-24  8:34               ` Maciej Sobczak
2017-06-24 13:06                 ` pythoner6 [this message]
2017-06-24 15:40                   ` Dmitry A. Kazakov
2017-06-26  0:06                 ` Randy Brukardt
2017-06-26 20:35                   ` Maciej Sobczak
2017-06-26 21:40                     ` Randy Brukardt
2017-06-27  7:23                       ` Maciej Sobczak
2017-06-27 20:38                         ` Randy Brukardt
2017-06-28  8:21                           ` Dmitry A. Kazakov
2017-06-28 20:50                             ` Randy Brukardt
2017-06-28 23:18                               ` Nasser M. Abbasi
2017-06-29  7:27                                 ` Dmitry A. Kazakov
2017-06-29 16:24                                 ` Jeffrey R. Carter
2017-06-29 16:51                                   ` Nasser M. Abbasi
2017-07-04 23:40                                   ` Luke A. Guest
2017-07-05  5:29                                     ` J-P. Rosen
2017-07-05 13:49                                       ` Dennis Lee Bieber
2017-07-05 17:49                                     ` Jeffrey R. Carter
2017-06-29 21:46                                 ` darkestkhan
2017-06-29  7:15                               ` Dmitry A. Kazakov
2017-06-30  0:42                                 ` Randy Brukardt
2017-06-30  7:36                                   ` Dmitry A. Kazakov
2017-06-28 13:07                           ` Maciej Sobczak
2017-06-27  7:26                       ` Dmitry A. Kazakov
2017-06-27 20:41                         ` Randy Brukardt
2017-06-28  7:57                           ` Dmitry A. Kazakov
2017-06-27 15:19                     ` AdaMagica
2017-06-27 16:32                       ` Dmitry A. Kazakov
2017-06-28 13:15                       ` Maciej Sobczak
2017-06-28 14:05                         ` AdaMagica
2017-06-29 21:17                           ` Robert A Duff
2017-06-30  7:44                             ` Dmitry A. Kazakov
2017-06-30  7:49                               ` J-P. Rosen
2017-06-30  8:28                                 ` Dmitry A. Kazakov
2017-06-30 10:14                                   ` J-P. Rosen
2017-06-30 10:30                                     ` Dmitry A. Kazakov
2017-06-28 20:53                         ` Randy Brukardt
2017-12-17 16:24             ` Mehdi Saada
2017-12-17 17:27               ` Dmitry A. Kazakov
2017-12-18 23:09                 ` Randy Brukardt
2017-12-19  9:25                   ` Dmitry A. Kazakov
2017-06-21 20:40       ` G.B.
2017-06-21 22:25         ` pythoner6
2017-06-26 11:01     ` Vincent
2017-06-26 11:15       ` Alejandro R. Mosteo
2017-06-26 16:35       ` Pascal Obry
replies disabled

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