Bytecode

Tcl/TKは、Version 8.0からスクリプトをオンザフライでbytecodeにコンパイルしながら実行するようになりました。
Tcl/Tk 8.0以上のインタプリタはbytecodeを実行するため、Version7.5に比べて実行速度が劇的に向上しました。
その他の性能改善の結果、Tcl/Tk 8.4a4は、Tcl/Tk8.0.5から20%以上高速になっているそうです。
また、TclProのコンパイラを使うと、Tclスクリプトをbytecodeに直接コンパイルできるので、更なる性能の向上
が期待できそうです?。また、bytecode化によって企業もしくは個人の知的所有権の保護が可能になりました。

一方、今までフリーで使えていたTclProは、現在、有償版のバイナリしか入手できなくなっています。
しかし、最近になって、ビットウォークからフリー版のTclProを提供するというアナウンスがありました。
Tcl/Tkユーザにとっては朗報です。リリースされるのが楽しみです。

ベンチマーク

Bytecodeにコンパイルしたコードを直接実行すると、どの程度性能は向上するのでしょうか?
TclスクリプトとTclPro 1.5.0.2でコンパイルしたbytecodeをActiveTcl8.3.4.2で実行してみました。
ベンチマークテストは、MetaCardのPerformance Benchmarksを使いました。

ファイル実行時間
Tclスクリプト(.tcl)3分39秒
Bytecode(.tbc)3分41秒

意外にも、bytecodeを直接実行した方が、若干遅いという結果になりました。
詳細は以下の通りです。

ファイル項目実行時間
Tclスクリプト(.tcl)1000000 repeats1.162秒
10000 iterative factorial(100)50.552秒
10000 iterative factorial(100) with 'if'50.924秒
10000 recursive factorial(100)87.946秒
1000 exec calls17.545秒
2000 100-line file writes and reads6.189秒
10 stem generation took5.078秒
total time was219.396秒
Bytecode(.tbc)1000000 repeats1.151秒
10000 iterative factorial(100)50.573秒
10000 iterative factorial(100) with 'if'50.943秒
10000 recursive factorial(100)89.609秒
1000 exec calls17.555秒
2000 100-line file writes and reads6.229秒
10 stem generation took5.138秒
total time was221.198秒
※ Windows XP + Pentium3 800MHzで測定しました。

恐らく、bytecodeを直接実行する場合、以下のことが考えられます。

理由ははっきりしませんが(^^;)、
bytecodeのメリットは、知的所有権の保護のみになると言えるかもしれません。

関連記事