• [^] # Re: 2 paramètres 'in out' doivent être différents

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Publication de la nouvelle norme Ada 2012. Évalué à 2.

    Bien pour les performances, mais je me demande comment ça marche en pratique: c'est assez simple de faire du code ou le compilateur ne peut pas savoir s'il y a des alias ou pas:
    f(A[i], A[j])..

    Surtout qu'en fait, sur le gnat installé sur mon Ubuntu 12.04, ça compile sans problème… Et ça fonctionne mais avec un résultat surprenant.

    with Ada.Text_Io; use Ada.Text_Io;
    procedure Test is
     type My_Int is range 12..42;
     type My_Int_Array is array(1..2) of My_Int;
     Le_Douze : constant My_Int := 12;
     function Param(Var1, Var2 : in out My_Int) return My_Int is
     begin
     Var1 := Var1 + 1;
     Var2 := Var2 + 1;
     return Le_Douze;
     end Param;
     Tab : My_Int_Array := (12,21);
    begin
     Put_Line(My_Int'Image(Param(Tab(1), Tab(1))));
     Put_Line(My_Int'Image(Tab(1)));
     Put_Line(My_Int'Image(Tab(2)));
    end Test;
    
    

    puisque ça retourne

     12
     13
     21
    
    

    On voit bien que Var1 n'a été incrémenté qu'une seule fois alors qu'on aurait pu imaginer qu'il le soit deux fois mais c'est certainement lié au mode de passage de paramètre.
    A voir si la version Adacore fait la même chose :)