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
next prev parent 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