【问题标题】:On the Self Language, how do we run code on its VM?在 Self Language 上,我们如何在其 VM 上运行代码?
【发布时间】:2012-10-03 09:29:14
【问题描述】:

如果使用http://selflanguage.org/上的文件在Ubuntu上安装Self,那么我们可以使用

$ Self
Self Virtual Machine Version 4.1.13, Sat 20 Feb 10 22:39:48 Linux
Copyright 1989-2003: The Self Group (type _Credits for credits)

for I386:  LogVMMessages = true
for I386:  PrintScriptName  = true
for I386:  Inline = true
for I386:  SICDeferUncommonBranches = false (not implemented)
for I386:  SICReplaceOnStack = false (not implemented)
for I386:  SaveOutgoingArgumentsOfPatchedFrames = true

但是,一些简单的行不能运行:

VM# 'Hello, World!' print.
A lookup error happened while sending the message
    print
to
    'Hello, World!'.
Subsequently, the lookup error message
    undefinedSelector:Receiver:Type:Delegatee:MethodHolder:Arguments:
was sent to
    <0>,
and was also not understood, causing the process to be aborted by the Self VM.

#0 (<error>:1): print = ( | self* = 'Hello, World!'. delegatee = nil. selector = 'print'. | 
"undefined selector error;
this method was automatically generated by the VM."
 )


#1 (<stdin>:1): <top level expr> = ( | self* = lobby. | 'Hello, World!' print )

或者其他人来试试插槽:

VM# _AddSlots: (| vehicle <- (|parent* = traits clonable|) |).
A lookup error happened while sending the message
    traits
to
    lobby.
Subsequently, the lookup error message
    undefinedSelector:Receiver:Type:Delegatee:MethodHolder:Arguments:
was sent to
    <0>,
and was also not understood, causing the process to be aborted by the Self VM.

#0 (<error>:1): traits = ( | self* = lobby. delegatee = nil. selector = 'traits'. | 
"undefined selector error;
this method was automatically generated by the VM."
 )


#1 (<stdin>:1): <top level expr> = ( | self* = lobby. | traits clonable )


                             ^
Self VM error: couldn't construct object literal on line 1, character 30
               ^
Self VM error: couldn't construct object literal on line 1, character 16
VM#

有人知道如何让它工作吗?

【问题讨论】:

    标签: self selflanguage


    【解决方案1】:

    你遇到的是最基础的自我。

    VM 本身只知道很少的消息。它们包括所有原语 还有一些消息,例如bootstrap

    如果你尝试一下,比如_Quit'some/path/to/self/script' _RunScript 将起作用,因为这些是始终可用的原语。

    如果你想要一个工作环境,你必须要么

    • 通过使用 -s 选项启动 VM 来加载快照:

      Self -s mySnapshot.snap
      

      您可以在自己的主页上找到快照。

    • 运行世界构建脚本。为此,您需要 objects 目录 自带的。如果找不到,请使用github page 中的那个。然后,将您的工作目录更改为objects 目录并运行世界构建器脚本。

      cd $PATH_TO_OBJECTS/objects
      Self -f worldBuilder.self
      

      或者,将SELF_WORKING_DIR 环境变量指向包含objects 目录的目录并运行sctipt。

      SELF_WORKING_DIR=$PATH_TO_OBJECTS Self -f s$PATH_TO_OBJECTS/worldBuilder.self
      

    这引导了一个自我世界,每个已知的信息都应该被理解。

    PS:当然,您也可以在正在运行的 VM 中运行 word builder 脚本:'/path/to/dir/with/objects/worldBuilder.self' _RunScript'。但请确保设置了 SELF_WORKING_DIR。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 2017-04-11
      相关资源
      最近更新 更多