зеркало из https://github.com/github/ruby.git
1732b6fa4e
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e |
||
---|---|---|
.. | ||
demo | ||
lib | ||
sample | ||
MANIFEST | ||
MANUAL.euc | ||
README.euc | ||
depend | ||
extconf.rb | ||
stubs.c | ||
tcltklib.c |
README.euc
(tof) 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)