comp.lang.ada
 help / color / mirror / Atom feed
From: "Martin Krischik" <krischik@users.sourceforge.net>
Subject: Re: Ada requires too much typing!
Date: Sun, 06 Jun 2010 14:04:33 +0200
Date: 2010-06-06T14:04:33+02:00	[thread overview]
Message-ID: <op.vdvntvqyz25lew@macpro-eth1.krischik.com> (raw)
In-Reply-To: m21vck5uzp.fsf@pushface.org

Am 06.06.2010, 12:13 Uhr, schrieb Simon Wright <simon@pushface.org>:

> "Martin Krischik" <krischik@users.sourceforge.net> writes:
>
>> One should just
>> make a habit of defining classes like this:
>>
>> virtual Base
>>   {
>>   public:
>>     virtual ~Base ()
>>       {
>>       …
>>       }
>>   }
>>
>> And suddenly all your virtual inheritance needs work flawlessly.
>
> I suppose there must be some cost to doing this? or the language
> definition would require it to be always so.

Yes indeed, you have virtual dispatch not only on the methods but on the  
instance variables as well. Sounds worth then it is. It means the internal  
structure of a child type changes from (Ada pseudo code):

record Child_Type is
     Parent_Data : Parent_Type;
end record

to

record Child_Type is
     Hidden_Parent_Data : Parent_Type;
     Parent_Data : constant access Parent_Type := Hidden_Parent_Data'Access;
end record

The compiler will ensure that Hidden_Parent_Data exist only once - but  
there may be any amount of Parent_Data which all point to the same  
Hidden_Parent_Data. And the funny part: The technology used to archive  
this is the very same you use to implement interfaces. Once you have the  
scaffolding for Interfaces in place you can have virtual base classes as  
well.

Main problem with multiple inheritance was in  C++ itself where default is  
“fast” not ”save”. For the Eiffel users it was never a problem because  
there virtual base classes are default. And I just see I made a mistake in  
my original post. It should have been:


class Parent
    {
    public:
      virtual ~Parent ()
        {
        …
        }
    }

class Child
    virtual public Parent
    {
    …
    }

but main problem stay: not enough C++ programmer have known about virtual  
inheritance and the diamond problem only pops up at Grand_Child level and  
lower  (that means one has to plan ahead to avoid it). This in turn given  
multiple inheritance a bad name. But if you do it right it works just  
beautifully.

The real lesson learned: “doing it right” must be default and “make it  
fast” must be an optional extra to be taught in very advanced level  
courses only.

