1

http://selflanguage.org/のファイルを使用して Self が Ubuntu にインストールされている場合は、次を使用できます。

$ 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#

誰かがそれを機能させる方法を知っていますか?

4

1 に答える 1

3

あなたが遭遇するのは、そこにある自己の最も基本的な形です。

VM 自体が認識できるメッセージはごくわずかです。これらには、すべてのプリミティブと、bootstrap.

これらは常に利用可能なプリミティブであるため、試してみると、_Quitorのようなものが機能します。'some/path/to/self/script' _RunScript

作業環境が必要な場合は、次のいずれかを行う必要があります

  • -s次のオプションを使用して VM を起動し、スナップショットをロードします。

    Self -s mySnapshot.snap
    

    自己のホームページでスナップショットを見つけることができます。

  • ワールド構築スクリプトを実行します。objectsそのためには、self に付属するディレクトリが必要です。見つからない場合は、github ページからのものを使用してください。次に、作業ディレクトリをディレクトリに変更しobjects、ワールド ビルダー スクリプトを実行します。

    cd $PATH_TO_OBJECTS/objects
    Self -f worldBuilder.self
    

    SELF_WORKING_DIRまたは、環境変数をディレクトリを含むディレクトリにポイントし、objectssctipt を実行します。

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

これにより、すべての既知のメッセージを理解する必要がある自己の世界がブートストラップされます。

PS: 確かに、実行中の VM 内からワード ビルダー スクリプトを実行することもできます: '/path/to/dir/with/objects/worldBuilder.self' _RunScript'。ただし、SELF_WORKING_DIR が設定されていることを確認してください。

于 2012-10-04T05:28:09.110 に答える