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