Tcl/Tk 7.6 〜 8.4

 このページはここ数年のTcl/Tkのバージョンと新機能の動向を載せています。 ここは新しい版が出るたびに下に下に書き足していっているので、 常に現在形で書かれていますのでお気をつけてくださいね。 最新版は一番下の8.4系統です。


Tcl/Tk 8.0

 1997年8月18日に公開された Tcl/Tk のバージョン8.0は Tclは7.6からバージョンの整数桁がひとつ上がり、 Tkのほうはそれに合わせて従来の4.2から一気のバージョンアップということで、 大量の仕様変更と新機能の追加が行われました。 サン・マイクロシステムズ社の開発陣の下であまりに急速に進化してしまったこの新世代のTcl/Tkも、 現在は国際化(I18N)された以降のバージョンに徐々に置き換えが進み、 Tcl/Tkの歴史の一部になりつつあります。

 8.0では具体的には次のような進化が見られました。

  • 早くなりました
    読み込んだスクリプトを一旦バイトコードに変換するバイトコンパイラを内蔵するようになったため、 数値計算の速度が目に見えて改善されました。
  • バイナリデータが使えます
    バイナリデータを操作したり、ファイルに読み書きできるようになりました。 バイナリファイルを読みこんで、その一部を修正して書きなおすというようなことも可能になりました。
  • 名前空間の整備によって、大きなプログラムでも安心
    それまでのTcl/Tkでは大域変数が知らないうちにぶつかったりして管理が大変だったのが改善されました。 8.0からは積極的に名前空間を使うことをお勧めします。
  • 乱数が使えるようになりました!!
    これはゲームやデモを書くのには非常にありがたいですね。 exprコマンドの式で rand() とすると 0.0 から 1.0未満の小数で数値が返ってきます。
  • configureが賢くなったのか?
    すんなりコンパイルできてよかったです。
  • Tkの画面がかっこよくなった
    私はUNIX版、MS-Windows版しか持っていませんが、 それぞれのプラットフォームでより自然なGUIが作れるようになったようです。
このうち、特にTcl/Tk をC言語のライブラリとして使っていたプログラマに衝撃を与えかつ困惑させたのが 「バイナリデータのサポート」です。 これはTclのライブラリ関数(API)の大部分の仕様変更を招いたため、 それまでの古いTcl/Tkのライブラリで書かれた巨大なアプリケーションはこのバージョンアップに対応できず、 皮肉にも時代に取り残されてしまったものもあるほどです。


Tcl/Tk 8.1と日本語対応について

 1998年1月22日に Tcl/Tk の新しいバージョン8.1α1 が発表され、 2月24日にはすぐにバージョンα2になりました。 8.1 のウリは、文字コードの国際化(I18N) です。Tcl/Tk 8.1 では、 文字列は Java が既に行っているような Unicode文字として扱われます。 通常の半角英数字(ASCII文字)はASCIIコードと全く同じように使えますが、 新たに主に極東系(中国語、ハングル、日本語などを指すときに、 欧米で最も普通に使われる表現だそうです) の各文字コードについてもUnicodeとの内部変換機構ができました。 簡単に言えば、全世界で使われるTcl/Tkで、 日本語も表示できるようになったということです。

インストール時にできる、encoding というディレクトリを見てみると、 日本語の各文字コードのためのファイルができていることがわかります。

ではやっぱり試してみたくなるのが人情ということで、 「日本語のテキストを表示する」 「日本語をエントリなどに入力する」 「日本語のファイルを読む」のそれぞれについて試してみました。


日本語のテキストを表示する

下のような簡単なスクリプトを実行してみました。「日本語」はEUCコードです。 これはUNIX(Xウィンドウシステム)の例で、最初に

% setenv LANG ja_JP.EUC
などと日本語の文字コードを指定する必要があります。
. configure -width 200 -height 50
set font {Times 20 bold}
canvas .can -bg white
place .can -relx 0 -rely 0 -relw 1 -relh 1
.can create text 10 10 -anc nw -text "日本語" \
  -fill red -font $font
まず、 Tcl/Tk 8.0 で試してみましょう。

ありゃりゃ・・・。では次に Tcl/Tk 8.1 を使ってみます。

表示できました。フォントを {Helvetica 20 bold} に変えてみましょう。

これもOKです。ではXウィンドウシステムのフォントのひとつ k20(kanji20) では?

という次第です。ついでに各種のGUI部品にも日本語が表示できることを 確かめてみました。


日本語を入力する

