要使用ABCL,首先要先準備JAVA運行時環境(JRE, Java Runtime)。如果是使用Windwos平臺的,可以參考Windows怎麼安裝JAVA環境?;Linux平臺的可以參考Linux怎麼安裝JAVA環境?
然後很簡單的只要到ABCL官網下載主程式再解壓縮即可,abcl-bin-1.9.2.tar.gz 或 abcl-bin-1.9.2.zip 都可以,通常Windows因爲沒有tar工具,所以選擇zip檔案下載;Linux則可能沒有unzip工具,可以選擇tar檔案下載。但不要選擇到abcl-contrib-1.9.2.jar,這只包含一些開發用的Package,並不包含可運行的ABCL。
開啓終端機,切換到解壓縮後的目錄,然後輸入java -jar abcl.jar,就可以進入到REPL的交互式文字界面環境裡:
$ java -jar abcl.jar
Failed to introspect virtual threading methods: java.lang.reflect.InaccessimonitorbleObjectException: Unable to make public java.lang.Thread java.lang.ThreadBuilders$VirtualThreadFactory.newThread(java.lang.Runnable) accessible: module java.base does not "opens java.lang" to unnamed module @7927943b
Armed Bear Common Lisp 1.9.2
Java 25.0.4 Ubuntu
OpenJDK 64-Bit Server VM
Low-level initialization completed in 0.487 seconds.
Startup completed in 2.717 seconds.
Loading /home/user/.abclrc completed in 19.186 seconds.
Type ":help" for a list of available commands.
CL-USER(1):
在我執行的訊息中有
Failed to introspect virtual threading methods: java.lang.reflect.InaccessibleObjectException: Unable to make public java.lang.Thread java.lang.ThreadBuilders$VirtualThreadFactory.newThread(java.lang.Runnable) accessible: module java.base does not "opens java.lang" to unnamed module @7927943b錯誤訊息,可以在啓動時增加--add-opens java.base/java.lang=ALL-UNNAMED,變成java --add-opens java.base/java.lang=ALL-UNNAMED -jar abcl.jar
在Linux,可以將指令設置成別名:
alias abcl="java -jar <abcl.jar檔案位置>"
至於Windows上,我則會在任意%PATH%位置增加一份批次檔abcl.bat:
java -jar <abcl.jar檔案位置> %*
在REPL環境,可以直接輸入"Hello ABCL"(有雙引號),或是使用#'print函式(print "Hello ABCL"),更正式的做法是(format t "Hello ABCL")。所以對於「Hello ABCL」有這麼以下幾種做法:
"Hello ABCL"
(print "Hello ABCL")
(format t "Hello ABCL")
接著輸入(quit)或(exit)離開REPL環境。你可以將上述程式碼儲存成hello-abcl.lisp的純文字檔案,然後輸入abcl --load hello-abcl.lisp --eval '(quit)'去執行。不過第一種做法在RELP顯式的其實是「返回值」,而非輸出結果,因此不會顯示「Hello ABCL」
可以進一步將程式修改成:
(defvar *name*)
(format t "What's your name ?~%> ")
(finish-output)
(setf *name* (read-line))
(format t "Hello, ~A~%" *name*)
這段程式會詢問使用者的名字,並對其打招呼。
$ abcl --noinform --load hello-abcl.lisp --eval '(quit)'
What's your name ?
> lagagain
Hello, lagagain
abcl.jar
現在可以直接把上面的互動程式存成hello-abcl.lisp,並執行:
abcl --noinform --load hello-abcl.lisp --eval '(quit)'
能看到程式詢問名字並印出問候語,就代表ABCL執行環境已經準備完成。下一篇將從另一個熟悉的起點開始,使用JavaFX完成第一個視窗程式:Hello FX。