comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: [announcement] SYSAPI and SYSSVC for Windows
Date: Sun, 21 Dec 2003 14:42:09 +0100
Date: 2003-12-21T14:42:09+01:00	[thread overview]
Message-ID: <bs47jo$9e9ea$1@ID-77047.news.uni-berlin.de> (raw)
In-Reply-To: bs29a5$d6n$1@online.de

Ekkehard Morgenstern wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote:
>> The problem is to tell the customers, that *their* applications should be
>> designed so that *our* DLLs and hardware drivers would not stray into an
>> unpredictable state.
> 
> What's the problem communicating this to the customer?

We are not MS, to tell customers, that they are wrong. (:-))

>> > C++ is well-defined also, btw. There's already a number of ISO
>> > standards for C and C++,
>> 
>> A *number of* standards, fascinating! (:-))
> 
> For Ada, there's also an '83 and a '95 rationale. ;)

Ada 95 practically includes Ada 83, with very minor exceptions. Rationale is
not the standard, it is rather comments to the standard. BTW, there is also
AARM - Annotated Ada Reference Manual.

>> Come on! C++ does not have:
>> 
>> 1. multiple dispatch;
> 
> True, except for constructors and destructors. They're always called for
> all derived classes of an object.

This is not multiple dispatch. MD is when, for example:

type Matrix is tagged ...;
function "+" (X, Y : Matrix) return Matrix;
   -- This is dispatching in X, Y and the result

In C++ only one (hidden) parameter can be dispatching. All others are
contravariant, which leads to numerous nasty pitfalls

>> 3. dispatch on access types;
> 
> False. Method overloading based on parameters of different types, even
> pointer types, is supported.

Overloading, not overriding. In C++:

class X {...};
void f(X * Ptr); // This is not a member of X!

Formally f is not dispatching in Ptr. It is class-wide. Compare it with Ada;