UNIX計算機では日本語の文字の入力手段はまだ提供されていないようで、 kinput2 も反応しませんし、Xウィンドウシステムでポピュラーな 「マウスの中央ボタンでドラッグ&ドロップ」も効きません。 入力にも何らかのサポートがあるともっと嬉しいところです(*1)。

(*1)8.0には日本語のパッチが公開されていますが、 これは使ったことがないのでここでは省略します。 また、8.3の後半からは、 XIMP(X Input Method Protocol)を介した日本語入力ができるようになっています。
一方 MS-Windowsでは日本語IMEがちゃんと機能し、入力も表示もできますが、 "wm title" コマンドでつけるタイトルにだけは日本語が使えないみたいです。

もちろん、入力した日本語は正しいTcl文字列として扱われます。


日本語のファイルを読む

set enc iso2022-jp
#set enc euc-jp
#set enc shiftjis
set fp [open "Japanese.txt" r]
fconfigure $fp -translation {auto auto} -encoding $enc
set buf [read $fp]
close $fp
message .msg -width 400 -text $buf
pack .msg -fill both
Tcl8.1では日本語のテキストを含む文書ファイルを正確にTcl文字列として読み込むことができるようになりました。 ただし、事前にその中の日本語がどの文字コードで書かれているか知っておく必要があります。 これを指定するのは、 fconfigureコマンドの-encodingオプション です。上の例のように、JISコード(iso2022-jp)、シフトJISコード(shiftjis)、 日本語EUCコード(euc-jp) のどれかを指定すればOKです。


再び Tcl/Tk 8.0 登場

 Tcl 8.1 は1998年2月にα2が出てからバージョンアップが止まってしまいました。 そして次に出たバージョンは、あれ、8.0.3? 一見バージョンダウンのこの数字、それに名前のつけ方も変わっています。 そして1998年11月には 8.0.4 の公開ということで、 1998年はほんとにTclにとって大混乱の一年になりました。 公開された順に並べるとこういう風になるのですが、

  1. 8.0p1
  2. 8.0p2(Tclプラグイン2.0のベースになった版)
  3. 8.1a1(1998年1月)
  4. 8.1a2(1998年2月)
  5. 8.0.3(1998年9月)
  6. 8.0.4(1998年11月)
  7. 8.1b1(1998年12月)
なぜこうなったかというと、時期的には、8.1a2から8.0.3に 「バージョンダウン」する間に、Tclの原開発者 Ousterhout 博士が1996年から開発の総本山だったサン・マイクロシステムズ社を飛び出して Scriptics(後のAjubaSolutions) なるTcl/Tkの開発と配布を専門に扱う企業を設立したことが大きいようです。 8.1a2 は新基軸として導入した国際化Encodingに関連してまだたくさんのバグを抱えており、 Scripticsの方針としてはより安定している 8.0p2 を元に改良を加える道が選ばれました。


再び Tcl/Tk 8.1登場

 1999年に入ってもTcl/Tkは次々にバージョンアップを繰り返しました。 1999年3月には9日に8.0系統の新バージョン8.0.5 (結果的には8.0系統の最終版になりました)、 16日には8.1系統の新バージョン8.1b2が相次いで公開され、 4月9日の8.1b3がb2からほとんどバグ修正もないまま「最後のβリリース」 と公言されたため、 8.1の正式リリースが迫ったことをうかがわせました。そして案の定、 我らが日本ではゴールデンウィーク真っ最中の5月1日にαリリースから 16か月を経てようやく正式版の8.1が公開されました。

 おまけですが、「なもなも」 でも触れていますが、C言語でTclのライブラリ関数を呼び出す場合、 8.1でTclのライブラリ関数の仕様にかなり変更が加わっており、 どのバージョンに対応するかで混乱を招きがちです。 これを受けてScripticsの開発陣は、 複数のTcl/Tkライブラリで作られたプログラムをうまく整合性をとって動かすための統一アーキテクチャ (というかたんなるとりきめ) 「TEA」を発表しました。


Tcl/Tk 8.2

 Scripticsは次のバージョンでさっそくその 「TEA」をまずTcl/Tk処理系自身に導入します。 彼らは8.1の正式公開から2か月もたたずに8.2β1を公開しました。 8.2は、ほぼ完全に8.1の上位互換で、 Tcl/Tkを純粋に言語として使うぶんには両者の違いはほとんどありません。 公開の間隔が短いことからもわかるように、ほとんどバグ修正に終始し、 また世界中のコントリビュータ (個人的に処理系を改造したり拡張したりする開発者) からの寄贈コードを積極的に導入したりしています。 8.2での進化をあえてあげるとこんな感じです。

  • stringやregexpなどのコマンドが大幅に機能拡張され、 たくさんのサブコマンドが追加されました。 またコードの改善によりこれらのコマンドの処理速度が向上したとされています。
