• [^] # Re: Du haut niveau pour gérer correctement du bas niveau

    Posté par (site web personnel, Mastodon) . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 3.

    en ADA le type natural est-il lui aussi cyclique ou, sinon, que se passe-t-il lorsque l'on arrive aux bornes ?

    En Ada, il n'y a que les types définis comme modulaires qui le sont. Natural n'en fait pas partie.

    subtype Natural is Integer range 0 .. Integer'Last;

    Il s'agit d'un sous-type du type entier et comme lui, un dépassement de capacité provoque une exception.
    Le programme suivant est accepté par le compilateur moyennant un avertissement.

    with Ada.Text_Io; use Ada.Text_Io;
    procedure Nat is
     Nat : Natural := Natural'Last;
    begin
     Put_Line("Nat=" & Natural'Image(Nat));
     Nat := Nat + 1;
     Put_Line("Nat=" & Natural'Image(Nat));
    end Nat;
    gnatmake nat.adb
    gcc-4.9 -c nat.adb
    nat.adb:7:15: warning: value not in range of type "Standard.Integer"
    nat.adb:7:15: warning: "Constraint_Error" will be raised at run time
    gnatbind -x nat.ali
    gnatlink nat.ali
    

    A l'exécution, il arrive ce que le compilateur avait dit

    ./nat
    Nat= 2147483647
    raised CONSTRAINT_ERROR : nat.adb:7 overflow check failed
    

    Voilà, le principe du moindre étonnement dans toute sa splendeur :)