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.