気分を変えて再びイテレータの話。標準ライブラリのコンテナを外部イテレータでループするのは実は割と非効率です。インスタンスをループしてみます。中身は適当に何か入っているものと思ってください。形式)で短く書けます。loop;次のように展開されます。end;ループの中だけに注目しても1回ごとに次のものが暗黙のうちに呼ばれています。要素に対するユーザー定義参照型ですが、なぜ終了処理が?実は標準コンテナは参照が残っているうちは参照先を破壊するような操作を禁止するチェックを実装しなければなりません。checkと呼ばれます。ロックして参照の終了処理でアンロックしています。いうことは(ゼロコスト例外でなければ)例外フレームも作られループの中で出たり入ったりしているわけです。class-wide型のため動的ディスパッチされています。リンク時最適化でもしない限りはインライン化できません。なんとかして最適化したいわけです。2012が正式に決まってから割と早い時期にGNATが独自に「最適化」を実装してしまっています。(括弧を付けていますのはこんなものを最適化とは呼びたくないからです。details.」みたいなコメントがあります。ライブラリのソースを覗くとコンパイラのソース読めって書かれてるわけですよ......。宣言されているときに実行されます。それらのエンティティが存在すると先のループは次のように展開されます。(Control)ループの中で暗黙に呼ばれるものが次のように変わりました。