type X is tagged ...
procedure F1 (Object : access X);       -- This is a "member"
procedure F2 (Object : access X'Class); -- This is not

type Y is new X with ...
procedure F1 (Object : access Y);       -- This overrides F1
procedure F2 (Object : access Y'Class); -- This overloads F2

>> 4. differentiation between class-wide and specific types;
> 
> Class-wide types in Ada roughly correspond to base classes in C++.

No. A class-wide type is a closure of the derived types. C++ tries to
equalize specific and class-wide types. The price is that C++ never become
a fully OO langauge, while Ada can do it easily. It possible to make all
types in Ada "tagged", even Boolean.

>> 5. functions returning class-wide objects on the stack;
> 
> True, but you can return a reference to an object. (I'm not sure if
> passing a reference to a temporary object would work)

This won't help, because of 4. The same type name is sometimes denotes
class-wide, sometimes specific in C++. In declarations it is always
specific, so you cannot do:

declare
   X : Object'Class := Get_From_File; -- Any descendant of Object

To achive same effect, you have to use the heap:

   X_Ptr * Object = Get_From_File (); // internally calls new
   ...
   free (X_Ptr); // do not forget to release it

>> 7. formal derived type parameter for generics;
> 
> False. Of course you can use derived classes or other types in templates.

Georg Bauhaus has answered this

>> Why? The following is OK:
>> 
>>    type T is limited private;
>> private
>>    type T is limited record
>>       I : aliased Integer;
> 
> Yes, but I is an Integer. Discrete types can always be aliased.
> 
> In my case, it was an array of aliased types, and I wanted to create an
> access to an array element.

>> "Aliased" is the keyword for that. Objects of some types are always
>> aliased:
>> 
>>    type T is tagged limited ...;
> 
> so I could've just used a tagged limited record?
> 
> Like this:
> 
>     type T is tagged limited
>     record
>         A : My_Array_Type;
>     end record;
> 
>     procedure F ( O : in out T ) is
>         Ptr : My_Array_Cell_Ptr;
>     begin
>         Ptr := O.A(1)'Access;
>     end;
> 
> Right?

No. It is unrelated. The thing you are getting access of has to be aliased.
So it is the array elements which has to be, for example:

   type T is limited private;
private
   type Integer_Array is array (Integer range <>) of aliased Integer;
   type T is limited record
      A : Integer_Array (1..3);
   end record;

   procedure F (O : in out T ) is
   begin
       ... O.A(1)'Access; -- This is OK, A(i) are aliased
   end;

If the array elements be tagged, then you would need not write "aliased" in
the array declaration.

-- 
Regards,
Dmitry A. Kazakov
www.dmitry-kazakov.de



  parent reply	other threads:[~2003-12-21 13:42 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-17 19:17 [announcement] SYSAPI and SYSSVC for Windows amado.alves
2003-12-17 19:56 ` Georg Bauhaus
2003-12-18  9:08 ` Dmitry A. Kazakov
2003-12-18 12:14   ` Ekkehard Morgenstern
2003-12-18 13:31     ` Georg Bauhaus
2003-12-19 10:45       ` Ekkehard Morgenstern
2003-12-19 17:12         ` Georg Bauhaus
2003-12-19 17:22           ` Vinzent 'Gadget' Hoefler
2003-12-20  0:21           ` Ekkehard Morgenstern
2003-12-20  2:18             ` Georg Bauhaus
2003-12-20  4:40               ` Ekkehard Morgenstern
2003-12-21  3:45                 ` Georg Bauhaus
2003-12-21 19:01                   ` Piracy was " Robert I. Eachus
2003-12-18 14:32     ` Dmitry A. Kazakov
2003-12-19 11:11       ` Ekkehard Morgenstern
2003-12-19 15:15         ` Hyman Rosen
2003-12-19 15:50           ` Ekkehard Morgenstern
2003-12-19 16:48             ` Hyman Rosen
2003-12-19 16:57               ` Hyman Rosen
2003-12-20  1:17               ` Ekkehard Morgenstern
2003-12-21  2:19                 ` Hyman Rosen
2003-12-21 10:34                   ` Ekkehard Morgenstern
2003-12-22  9:02                     ` Hyman Rosen
2003-12-22 15:17                       ` Ekkehard Morgenstern
2003-12-22 15:08                     ` Hyman Rosen
2003-12-22 15:31                       ` Ekkehard Morgenstern
2003-12-22 16:35                         ` Ekkehard Morgenstern
2003-12-23  1:47                           ` Hyman Rosen
2003-12-23  8:40                             ` Ekkehard Morgenstern
2003-12-23  9:05                               ` Stephen Leake
2003-12-19 17:06         ` Dmitry A. Kazakov
2003-12-20  1:49           ` Ekkehard Morgenstern
2003-12-20 11:13             ` Dmitry A. Kazakov
2003-12-20 13:40               ` Ekkehard Morgenstern
2003-12-20 17:21                 ` Dmitry A. Kazakov
2003-12-20 19:52                   ` Ekkehard Morgenstern
2003-12-21  4:24                     ` Georg Bauhaus
2003-12-21 13:42                     ` Dmitry A. Kazakov [this message]
2003-12-21 15:48                       ` Ekkehard Morgenstern
2003-12-21 17:46                         ` Michal Morawski
2003-12-21 18:05                           ` Ekkehard Morgenstern
2003-12-22  0:50                             ` Robert I. Eachus
2003-12-23 23:02                       ` Robert A Duff
2003-12-24 11:20                         ` Dmitry A. Kazakov
2003-12-24 16:57                           ` Robert A Duff
2003-12-25 14:00                             ` Dmitry A. Kazakov
2003-12-28  1:49                       ` Dave Thompson
  -- strict thread matches above, loose matches on Subject: below --
2003-12-15 14:18 Ekkehard Morgenstern
2003-12-15 15:10 ` Ekkehard Morgenstern
2003-12-15 17:10 ` Jeffrey Carter
2003-12-15 18:38   ` Ekkehard Morgenstern
2003-12-16  0:25     ` Stephen Leake
2003-12-16  0:56       ` Ekkehard Morgenstern
2003-12-16  2:47         ` Ludovic Brenta
2003-12-16 17:45           ` Ekkehard Morgenstern
2003-12-16 19:54             ` Ludovic Brenta
2003-12-16 22:09               ` Ekkehard Morgenstern
2003-12-17 15:24                 ` Ludovic Brenta
2003-12-17 23:23                   ` Ekkehard Morgenstern
2003-12-19 18:14                   ` Warren W. Gay VE3WWG
2003-12-16  5:36         ` tmoran
2003-12-16 17:30           ` Ekkehard Morgenstern
2003-12-15 20:44 ` David Marceau
2003-12-16  0:34   ` Ekkehard Morgenstern
2003-12-17 12:05 ` Dmitry A. Kazakov
2003-12-17 15:00   ` Ekkehard Morgenstern
2003-12-20 19:24 ` Ekkehard Morgenstern
replies disabled

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