comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: New aggregates with Ada 2022.
Date: Wed, 29 Jun 2022 14:06:31 +0300	[thread overview]
Message-ID: <ji2q1nFu6qeU1@mid.individual.net> (raw)
In-Reply-To: <t9h2is$1ckn5$1@dont-email.me>

On 2022-06-29 11:30, Jeffrey R.Carter wrote:
> On 2022-06-29 06:01, Randy Brukardt wrote:
>>
>> But there is (or shouldn't be) anything special about a
>> one-dimensional array (presuming you intend to allow arrays with
>> more dimensions). And the "abstraction" you talk about is selecting
>> a bunch of barely related elements from a multi-dimensional array.
> 
> Arrays are usually used to implement map, (mathematical) matrices and 
> vectors, or sequences. Each usage tends to have unique features:
> 
> * Maps are usually constrained. It does not make sense to concatenate, 
> sort, slice, or slide a map.

In mathematics, maps (functions) are often sliced, in other words 
restricted to a subset of their full domain. They are also often 
concatenated, in the sense of combining functions defined on separate 
domain sets into a combined function defined on the union of those 
separate domain sets. Those operations would be useful in programs too.

The essential aspect of maps and map operations is that there is no 
"sliding" that changes the relationship of domain values (keys) with 
range values.

That said, it very often makes sense to provide sorted access to the 
elements of a map, sorted by some criterion, while maintaining the 
relationship of keys and their mapped values. That might be seen as 
sorting the map into a sequence (as described below).


> * Matrices have component types that behave like numbers. The 
> mathematical definition of matrices includes integer indices with a 
> lower bound of 1. Vectors are usually considered to be matrices of one 
> column ("column vector") which can be transposed to obtain matrices of 
> one row ("row vector").


Computations that really use matrices (as opposed to multi-dimensional 
maps or plain arrays) very often make use of slices in the form of 
selected rows, columns, diagonals, or contiguous submatrices, with 
sliding of indices.


> * Sequences are usually unconstrained. Typical discussion of sequences 
> outside of programming use integer values to indicate positions, using 
> terms such as the first thing in a sequence, the second thing, ..., so 
> indices should be of an integer type with a lower bound of 1. It 
> sometimes makes sense to concatenate, sort, slice, or slide sequences.


Yes. But IME it is almost never useful /not/ to slide the indices.


> A language that provided direct support for these abstractions should 
> not need to provide arrays.


Except if someone invents new abstractions and needs a "raw memory" type 
to implement them.

I like that Ada is a multi-level language, with both high-level services 
(eg. containers) and low-level services (arrays). As long as Ada uses 
arrays to represent sequences, such as character strings, array slices 
are quite nice to have, at least as values. I have not often needed to 
use a slice as a variable (eg. as the target of an assignment, or as an 
"out" parameter).

  parent reply	other threads:[~2022-06-29 11:06 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-19  7:59 New aggregates with Ada 2022 Blady
2022-06-19 14:15 ` Simon Wright
2022-06-20 19:36   ` Blady
2022-06-20 22:01     ` Simon Wright
2022-06-20 21:47 ` Randy Brukardt
2022-06-20 22:18   ` Dmitry A. Kazakov
2022-06-21 23:28     ` Randy Brukardt
2022-06-22  9:04       ` Dmitry A. Kazakov
2022-06-23  1:06         ` Randy Brukardt
2022-06-23  9:32           ` Dmitry A. Kazakov
2022-06-23 10:53             ` G.B.
2022-06-24  1:21               ` Randy Brukardt
2022-06-24  1:24             ` Randy Brukardt
2022-06-24  6:50               ` Dmitry A. Kazakov
2022-06-25  3:13                 ` Randy Brukardt
2022-06-25  8:50                   ` Dmitry A. Kazakov
2022-06-27 21:37                     ` Randy Brukardt
2022-06-28  5:36                       ` Niklas Holsti
2022-06-29  4:01                         ` Randy Brukardt
2022-06-29  8:30                           ` Jeffrey R.Carter
2022-06-29  9:04                             ` Dmitry A. Kazakov
2022-06-30  5:03                               ` Randy Brukardt
2022-06-30  8:44                                 ` Dmitry A. Kazakov
2022-06-29 11:06                             ` Niklas Holsti [this message]
2022-06-29 12:53                               ` Jeffrey R.Carter
2022-06-30  5:07                                 ` Randy Brukardt
2022-06-30  5:14                               ` Randy Brukardt
2022-06-30  8:31                                 ` Marius Amado-Alves
2022-07-01  5:20                                   ` Randy Brukardt
2022-06-30 10:30                                 ` Jeffrey R.Carter
2022-06-30 15:48                                   ` Marius Amado-Alves
2022-06-30 16:39                                     ` Jeffrey R.Carter
2022-07-01  0:07                                       ` Marius Amado-Alves
2022-06-28  7:52                       ` Dmitry A. Kazakov
2022-06-29  4:07                         ` Randy Brukardt
2022-06-29  7:24                           ` Dmitry A. Kazakov
2022-06-30  5:00                             ` Randy Brukardt
2022-06-21 23:39     ` Randy Brukardt
2022-06-22  8:26       ` Dmitry A. Kazakov
2022-06-23  1:10         ` Randy Brukardt
2022-06-23  9:32           ` Dmitry A. Kazakov
2022-06-20 22:10 ` Jesper Quorning
2022-06-20 22:59   ` Jesper Quorning
2022-06-21 23:20     ` Randy Brukardt
replies disabled

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