Les delta aggregates en △da₂₀₂₂

Ada₂₀₂₂ a introduit la notion de delta aggregate permettant de modifier un objet sans passer nécessairement par une ou des données intermédiaires.

Cette fonctionnalité s’applique aussi bien aux structures qu’aux tableaux unidimensionnels.

Exemple

Soit la procédure permettant de trier un vecteur d’entiers :

procedure Sort (Vector : in out Vector_T) is
   Tmp : Integer;
begin
   for I in Vector'First .. Positive'Pred (Vector'Last) loop
      for J in Positive'Succ (I) .. Vector'Last loop
         if Vector (J) < Vector (I) then
            Tmp := Vector (I);
            Vector (I) := Vector (J);
            Vector (J) := Tmp
         end if;
      end loop;
   end loop;
end Sort;

Ici, on peut constater que la permutation de deux éléments de notre vecteur nécessite de passer par une variable temporaire (ici Tmp).

En Ada₂₀₂₂ nous aurions pu simplement écrire :

procedure Sort (Vector : in out Vector_T) is
begin
   for I in Vector'First .. Positive'Pred (Vector'Last) loop
      for J in Positive'Succ (I) .. Vector'Last loop
         if Vector (J) < Vector (I) then
            Vector := [Vector with delta I => Vector (J),
                                         J => Vector (I)];
         end if;
      end loop;
   end loop;
end Sort;

Ce qui apporte aussi de la concision et de la lisibilité à notre code.

Référence

[1] : http://www.ada-auth.org/standards/ada22.html/

Comments