Skip to main content

10.3 Program Structure

Blocks

guideline

  • Use blocks (see Guideline 5.6.9) to introduce late initialization when measured performance indicates.

example

   ...
Initial : Matrix;

begin -- Find_Solution

Initialize_Solution_Matrix:
for Row in Initial'Range(1) loop
for Col in Initial'Range(2) loop
Initial (Row, Col) := Get_Value (Row, Col);
end loop;
end loop Initialize_Solution_Matrix;

Converge_To_The_Solution:
declare

Solution : Matrix := Identity;
Min_Iterations : constant Natural := ...;

begin -- Converge_To_The_Solution
for Iterations in 1 .. Min_Iterations loop
Converge (Solution, Initial);
end loop;

end Converge_To_The_Solution;

...
end Find_Solution;

rationale

Late initialization allows a compiler more choices in register usage optimization. Depending on the circumstance, this may introduce a significant performance improvement.

Some compilers incur a performance penalty when declarative blocks are introduced. Careful analysis and timing tests by the programmer may identify those declarative blocks that should be removed.

notes

It is difficult to accurately predict through code inspections which declarative blocks improve performance and which degrade performance. However, with these general guidelines and a familiarity with the particular implementation, performance can be improved.