comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Adding "()" operator to Ada 200X
Date: Thu, 05 Jun 2003 21:02:17 +0200
Date: 2003-06-05T21:02:17+02:00	[thread overview]
Message-ID: <bbo3ut$btlcp$1@ID-77047.news.dfncis.de> (raw)
In-Reply-To: 4a4de33a.0306030823.cd30642@posting.google.com

Mário Amado Alves wrote:

>> >    function "()" ( Source : in Array_Like_Type;
>> >                    Index  : in Index_Type )
>> >       return Component_Type;
>>
>>  To go along with this, a way to define a slice of an
>> Array_Like_Type would be nice.
> 
> Great idea!
> 
> function "()"
>   (Source : in Array_Like_Type;
>    From : in Index_Type;
>    To : in Index_Type)
>   return Array_Like_Type;
> 
> Or "(..)".

IMO one should first add a new set of types: "index" types. With some set of 
predefined operations. Then you define sets over index types. "range" is an 
example of such a set. More interesting would be "column", "row" for a 
multi-dimensional index. (Ada does not have slices of multi-dimensional 
arrays). Then a square subset (specifies submatrix). Then a diagonal set 
... ad infinum. (:-))

Only when you have proper index types, you can start to play with operations 
like slices and enumeration (in for-statement).

If you have true index types and objects, you will need only one ()!

function "()"
(  Source : in Array_Like_Type;
   Index  : Index_Like_Type
)  return ?

The problem is that, what the function returns, depends on how the index 
argument is constrained.

This brings back a very important point of dealing with type constraints in 
a more general way than Ada presently does. For instance to allow () 
described above, one should treat:

type Element is ...
type Vector is array (Index_1) of Element;
type Matrix is array (Index_1, Index_2) of Element;

as differenty constrained subtypes of the same type Matrix. Both 
discriminants and tags can be considered type constraints. Then there are 
two major problems:

1. There has to be a way to remove statically known constraints.

2. There has to be a way to evaluate constraints in an independent body 
(from the original procedure body).

> Yes, Matthew, it's just syntax. So are the (already) redefineable
> operators. But it's really useful, no? Compare e.g.
>   ...
>   +"Marius",
>   +"Matthew",
>   ...
> to
>   ...
>   new String' ("Marius"),
>   new String' ("Matthew"),
>   ...
> 
> Actually the fact that it's just syntax might facilitate getting it
> approved :-)
> 
> BTW, I think that if a standard containers library is included in 200X
> then Ada.Strings.Unbounded and the like should be revised in terms of
> it. It would drastically reduce the size of the specs. It would
> suffice to say something like
> 
>   Unbounded_String is equivalent to the container type
>   of an instantiation of Ada.Containers.Arrays.Unbounded
>   with the type Character.

Oh that's for sure. For example:

   type X is tagged something;

      is an equivalent to

   type X is something;
   pragma Embedded_Tag (X);
---
   type X is limited something;

      is an equivalent to

   type X is something;
   procedure ":=" (L : in out X; R : Y) is null;
---
   ...

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



  reply	other threads:[~2003-06-05 19:02 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-02 16:35 Adding "()" operator to Ada 200X Frank J. Lhota
2003-06-02 23:42 ` Matthew Heaney
2003-06-03 14:59   ` Frank J. Lhota
2003-06-03 15:09     ` Frank J. Lhota
2003-06-03 16:04     ` Martin Krischik
2003-06-04 17:28       ` Matthew Heaney
2003-06-04 18:21         ` Frank J. Lhota
2003-06-05  1:15           ` Robert I. Eachus
2003-06-05 14:59             ` Frank J. Lhota
2003-06-05 17:25             ` Matthew Heaney
2003-06-03 20:24     ` Randy Brukardt
2003-06-03 19:52   ` Francisco Javier Loma Daza
2003-06-03  2:56 ` Fionn mac Cuimhaill
2003-06-03 14:02   ` Matthew Heaney
2003-06-03 16:23   ` Mário Amado Alves
2003-06-05 19:02     ` Dmitry A. Kazakov [this message]
2003-06-06 10:56       ` Mário Amado Alves
2003-06-06 16:55         ` Chad R. Meiners
2003-06-06 19:01         ` Frank J. Lhota
2003-06-09 14:15           ` Matthew Heaney
2003-06-07  8:36         ` Dmitry A. Kazakov
replies disabled

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