Martin
-- 
Martin Krischik
mailto://krischik@users.sourceforge.net
https://sourceforge.net/users/krischik



  parent reply	other threads:[~2010-06-06 12:04 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-28  5:25 Ada requires too much typing! Luis Espinal
2010-05-28  6:47 ` Yannick Duchêne (Hibou57)
2010-05-28 15:52   ` John B. Matthews
2010-05-28 17:31     ` Dmitry A. Kazakov
2010-05-28 19:05       ` Georg Bauhaus
2010-05-28 19:39         ` Dmitry A. Kazakov
2010-05-28  9:48 ` Georg Bauhaus
2010-05-28 10:10 ` Alex R. Mosteo
2010-06-01 21:30   ` Luis Espinal
2010-06-02 11:08     ` Alex R. Mosteo
2010-06-05 19:58       ` Luis Espinal
2010-06-02 13:09     ` Yannick Duchêne (Hibou57)
2010-06-05 20:13       ` Luis Espinal
2010-06-06  4:25         ` Yannick Duchêne (Hibou57)
2010-06-06  8:55     ` Martin Krischik
2010-06-06 10:13       ` Simon Wright
2010-06-06 11:03         ` Dmitry A. Kazakov
2010-06-06 12:04         ` Martin Krischik [this message]
2010-06-07  8:34           ` Maciej Sobczak
2010-06-07  9:25             ` Martin Krischik
2010-06-07 12:04               ` Colin Paul Gloster
2010-06-07 12:17               ` Maciej Sobczak
2010-06-07 12:26                 ` Dmitry A. Kazakov
2010-06-07 15:00                 ` Martin Krischik
2010-06-08  7:46                   ` Maciej Sobczak
2010-06-08  8:53                     ` Martin Krischik
2010-06-09  7:50                       ` Maciej Sobczak
2010-06-09  8:10                         ` Dmitry A. Kazakov
2010-06-09  8:43                           ` Maciej Sobczak
2010-06-09  9:24                             ` Dmitry A. Kazakov
2010-06-09 13:54                               ` Maciej Sobczak
2010-06-09 14:29                                 ` Dmitry A. Kazakov
2010-06-09 15:02                                   ` Georg Bauhaus
2010-06-09 15:53                                     ` Dmitry A. Kazakov
2010-06-09 18:00                                       ` Yannick Duchêne (Hibou57)
2010-06-09 19:10                                         ` Dmitry A. Kazakov
2010-06-09 21:09                                           ` Yannick Duchêne (Hibou57)
2010-06-10  8:07                                             ` Dmitry A. Kazakov
2010-06-10  8:44                                               ` Yannick Duchêne (Hibou57)
2010-06-10  9:07                                                 ` Dmitry A. Kazakov
2010-06-10 10:10                                                   ` Georg Bauhaus
2010-06-10 10:28                                                     ` Dmitry A. Kazakov
2010-06-09 21:22                                   ` Maciej Sobczak
2010-06-09 23:09                                     ` Yannick Duchêne (Hibou57)
2010-06-10  8:15                                     ` Dmitry A. Kazakov
2010-06-10 13:37                                       ` Maciej Sobczak
2010-06-10 13:57                                         ` Dmitry A. Kazakov
2010-06-09 14:31                               ` Yannick Duchêne (Hibou57)
2010-06-09 15:57                                 ` Dmitry A. Kazakov
2010-06-09 17:51                                   ` Yannick Duchêne (Hibou57)
2010-06-10  6:13                         ` Randy Brukardt
2010-06-10  6:19                           ` AdaMagica
2010-06-10 21:59                             ` Randy Brukardt
2010-06-10  6:34                           ` Vadim Godunko
2010-06-10  6:54                             ` Yannick Duchêne (Hibou57)
2010-06-10  7:36                               ` Vadim Godunko
2010-06-10  8:21                                 ` Dmitry A. Kazakov
2010-06-10  8:51                                   ` Vadim Godunko
2010-06-10  9:20                                     ` Dmitry A. Kazakov
2010-06-10  8:51                                 ` Yannick Duchêne (Hibou57)
2010-06-10 22:08                                 ` Randy Brukardt
2010-06-11  9:13                                   ` Stephen Leake
2010-06-10  7:20                             ` AdaMagica
2010-06-10  8:57                               ` Vadim Godunko
2010-06-10 10:12                                 ` Georg Bauhaus
2010-06-10 13:47                                   ` Alex R. Mosteo
2010-06-10 19:18                                   ` Vadim Godunko
2010-06-10 22:08                                   ` Gautier write-only
2010-06-10 22:17                                   ` Randy Brukardt
2010-06-11 18:38                                     ` Simon Wright
2010-06-29  2:13                                       ` Randy Brukardt
2010-06-11  9:14                                   ` Stephen Leake
2010-06-11 18:03                                     ` Jeffrey R. Carter
2010-06-11  9:11                             ` Stephen Leake
2010-06-10  7:21                           ` Maciej Sobczak
2010-06-10 19:33                             ` Simon Wright
2010-06-10 22:23                             ` Randy Brukardt
2010-06-07  8:13       ` Maciej Sobczak
2010-06-07  8:35         ` Martin Krischik
2010-06-07  8:43         ` Martin Krischik
2010-06-06  8:06 ` Martin Krischik
2010-06-07 18:30   ` Luis Espinal
2010-06-08  6:43     ` Martin Krischik
2010-06-08  7:10       ` Georg Bauhaus
2010-06-08  9:00         ` Martin Krischik
2010-06-10 13:56           ` Alex R. Mosteo
2010-06-10 14:29             ` J-P. Rosen
2010-06-11 11:57               ` Alex R. Mosteo
2010-06-08 10:10       ` Niklas Holsti
2010-06-08 11:35         ` Georg Bauhaus
2010-06-10 13:58           ` Alex R. Mosteo
2010-06-10 19:45           ` Simon Wright
2010-06-10 20:09             ` Niklas Holsti
2010-06-10 18:21         ` Yannick Duchêne (Hibou57)
  -- strict thread matches above, loose matches on Subject: below --
2010-05-26 12:57 Peter C. Chapin
2010-05-26 13:29 ` Ludovic Brenta
2010-05-26 15:56   ` Peter Hermann
2010-05-26 16:12     ` Ludovic Brenta
2010-05-26 18:57   ` Pascal Obry
2010-05-26 19:30   ` Yannick Duchêne (Hibou57)
2010-05-26 14:48 ` Jeffrey R. Carter
2010-05-27 17:10   ` Warren
2010-05-27 22:15     ` Adam Beneschan
2010-05-28 15:26       ` Warren
2010-05-30  0:49   ` BrianG
2010-05-30  7:27     ` Dmitry A. Kazakov
2010-05-30  9:17       ` Yannick Duchêne (Hibou57)
2010-05-30  9:51         ` Simon Wright
2010-06-02  1:42           ` BrianG
2010-05-26 15:23 ` Adam Beneschan
2010-05-26 17:20 ` Georg Bauhaus
2010-05-26 19:33   ` Yannick Duchêne (Hibou57)
2010-05-26 21:55     ` Simon Wright
2010-05-26 23:36     ` Georg Bauhaus
2010-05-27  2:07 ` Fritz Wuehler
2010-05-27  4:19   ` Yannick Duchêne (Hibou57)
2010-05-27 19:51   ` Warren
2010-06-03 16:54 ` Colin Paul Gloster
2010-06-03 16:09   ` Yannick Duchêne (Hibou57)
2010-06-03 16:11     ` Yannick Duchêne (Hibou57)
2010-06-04 11:40       ` Nicolas Cóilin Paul de Gloucester
2010-06-04 13:54         ` Ludovic Brenta
2010-06-04 11:29     ` Nicholas Collin Paul de Gloucester
replies disabled

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