***TclCompilerって? [#le12d08f]
TclProに含まれているバイトコードコンパイラです。~
-機械語にコンパイル*しません*
-速度が速く*なりません*

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

実際のところ使ってみたいのはTclCompilerだけなので、こいつだけTcl8.4対応にしてパッケージにしてみました。8.4から追加されたeqとか使えます。インストールは普通のパッケージのインストールと同じで、解凍してライブラリのパスに置いてください。~
-旧版~
http://reddog.s35.xrea.com/software/tclcompiler1.4.zip (Windows用)~

-最新(2007-02-06) CVS HEADバージョン~
http://reddog.s35.xrea.com/software/tclcompiler-1.5-win32-bin.zip ~
http://reddog.s35.xrea.com/software/tbcload-1.4-win32-bin.zip ~
~

***使い方 [#n16ed92d]
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もダウンロードしてください。

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

#comment
----
[[CategoryTclTk]]

|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.001 sec.