そして8.0.0の公開からちょうどまる2年になる 1999年8月18日に、 8.2.0として公開されました。


Tcl/Tk 8.3

 8.1、8.2 と駆け足でバージョンアップした Tcl/Tk ですが、8.3 でもそう目だった仕様変更や機能拡張はありません。 しかし、細かいところでいくつかのコマンドに便利なオプションが追加されたり、 Img Patch、Dash Patch という、ユーザー寄贈ソフトウェアのパッチから便利な機能を 「逆輸入」したりしています。 日本人でかつUNIXユーザーに一番ありがたいのは、 XIMP(X Input Method Protocol)を使った日本語入力がついにパッチ不要で実用になりはじめたことでしょう。 日本語の扱いについてはまた別のページで紹介したいと思います。 また、個人的にはマイナーなツボですが、 Tkの画像がGIF形式で出力できるようになったのが嬉しいかも。 もちろんLZW圧縮は例のイヤーンな特許の制約でサポートされませんでしたが、 ランレングス圧縮型のGIFでならちゃんと出力できます。 8.3の途中からオープンソースの開発体制が採られるようになり、 2000年8月9日のバージョン8.3.2、2001年4月9日のバージョン8.3.3 と体制の激変の中にあってこまめな性能改善やバグ修正が続けられています。


Tcl/Tk 8.4では?

 8.3のバージョンアップと並行して、2000年6月6日にはバージョン8.4a1 が公開されました。しかし、当初8.4について予測されていた内容に比べて、 随分「おとなしい」バージョンアップという印象です。 実は、8.4公開の前から、Tcl/Tkの最も有名な拡張ライブラリのひとつで、 Tcl言語にオブジェクト指向(Object Oriented)のクラスの概念を導入する [incr Tcl] をTcl/Tk本体処理系に投入、という説があったのですが、 8.4では見送られることになりました。 元々オブジェクト指向拡張の導入にはTclコミュニティでも議論百出で、 異論も多かったのですが、 2001年2月頃に主に原開発者のJ.K.Ousterhoutさんの意向により、 この案件は一旦リセットされることになったようです。


TCT(Tcl Core Team)発足

 Tcl/Tk 8.4には、8.3までの中枢処理系に加えて、[incr Tcl]など、 世界的に有名な拡張ライブラリのいくつかを本体に取り込もうという試みが模索されました。 しかし、そのためにはAjubaSolutions社の開発陣だけでは限界があるとして、 8.4a1と8.3.2の公開の後、Tclコミュニティの中で、 Tcl/Tkの今後の開発体制について協議が重ねられました。 その結果、Tcl/Tkもオープンソース(Open Source)のスタイルを導入することとなり、 開発メンバーとして、原開発者J.K.Outsterhout博士と、 世界的に有名なTcl/Tk拡張ライブラリを開発したTclコミュニティの重鎮13名によって、 2000年10月初頭に「Tclコアチーム」が発足しました。 この14名を「十四使徒」と呼ぶわけですが(呼ばれてない呼ばれてない) Tcl Core Teamたる彼らの役目は、Tcl/Tkのソースやバグデータベースの監視と管理、 Tcl/Tkの開発方針について提言を行うこと、各種のイベントを取りまとめること、 などとなっています。 Tcl Core Teamによる開発ソースの管理はAjubaSolutionsから離れ、 SourceForgeに置かれることになりました。 さらに2000年10月20日、AjubaSolutions社が ITソリューション企業Interwoven社に買収されるに至り、 Tcl/Tkの開発は完全にTcl Core Teamに委任されることになりました。


Tcl/Tk 8.3→8.4の新機能

 で、実際に追加された新機能ですが、 Tcl/Tk 8.4のページにある通り、

  • 64ビットOSのファイルシステム、演算のサポート
  • lsetコマンド、spinbox、panedwindow、labelflameウィジェットの追加
  • exprコマンドにおけるeq、ne演算子の追加
あたりが目立ったところで、後は速度の改善などです。 このうちeq、ne演算子はそれぞれ==、!=演算子とよく似ていますが、 eq、neは常にオペランドを文字列として比較するのに対し、 ==、!=はオペランドのデータ型を意識して、それらの性質に応じた比較をするのが違いです。

やねうらの top
(first uploaded (forgotten) last updated 2004/03/14, KAZUHISA ESHI - MISUMI URANO)