Tcl
■カテゴリ / ■テンプレート
Tcl()はスクリプト言語の一つであり、コマンド行のみで構造化文法をフォローしてしまう非常にシンプルな文法を特徴とする。
Tclはその非常に強力なGUIツールキットであるTkにより、GUIツールを素早く作り上げるのに適した強力なスクリプティング環境を構築できる。この両者を組み合わせTcl/Tk()と呼ばれる。ただしTkはクロスプラットフォームなGUI環境としても有名で、Tclに限らずPerl、Python、Rubyなどの言語環境からも利用できる。
Tcl/Tkは、スクリプト言語TclとGUIツールキットTkからなる 非常に強力なGUIスクリプティング環境である。現在、各種オペレーティングシステム(UNIX、Windows、Macintosh)上で動作する。他にもウェブブラウザ上でTcl/Tkを動作させるプラグインTclet()がある。
Tclパーサーから渡された引数がコマンド内部で評価されるか否かは重要である。ここでの評価とはコマンド置換や変数置換のことである。例えば算術演算を行う expr コマンドは引数を内部で評価する。従って以下の2つのコマンドは同じ結果を返す。
Tclパーサーが行ってくれずとも、exprコマンドが内部で変数置換しているので同じ結果が得られるのである。ifコマンドやwhileコマンドは第1引数として与えられた文字列を、コマンド内部で expr によって評価し、その結果を使う。
Tclパーサーは第一引数の「$val」を評価して「true」(文字列)に書き換える。同様に第二引数「{〜処理〜}」を評価して、文字列リテラルなのでそのまま同じ値「{〜処理〜}」に書き換え、以下のようにする。
Tclパーサーはその後、true と {〜処理〜} を if、while コマンドに渡し、if、while コマンド側は受け取った文字列を expr コマンドに「[expr true]」として渡し、その結果をもって処理を続ける。気をつけなければならないのは while コマンドは {〜処理〜} をひと通り評価し終えた後、再度、第一引数を expr で評価するが、上記のコードでは与えられている値が true なので {〜処理〜} の中に「set val false」のような文があったとしても、第一引数で与えられた値そのものは変化しないので、ループを無限に繰り返すことになる({〜処理〜} の中に break コマンドが含まれていない場合)。
オースターハウトがサン・マイクロシステムズに勤めていた1994-1998年はTcl/Tkは同社で開発が進められた。このころのサンは WWW クライアント環境の制覇に向け邁進していた時期であり、Tcl/Tkもその流れの上、その対象領域をウェブに広げていく。ウェブブラウザ上でTk GUIを動作させるプラグイン「Tclet()」や、ブラウザのスクリプト言語としてのTclの組み込み、国際化対応(内部処理のUNICODE化)、インタプリタからバイトコンパイラへの変更による実行速度の大幅な向上など、Tcl/Tkはこの時期機能的にもっとも大きな進歩を果たした。しかし他技術との競合やブラウザでのサポートの薄さなどもあり、WWWを「第二のTk」として人気を拡大することは出来なかった。
オースターハウトの退職に伴い、Tcl/Tkの開発はサンの手を離れた。2000年からはTcl/Tkの開発はオープンソースにその場を移し、精力的に開発が続けられている。
2005年現在Tcl言語は「Tcl/Tk」の知名度とは裏腹に利用者数は少なく、PerlやPython、Rubyに比べ劣勢と言わざるを得ない。特に日本国内での利用者数は少ない。ただし、EDAツールにおいては標準的なスクリプト言語として広く利用されているほか、電子国土Webシステムにおいても一部でTcl言語が使われている。一方Tkは、後発のGTK+、Qtと並び、軽量プログラミング言語における事実上の標準GUIツールキットの一つとなっており、広く利用されている。
なお、Tcl言語の名前は「ツールコマンド言語」を意味する英語「tool command language」に由来し、Tkの名前は「ツールキット」を意味する英語「toolkit」に由来する。