Hlavní navigace

Názor ke zprávičce V jádře patrně nebude kontrola přetečení, Linus je proti od Dlask - Programovací jazyk Ada má modulární typy, které realizují...

  • Aktualita je stará, nové názory již nelze přidávat.
  • 13. 5. 2024 18:16

    Dlask

    Programovací jazyk Adamodulární typy, které realizují modulární aritmetiku. Tam přetečení nehrozí, protože jakákoliv operace vždycky skončí v povoleném rozsahu.

    U standardních typů není přetečení povoleno a je signalizováno výjimkou.

    Mějme ukázkový program:

    with Ada.Text_IO; use Ada.Text_IO;
    
    procedure Overflow_Example is
       subtype Small_Int is Integer range 1 .. 10;
       X : Small_Int := 10;
    begin
       Put_Line("Initial value of X: " & Integer'Image(X));
       X := X + 1;
       Put_Line("New value of X: " & Integer'Image(X));
    exception
       when Constraint_Error =>
          Put_Line("Constraint_Error: Integer range overflow detected.");
    end Overflow_Example;

    Tento program při svém spuštění vypíše následující:

    Initial value of X:  10
    Constraint_Error: Integer range overflow detected.

    Oproti tomu mírně upravený program s využitím modulárního typu:

    with Ada.Text_IO; use Ada.Text_IO;
    
    procedure Modular_Example is
       type Modular_Int is mod 10;
       X : Modular_Int := 9;
    begin
       Put_Line("Initial value of X: " & Modular_Int'Image(X));
       X := X + 1;
       Put_Line("New value of X: " & Modular_Int'Image(X));
    exception
       when Constraint_Error =>
          Put_Line("Constraint_Error: Integer range overflow detected.");
    end Modular_Example;

    vypíše toto:

    Initial value of X:  9
    New value of X:  0