Jacl與Jython性能測評總結
一、Jacl 與Jython歷史與由來
在一些Java應用的需求中,集成某種腳本語言的支持能夠帶來很大的方便。例如,用戶可能想要編寫腳本程序驅動應用、擴展應用,或為了簡化操作而編寫循環和其他流程控制邏輯。在這些情況下,一種理想的解決方案是在Java應用中提供對腳本語言解釋器的支持,讓腳本語言解釋器讀取用戶編寫的腳本并在應用提供的類上運行這些腳本。為了實現這個目標,你可以在Java應用所運行的JVM中,運行一個基于Java的腳本語言解釋器。Jacl與Jython便是Java腳本語言。Jacl為Tcl的Java實現,Jython為Python的Java實現。 (其他的腳本語言:Rhino:JavaScript的Java實現。 BeanShell:一個用Java編寫的Java源代碼解釋器。)
二、Jacl與Jython性能比較
1)Jacl與Jython性能之可用性比較:
Jacl:如果你想要在Tk腳本代碼中創建用戶界面元素,請訪問Swank project,它把Java的Swing部件封裝到了Tk里面。發行版不包含Jacl腳本的調試器。
Jython:支持用Python語法編寫的腳本。Python利用縮進層次表示代碼塊的結構,而不是象其他許多語言一樣用花括號或開始-結束符號表示控制流程。
2)Jacl與Jython性能之運行測試:
為一致起見,測試程序的每一種腳本語言的版本都盡量地相似。測試在一臺Toshiba Tecra 8100筆記本上進行,CPU是700-MHz的Pentium III處理器,RAM是256 MB。調用JVM時,堆棧大小使用默認值。
表格一:從1到1000000計數的for循環:
解釋器類型 | 時間 |
Jacl | 140 秒 |
Jython | 1.2 秒 |
表格二:比較整數是否相等,1000000次:
解釋器類型 | 時間 |
Jacl | 300 秒 |
Jython | 4 秒 |
表格三:分配并初始化100000個元素的數組:
解釋器類型 | 時間 |
Jacl | 25 秒 |
Jython | 1 秒 |
表格四:分配并初始化500 X 500 個元素的數組:
解釋器類型 | 時間 |
Jacl | 45 秒 |
Jython | 1秒 |
表格五:在JVM內初始化解釋器所需要的內存:
解釋器類型 | 時間 |
Jacl | 大約1M |
Jython | 大約4M |
本項評測證明Jython性能最好,Jacl性能可能是令人難以接受的。如果腳本程序重復執行代碼的機會很少,那么這些解釋器在速度上的相對差異就不那么重要了。值得指出的是,Jython看來沒有為聲明二維數組提供內建的直接支持,但這個問題可以通過一個“數組的數組”結構解決。
3)Jacl與Jython性能之集成的難易程度(測試)
本項評測包含兩個任務。第一個任務是比較對各種腳本語言解釋器進行實例化時需要多少代碼;第二個任務是編寫一個完成如下操作的腳本:實例化一個Java JFrame,放入一個JTree,調整大小并顯示出JFrame。盡管這些任務都很簡單,但由此我們可以看出開始使用一個解釋器要做多少工作,還可以看出為解釋器編寫的腳本代碼在調用Java類時到底是什么樣子。
Jacl性能測試
要把Jacl集成到Java應用,首先要把Jacl的Jar文件加入到Java的CLASSPATH,然后在執行腳本之前,創建Jacl解釋器的實例。下面是創建Jacl解釋器實例的代碼:
Jacl代碼清單:
下面的Jacl腳本代碼顯示了如何創建一個JTree,把它放入JFrame,調整大小并顯示JFrame:
- import tcl.lang.*;
- public class SimpleEmbedded {
- public static void main(String args[]) {
- try {
- Interp interp = new Interp();
- } catch (Exception e) {
- }
- }
Jacl代碼清單
- package require java
- set env(TCL_CLASSPATH)
- set mid [java::new javax.swing.JTree]
- set f [java::new javax.swing.JFrame]
- $f setSize 200 200
- set layout [java::new java.awt.BorderLayout]
- $f setLayout $layout
- $f add $mid
- $f show
Jython性能測試
要把Jython集成到Java應用,首先要把Jython的Jar文件加入到Java的CLASSPATH,然后在執行腳本之前,創建一個Jython解釋器的實例。完成這個任務的Jython代碼很簡單:
Jython代碼清單:
下面的Jython腳本代碼顯示了如何創建JTree,把它放入JFrame,然后顯示出JFrame。下面的代碼不包含調整大小的操作:
- import org.python.util.PythonInterpreter;
- import org.python.core.*;
- public class SimpleEmbedded {
- public static void main(String []args) throws PyException {
- PythonInterpreter interp = new PythonInterpreter();
- }
- }
Jython代碼清單
- from pawt import swing
- import java, sys
- frame = swing.JFrame('Jython example', visible=1)
- tree = swing.JTree()
- frame.contentPane.add(tree)
- frame.pack()
從上面的說明可以看出,在Java應用中集成任何一種解釋器都是很容易的。同時,只要你掌握了腳本語言的語法,就能夠高效地編寫出腳本程序。
Jacl與jython性能測評總結:
與其他解釋器相比,Jacl的發展速度看起來特別慢,但如果你必須使用Tcl腳本,使用Jacl解釋器仍舊是值得的。Jython性能比較強大,是速度最快的一種。唯一真正令人擔心的是Jyphon的流程控制語法,不過,你可能會在乎這些語法上的差異,也可能不會在乎。就象Jacl一樣,由于需要學習的新知識比較多,用Jython編寫腳本可能需要比JavaScript和BeanShell更長的學習時間。如果你想要用Python編寫比較復雜的腳本,就應該買一本書。Python是一種廣受歡迎的編程語言,因此可供選擇的書籍也相當多。
【編輯推薦】