Tcl
ここではTcl言語の特徴を記す。
Tcl言語の特徴は一言でいえば「全て文字列」である。Tclは、
コマンド行の順次実行のみのシンプルな文法
首尾一貫したリスト構造
の二つを組み合わせ、非常に小さいルールで広範囲の領域をカバーする点にある。コマンド行はひとつのリストであり、先頭の要素がコマンド、それ以降の要素がコマンドへの引数として扱われる。LISP 言語と同様の一貫性を持つと言えるが、リストの要素分離記号がブランクやタブであるため、これらの文字が無視される一般のプログラム言語に慣れた人には「とまどい」を与えるかもしれない。
この場合、Tclパーサーは引数を順に評価し、第一引数として「{$val}」という4文字の文字列リテラルを、第二引数として「{〜処理〜}」を、if、while コマンドに渡す。if、while コマンド側は受け取った文字列を expr コマンドに「[expr {$val}]」として渡し、その結果をもって処理を続ける。while コマンドは {〜処理〜} をひと通り評価し終えた後、再度、第一引数を expr で評価するが、上記のコードでは与えられている値が {$val} なので {〜処理〜} の中で「set val false」のような文があれば、その評価値も false になって、その時点で繰り返し処理を終了する。
一方、switchコマンドの第1引数は内部では評価されない。したがって下記の2番目の記述は期待する結果が得られない。
もし引数をコマンド内部で評価してくれるならば、その引数はブレス({})で挟んで渡した方が効率が良い。Tclパーサーとコマンドの両方による多重評価処理を回避できるからである。このような理由により、ifコマンドやwhileコマンドやforコマンドの引数は常にブレスで挟むべきである。特にループの条件式は必ずブレスで挟む必要がある。ブレスで挟まないと変数置換されてからループコマンドに渡されてしまうので、定数を並べた条件式になってしまい、無限ループをもたらす。
Tclがカリフォルニア大学バークレー校のジョン・ケネス・オースターハウト博士により最初に開発されたのは1988年の事である。当時アプリケーションプログラムに組み込まれる拡張用スクリプト言語には標準がなく、アプリケーション毎に独自の言語が実装されていた。そのためアプリケーション使用者はツール毎に異なるスクリプト言語の習得を余儀なくされた。この非効率さを嘆いたオースターハウトは、状況を打開するために UNIX アプリケーションにおける標準となる拡張スクリプト言語をデザインしようと考えた。こうして作られたのがTclの始まりである。そのためTclはアプリケーションへの組み込みが容易であることを重視してデザインされた。具体的には処理系をライブラリとして提供することでC言語で書かれたアプリケーションに容易に組み込めることや、言語構造が簡素であり、かつ高い拡張性を持つこと、インタプリタ言語であることが挙げられる。
TkはTcl用に開発された、非常に簡単なコードでGUIを作成できるツールキットである。1990年代初頭にTclにバンドルされる形で公開された。Appleの HyperCardに触発されて開発されたと言う。当初Tclの有用な活用事例の一つとして紹介されたTkだが、その取り扱いやすさからTcl言語と共に一躍人気に火がつく。Tcl は当初の設計意図と異なり、アプリケーションの組み込み言語として使われるよりも、Tkと合わせた「Tcl/Tk」の形のGUIスクリプティング環境として人気を博した。特にTkの人気は高く、TclにとどまらずPerl(Perl/Tk)、Python(Tkinter)、Ruby (Ruby/Tk)など、他の言語でも標準的なGUIキットとして Tkが利用された。