TclCompilerって?

TclProに含まれているバイトコードコンパイラです。

  • 機械語にコンパイル*しません*
  • 速度が速く*なりません*

TclCompilerの目的はソースを隠すことにあります。TclはJITでソースをバイトコードにコンパイルしているわけですが、このコンパイルのオーバーヘッドを軽減することにも*なりません*(tbcloadで読み込むと逆に遅いこともある)。TclProは紆余曲折の末、今は機能を追加してTclDevKitと名前を変え、ActiveStateが売っています。また、TclProはTcl8.3で止まったままですが、ソースコードとバイナリは全てSourceForgeに置かれていて自由に使うことができます。TclDevKitは8.4対応なので最新の開発環境が使いたくてソースを隠したい人はこっち買ってね♥みたいな。~

実際のところ使ってみたいのはTclCompilerだけなので、こいつだけTcl8.4対応にしてパッケージにしてみました。8.4から追加されたeqとか使えます。インストールは普通のパッケージのインストールと同じで、解凍してライブラリのパスに置いてください。

使い方

test.tcl

set str "たのしいTclプログラム $tcl_version"
puts $str

このようなファイルを用意します。

tclshをおもむろに起動して次のコマンドを入力します。

package require compiler
compiler::compile test.tcl
exit

これでtest.tbcというバイトコードにコンパイルされたファイルができます。実行するにはtbcloadが必要ですが、ActiveTclにはデフォでインストールされているので、そのまま

tclsh test.tbc

で実行することができます。Freewrap、Starpackなどで使いたいときはtbcloadを適当にくっつけてやれば動くと思います。拡張子はtbcにしていますが、tclにしても動きます。FreewrapやStarkitなどでのバイナリの配布時にはActiveTcl付属のtbcloadをコピーすればいいんじゃないかと思いますが、ActiveStateのライセンスに縛られたくない人はtbcloadもダウンロードしてください。

コメントをどーぞ

  • 早速まねして利用しました。が、使っているシステムがtcl/tk8.2版だった為か、8.4版が必要とのメッセージが出て中断してしまいました。最新の8.4版を導入して再トライしてtbc型ファイルに変換できました。更に欲をかいてtbcファイルをfreewrapでexe型に変換を試みましたがTclPro ByteCode Loader が利用できないとかで変換できませんでした。かなり期待したのですが今一歩で断念です。 -- お父さん? 2006-02-23 21:25:36 (木)
    • freewrapだと1つのラッピング実行ファイルの中から直接tbcloadを呼び出すのは無理です。tbcloadを外に出してauto_pathへパスを通すか、一度ディスク上に書き出す処理を自分で書いてください。Starkitだと、tbcloadも1つの実行ファイル中に含められるんですけどね。 -- reddog? 2006-02-24 08:30:58 (金)
  • 確かにできて参考になりました。ファイルの大きさは、元の"@@.tcl"は"@@.tbc"で2倍以上の大きさでした。"@@.tcl"に直しても動きました. -- sakura? 2006-04-08 22:21:44 (土)
  • お世話になります。tclcompiler 1.5をpackage requireすると、1.4と表示しますね。。 -- ごろ? 2007-02-13 (火) 11:45:26
    • そうなんですよね。でもソースのままなんですよね・・・。旧版はそれが気になって1.4に俺が直していたんですけど、FCのRPM見たら1.5の表記なので、そっちに統一した方がいいのかなと・・・。内部的には対応するtbcloadのバージョンと同じ1.4になるんですが、configure.inでパッケージのバージョンを1.5にしてる矛盾といいますか何といいますか。気になるならファイル名とかpkgIndex.tclを書き換えて1.4にしても問題ないと思いますけど。 -- reddog? 2007-02-13 (火) 16:56:45
  • ではDLL名とpkgIndex.tclを1.4に直して使います。 (^^; 迅速な回答に感謝します。BLTも助かります。 -- ごろ? 2007-02-13 (火) 17:26:43
  • .tcl型から.tbc型に変換できました。更に、アドバイスに従ってこのページにあるtbcloadをstarkitに組込むと、.exe型にまで変換できました。感激です。ところで、変換できた.exeは自由に頒布しても構わないのでしょうか? -- お父さん? 2007-04-15 (日) 08:09:02
    • いいんじゃないですかね。 -- reddog? 2007-04-15 (日) 11:24:58


CategoryTclTk


|New|Edit|Freeze|Diff|Backup|Upload|Copy|Rename|
Last-modified: 2007-04-15 (Sun) 11:25:00 (954d)
HTML convert time: 0.086 sec.