Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
160 lines (113 sloc) 7.18 KB
(tof)
2003/06/19 Hidetoshi NAGAI
本ドキュメントには古い tcltk ライブラリ,tcltklib ライブラリの説明
が含まれていますが,その記述内容は古いものとなっています.
まず,現在の Ruby/Tk の中心である tk.rb は wish を呼び出したりはせ
ず,tcltklib ライブラリを wrap して動作するものとなっています.その
ため,古い説明記述で述べられているようなプロセス間通信によるオーバ
ヘッドは存在しません.
現在の tcltklib ライブラリでも,Tcl/Tk の C ライブラリをリンクして
直接に動かすことで,オーバヘッドを押さえつつ Tcl/Tk インタープリタ
のほぼ全機能(拡張ライブラリを含む)を使える点は同じです.しかし,
その役割はほぼ「tk.rb 以下のライブラリを効果的に働かせるためのもの」
と見なされており,その目的でメンテナンスされています.
tk.rb の高機能化に伴って,中水準のライブラリである tcltk ライブラリ
(tcltk.rb)はその存在意義を減じており,現在ではメンテナンスは行わ
れていません.
なお,古い説明ではバインディングにおけるスクリプトの追加はできないこ
ととなっていますが,現在の tk.rb ではこれも可能であることを補足して
おきます.
以下がライブラリの古い説明文書です.
==============================================================
tcltk ライブラリ
tcltklib ライブラリ
Sep. 19, 1997 Y. Shigehiro
以下, 「tcl/tk」という表記は, tclsh や wish を実現している, 一般でいう
ところの tcl/tk を指します. 「tcltk ライブラリ」, 「tcltklib ライブラ
リ」という表記は, 本パッケージに含まれる ruby 用のライブラリを指します.
[ファイルについて]
README.euc : このファイル(注意, 特徴, インストールの方法).
MANUAL.euc : マニュアル.
lib/, ext/ : ライブラリの実体.
sample/ : マニュアル代わりのサンプルプログラム.
sample/sample0.rb : tcltklib ライブラリのテスト.
sample/sample1.rb : tcltk ライブラリのテスト.
tcl/tk (wish) でできそうなことを一通り書いてみました.
sample/sample2.rb : tcltk ライブラリのサンプル.
maeda shugo (shugo@po.aianet.ne.jp) 氏による
(`rb.tk' で書かれていた) ruby のサンプルプログラム
http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz
を tcltk ライブラリを使うように, 機械的に変更してみました.
demo/ : 100 本の線を 100 回描くデモプログラム.
最初に空ループの時間を測定し, 続いて実際に線を引く時間を測定します.
tcl/tk は(再)描画のときに backing store を使わずに律義に 10000 本(?)
線を引くので, (再)描画を始めると, マシンがかなり重くなります.
demo/lines0.tcl : wish 用のスクリプト.
demo/lines1.rb : `tk.rb' 用のスクリプト.
demo/lines2.rb : tcltk ライブラリ用のスクリプト.
[注意]
コンパイル/実行には, tcl/tk の C ライブラリが必要です.
このライブラリは,
ruby-1.0-970701, ruby-1.0-970911, ruby-1.0-970919
FreeBSD 2.2.2-RELEASE
およびそのパッケージ jp-tcl-7.6.tgz, jp-tk-4.2.tgz
で作成/動作確認しました. 他の環境では動作するかどうかわかりません.
TclTkLib.mainloop を実行中に Control-C が効かないのは不便なので, ruby
のソースを参考に, #include "sig.h" して trap_immediate を操作していま
すが, ruby の README.EXT にも書いてないのに, こんなことをして良いのか
どうかわかりません.
-d オプションでデバッグ情報を表示させるために, ruby のソースを参考に,
debug という大域変数を参照していますが, ruby の README.EXT にも書いて
ないのに, こんなことをして良いのかどうかわかりません.
extconf.rb は書きましたが, (いろいろな意味で)これで良いのか良く分かり
ません.
[特徴]
ruby から tcl/tk ライブラリを利用できます.
tcl/tk インタプリタのスクリプトは, 機械的に tcltk ライブラリ用の ruby
スクリプトに変換できます.
(`tk.rb' との違い)
1. tcl/tk インタプリタのスクリプトが, どのように, tcltk ライブラリ用の
ruby スクリプトに変換されるかが理解できれば, マニュアル類が無いに等
しい `tk.rb' とは異なり
tcl/tk のマニュアルやオンラインドキュメントを用いて
効率良くプログラミングを行うことができます.
記述方法がわからない, コマンドに与えるパラメータがわからない...
- Canvas.new { ... } と, なぜイテレータブロックを書けるの??
- Canvas の bbox は数値のリストを返すのに, xview は文字列を返すの??
と, いちいち, ライブラリのソースを追いかける必要はありません.
2. 個々の機能(オプション)を個別処理によりサポートしており, そのためサ
ポートしていない機能は使うことができない(本当は使えないこともないの
ですが) `tk.rb' とは異なり, tcl/tk インタプリタで可能なことは
ほとんど
ruby からも実行できます. 現在, ruby から実行できないことが確認され
ているのは,
bind コマンドでスクリプトを追加する構文
「bind tag sequence +script」
^
のみです.
- `. configure -width' をしようとして, `Tk.root.height()' と書い
たのに, `undefined method `height'' と怒られてしまった. tk.rb を
読んでみて, ガーン. できないのか...
ということはありません.
3. wish プロセスを起動しプロセス間通信で wish を利用する `tk.rb' とは
異なり, tcl/tk の C ライブラリをリンクし
より高速に (といっても, 思った程は速くないですが)
処理を行います.
4. `tk.rb' ほど, 高水準なインターフェースを備えていないため, tcl/tk イ
ンタプリタの生成等
何から何まで自分で記述
しなければなりません(その代わり, tcl/tk ライブラリの仕様通り,
tcl/tk インタプリタを複数生成することもできますが).
インターフェースは(おそらく) ruby の思想に沿ったものではありません.
また, スクリプトの記述は
ダサダサ
です. スクリプトは, 一見, 読みづらいものとなります. が, 書く人にとっ
ては, それほど煩わしいものではないと思います.
[インストールの方法]
0. ruby のソースファイル(ruby-1.0-なんたら.tgz)を展開しておきます.
1. ruby-1.0-なんたら/ext に ext/tcltklib をコピーします.
cp -r ext/tcltklib ???/ruby-1.0-なんたら/ext/
2. ruby のインストール法に従い make 等をします.
3. ruby のライブラリ置場に lib/* をコピーします.
cp lib/* /usr/local/lib/ruby/
(eof)
Jump to Line
Something went wrong with that request. Please try again.