Swift REPL:如何保存/加载REPL状态?(又名暂停/恢复,快照,克隆)

joe*_*son 5 read-eval-print-loop swift

在Swift REPL中,保存REPL状态的方法是什么?

  • 例如,我想在REPL中做一堆工作,然后保存它,所以我可以稍后加载它.

  • 这个概念可能被命名为save/load,suspend/resume,snapshot/clone,serialize/deserialize等.

让我走向这个的任何解决方案都会有所帮助,即使它是这样的黑客:

  • 记录所有历史记录行,然后在另一个REPL中重播它们.

  • 序列化所有对象,然后在另一个REPL中反序列化它们.

  • 快照RAM或VM,然后将其克隆到另一台计算机.

  • 保存全局状态的核心映像,然后再执行.

我的目标是在一台机器上保存REPL工作,然后将其加载到另一台机器上.

我只需要最终状态; 我不需要堆栈,历史或句柄等.

XCode Playgrounds具有类似的功能,使用"保存",外部化内容.

小智 3

也许这可以帮到你一点。

刚刚发现实际上 Swift REPL 将当前会话保存在文件中。

输入__FILE__REPL,您将看到会话文件。

  1> __FILE__
$R0: String = "/var/folders/6j/xs_0g88d55dgprjrwdws898w0000gn/T/lldb/3869/repl1.swift"
Run Code Online (Sandbox Code Playgroud)

您可以查看文件内容,它会持续跟踪当前的 REPL 会话。我确信您可以构建一行 Swift 代码来将该文件复制到您的保存文件夹中,您必须在会话结束时运行该文件夹。

顺便说一句,在该临时文件夹中,repl.swift实际上比repl1.swift. 您可能想要复制repl.swift.

  • 这在 Swift 3.1 中不再适用。`__FILE__` 已重命名为 `#file`,它只会输出 `repl.swift`。但是,您可以使用“find /var/folders/ -name repl.swift”并查看匹配项。 (2认同)