comp.lang.ada
 help / color / mirror / Atom feed
From: Martin Klaiber <martinkl@zedat.fu-berlin.de>
Subject: Re: advantages or disadvantages of ADA over pascal or modula
Date: Tue, 7 Jan 2003 19:14:35 +0100
Date: 2003-01-07T19:14:35+01:00	[thread overview]
Message-ID: <b1ire-081.ln1@martinkl.dialup.fu-berlin.de> (raw)
In-Reply-To: av4c0m$8a4$06$1@news.t-online.com

karl bowl <karl.bowl@gmx.de> wrote:

> I would like to ask anybody to tell me about advantages or
> disadvantages of ADA(95) over pascal or modula(2).

I'm only an Ada-beginner, but I'd say that Ada is so much more powerful
than Pascal that they hardly can be compared at all. But I also found
three things which I miss in Ada compared to Borland Pascal.

First, it would be nice, if an object in Ada would know it's own
variables without naming them explicitly.

  type type_Object is
    tagged record
      A_Variable : A_type;
    end record;
  procedure Add (Objectname : type_Object);

  -- body:
  
  Add (Objectname : type_Object) is
  begin
    A_Variable := A_Variable + A_Value;
  end Add;
  
instead of:

  Add (Objectname : type_Object) is
  begin
    Objectname.A_Variable := Objectname.A_Variable + A_Value;
  end Add;
  
It's not a big thing, but sometimes it leads to a lot of writing. Yes,
I know I can rename variables, but I still wonder why an object in Ada
doesn't know it's own variables.

Second, it would be nice, if Ada would allow to change internal
variables of an object also in functions. So, the following is not
valid code but it would be nice if it was, IMHO.

  type type_Calendar is
    tagged record
      Month : type_Month;
      Year : type_Year;
    end record;
  function IncMonth (Calendar : in out type_Calendar) return boolean;
  function IncYear (Calendar : in out type_Calendar) return boolean;
  
  -- body:
  
  function IncMonth (Calendar : in out type_Calendar) return boolean is
    ret_val : boolean := true;
  begin
    if Calendar.Month = 12 then
      if IncYear (Calendar) = true then
        Calendar.Month := 1;
      else
        ret_val := false;
      end if;
    else
      Calendar.Month := Calendar.Month + 1;
    end if;
    return ret_val;
  end IncMonth;
  
  function IncYear (Calendar : in out type_Calendar) return boolean is
  begin
    if Calendar.Year < 3000 then
      Calendar.Year := Calendar.Year + 1;
      return true;
    else
      return false;
    end if;
  end IncYear;
  
Of course the same thing can be done with procedures and a boolean
parameter. But IMHO it's less elegant and less intuitive. I already
had a discussion about that, and people told me that the above is
forbidden to avoid side-effects. But I don't see any side-effect
here. The functions and the variables to be changed belong to the
same object, and to my opinion it would not be dangerous to allow
also functions to change these variables.

This is at least my view as a human. Internally these variables
might be represented as anything else. But to me one of the main
qualities of oo-code is the community of variables and the functions
and procedures to work on these variables. So, I just find it a bit
strange that something like above is not allowed.

The third thing I miss in Ada is something like the 'inherited'
statement in BP. If you have code like this:

  type type_Printer is
    tagged record
      ...
    end record;
  procedure Initialize (Printer : type_Printer);
  
  type type_Inkjet_Printer is new type_Printer with
    record
      ...
    end record;
  procedure Initialize (Inkjet_Printer : type_Inkjet_Printer);
  
  -- body
  
  procedure Initialize (Inkjet_Printer : type_Inkjet_Printer) is
  begin
    Initialize (type_Printer (Inkjet_Printer));
    ...
  end Initialze;

and later change the object structure to:

  type type_Printer is
    tagged record
      ...
    end record;
  procedure Initialize (Printer : type_Printer);
  
  type type_Line_Printer is new type_Printer with
    record
      ...
    end record;
  procedure Initialize (Line_Printer : type_Line_Printer);
  
  type type_Inkjet_Printer is new type_Line_Printer with
    record
      ...
    end record;
  procedure Initialize (Inkjet_Printer : type_Inkjet_Printer);
  
the compiler doesn't (cannot) realize in the Initialize-procedure above
that Inkjet_Printer is now calling a wrong Initialize-procedure itself
(the one from type_Printer, instead of the one from type_Line_Printer).
It already took me hours to find such errors. With such an inherited
keyword we could write instead

  procedure Initialize (Inkjet_Printer : type_Inkjet_Printer) is
  begin
    Initialize (inherited (Inkjet_Printer));
    ...
  end Initialze;

and would always call the Initialize-procedure of the type the object
is inherited from. Of course this does not avoid all errors as someone
might really want to use a procedure from a further type. But I suggest
this person would use the name of this procedure anyway.

Well, instead of the inherited-statement, it would also be helpful, if
the compiler would give a warning in such cases.

