Smalltalk
Smalltalk の実行環境が全く存在しない初期の状況ではコンパイラーも仮想機械も Smalltalk で用意する事はできない。このため Smalltalk の初期段階ではALTOのアセンブリ言語によりコンパイラーや仮想機械が実装されていた。
逆に条件が偽である間反復する #whileFalse: というセレクターも存在する。
また do-while に該当する文も存在する。do-while に該当する反復は、ブロックに対するメッセージ送信の形で次の様に記述する。
Smalltalk では条件なしの反復も存在する。無条件反復は、ブロックに対するメッセージ送信の形で次の様に記述する。
Smalltalk では、反復方法が複数存在するが、実は全てメソッドの再帰呼び出しによって実装されているという事になっている。ただし、こちらも #ifTrue:ifFalse 同様実際にメソッドの再帰呼び出しとして実行されていない事が多い。
反復からの脱出
C言語の break や Perl の last に相当する反復脱出は thisContext に対し #return セレクターを使ったメッセージを送る。
thisContext には、引き数を取り、引き数を脱出するブロックの戻り値として返す #return: セレクターや、戻り先のメソッドを指定する #return:to: セレクターなど多数の return 系セレクターに対応するメソッドが定義されており、他の言語には珍しい多様な反復の脱出方法を備えている。
例外処理機構
Smalltalk にも例外処理機構が存在する。こちらも、その他の構文と同じくメッセージ式とブロックによって実現されている。例外処理は次の様に記述する。
なお#ensure:は後述のブロックによる資源の開放があるため多用されることはない。
例外の制御はメッセージ送信毎に連結リストとして積み上げられたコンテキスト情報の末端のコンテキスト(メソッドスタック)を表す thisContext オブジェクトを操作し、コンテキストを巻き戻す事で実現されている。