Lisp說'Listener'是REPL(Read Eval Print Loop)。聽衆通常提供多種服務,如集成調試器,命令歷史記錄,命令解釋器等。在許多情況下,Listener在Lisp裏面使用。在某些情況下,所有輸入到REPL/Listener的代碼在執行前都會被編譯(例如Clozure CL,SBCL)。如果不是這種情況,可以按需編譯代碼(請參閱Common Lisp中的COMPILE或COMPILE-FILE函數)。
這裏我猜測開發環境是在Allegro Common Lisp中實現的,運行時在Playstation上運行。開發環境提供了一個與運行時對話的接口,並允許編譯代碼並將其下載到運行時。我猜測編譯器不能在Playstation上運行,而是在開發環境中運行。 Listener還提供了查看Playstation上正在運行的應用程序的狀態的功能,包括符號表。因此,將開發環境連接到Playstation的正在運行的應用程序,並且可以與其進行交互,包括更改數據和代碼。
因爲Lisps典型的可以在運行時加載源代碼和編譯代碼,所以「流式」代碼並不那麼困難。它只是意味着當遊戲者在遊戲中移動時加載代碼(可能在後臺)。如果代碼以某種方式組織,那麼一旦不再需要代碼,它也可以被垃圾收集。例如,如果遊戲中的「房間」是對象並且房間按名稱指向各種功能,則如果玩家在房間內,則功能可以根據需要自動加載。如果玩家離開房間,代碼可以自動或半自動卸載。在典型的Lisp中,垃圾收集器將收集未引用的代碼。在一場可能不是GC任務的遊戲中,還有其他一些更「手動」的過程。這將是GOAL運行時的功能。與無法收集卸載代碼(AFAIK)的股票JVM進行比較。
沒錯,謝謝你提醒我!一位正在做自己的分析項目的朋友告訴我要研究調試器是如何做到的。這個「長期聽力編譯器」的特別措辭確實讓我無法理解。 – GrooveStomp 2010-12-01 03:02:29
僅供參考,我找到了這個鏈接:http://gamedev.stackexchange.com/questions/221/how-to-implement-hot-swappable-c-modules進入了一些關於編輯和繼續的更多細節或用於C和C++類型語言的熱交換類型系統。 – GrooveStomp 2010-12-01 03:37:24