Martin



  parent reply	other threads:[~2003-01-07 18:14 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-03 15:57 advantages or disadvantages of ADA over pascal or modula karl bowl
2003-01-04  2:36 ` Adrian Knoth
2003-01-04 23:12   ` Robert C. Leif
2003-01-05  2:56     ` Ted Dennison
2003-01-05  3:54       ` John R. Strohm
2003-01-06  5:55         ` AG
2003-01-05  9:38           ` John R. Strohm
2003-01-06  1:37             ` advantages or disadvantages of ADA over pascal or modula or oberon was " Robert C. Leif
2003-01-04  2:56 ` Steve
2003-01-04 11:34   ` Dmitry A. Kazakov
2003-01-04 17:35     ` Steve
2003-01-04 22:16       ` Vinzent Hoefler
2003-01-05 14:12       ` Dmitry A. Kazakov
2003-01-04 12:17 ` Gautier
2003-01-04 17:12 ` Alfred Hilscher
2003-01-04 18:16   ` Ted Dennison
2003-01-05 11:47   ` karl bowl
2003-01-05 18:53     ` Alfred Hilscher
2003-01-05 20:38       ` Vinzent Hoefler
2003-01-05 21:03         ` Alfred Hilscher
2003-01-05 21:20           ` Vinzent Hoefler
2003-01-05 21:31             ` Alfred Hilscher
2003-01-05 21:47               ` Vinzent Hoefler
2003-01-06 14:43                 ` Gautier
2003-01-06 16:21                   ` Alfred Hilscher
2003-01-05 22:57             ` Vinzent Hoefler
2003-01-06 21:57           ` karl bowl
2003-01-18 14:14     ` Alfred Hilscher
2003-01-18 15:26       ` Larry Kilgallen
2003-01-19 18:10         ` Alfred Hilscher
2003-01-19 23:42           ` Larry Kilgallen
2003-01-21 19:16           ` Robert A Duff
2003-01-18 21:39       ` John R. Strohm
2003-01-18 21:56         ` Vinzent Hoefler
2003-01-18 23:08           ` Larry Kilgallen
2003-01-18 23:16           ` John R. Strohm
2003-01-19  3:36             ` Hyman Rosen
2003-01-19  4:47               ` Vinzent Hoefler
2003-01-19  5:47               ` John R. Strohm
2003-01-19  5:50               ` Steve
2003-01-19  4:47             ` Vinzent Hoefler
2003-01-19  5:51               ` John R. Strohm
2003-01-19 12:51                 ` Dmitry A. Kazakov
2003-01-19 16:43                 ` Marin David Condic
2003-01-19 23:26                   ` John R. Strohm
2003-01-21 13:45                     ` Marin David Condic
2003-01-19  6:10             ` Kevin Cline
2003-01-19 18:03               ` Bernd Specht
2003-01-19 16:31             ` Marin David Condic
2003-01-19 12:17         ` Engineers Pay Alan and Carmel Brain
2003-01-21  7:12           ` Kevin Cline
2003-01-21  9:14             ` John R. Strohm
     [not found]             ` <hub1g-vu3.ln1@beastie.ix.netcom.com>
2003-01-22  4:11               ` John R. Strohm
2003-01-22 17:56               ` John R. Strohm
2003-01-19 16:19         ` advantages or disadvantages of ADA over pascal or modula Marin David Condic
2003-01-19 19:08           ` Robert C. Leif
2003-01-19 20:26           ` Dale Stanbrough
2003-01-20  8:22             ` Tor Fredrik Aas
2003-01-21 14:00             ` Marin David Condic
2003-01-19 18:22         ` Alfred Hilscher
2003-01-20 10:35         ` Georg Bauhaus
2003-01-20 21:12           ` John R. Strohm
2003-01-20 15:56       ` karl bowl
2003-01-20 17:39         ` Jerry Petrey
2003-01-20 22:47         ` Alfred Hilscher
2003-01-21 14:55           ` Stephen Leake
2003-01-21 21:55             ` Alfred Hilscher
2003-01-23 17:06               ` Stephen Leake
2003-01-27  4:25                 ` AG
2003-01-26 17:11                   ` Alfred Hilscher
2003-01-21 17:23           ` karl bowl
2003-01-21 21:47             ` Alfred Hilscher
2003-01-05 12:42   ` Gautier
2003-01-05 18:58     ` Alfred Hilscher
2003-01-05 22:28       ` tmoran
2003-01-06 20:33         ` Randy Brukardt
2003-01-07 14:47           ` Alfred Hilscher
2003-01-07 18:56             ` Randy Brukardt
2003-01-08  9:43               ` Alfred Hilscher
     [not found] ` <mji5va.994.ln@beastie.ix.netcom.com>
2003-01-04 22:16   ` Vinzent Hoefler
2003-01-07 18:14 ` Martin Klaiber [this message]
2003-01-08  9:01   ` Gautier
2003-01-08 11:13     ` Martin Klaiber
2003-01-08 17:25       ` Gautier
2003-01-08 17:52         ` Martin Klaiber
2003-01-10  3:07 ` Richard Riehle
replies disabled

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