2010-06-18 8 views
25

Kann ich Squeak als REPL (keine GUI) starten, wo ich Smalltalk-Ausdrücke eingeben und auswerten kann? Ich kenne das Standardbild nicht zulassen. Gibt es Dokumentation darüber, wie ein minimales Image erstellt wird, auf das von einer Befehlszeilen-Shell zugegriffen werden kann?Verwenden von Squeak aus einer Shell

Antwort

12

ist eine (hackish) Lösung: Zuerst müssen Sie OSProcess, so laufen diese in einem Arbeitsbereich:

Gofer new squeaksource:'OSProcess'; package:'OSProcess';load. 

Als nächstes setzen diese in der Datei repl.st:

OSProcess thisOSProcess stdOut 
    nextPutAll: 'Welcome to the simple Smalltalk REPL'; 
    nextPut: Character lf; nextPut: $>; flush. 
[ |input| 
    [ input := OSProcess readFromStdIn. 
    input size > 0 ifTrue: [ 
     OSProcess thisOSProcess stdOut 
     nextPutAll: ((Compiler evaluate: input) asString; 
     nextPut: Character lf; nextPut: $>; flush 
    ] 
    ] repeat. 
]forkAt: (Processor userBackgroundPriority) 

Und last, führen Sie diesen Befehl ein:

squeak -headless path/to/squeak.image /absolute/path/to/repl.st 

Sie jetzt Spaß mit einem Smalltalk REPL haben. Vergessen Sie nicht, den Befehl einzutippen:

Smalltalk snapshot:true andQuit:true 

wenn Sie Ihre Änderungen speichern möchten.

Nun, auf die Erklärung dieser Lösung: OSProcess ist ein Paket, das andere Prozesse ausführen, lesen von stdin, und schreiben Sie in stdout und stderr. Sie können auf den stdout AttachableFileStream mit OSProcess thisOSProcess (der aktuelle Prozess, aka Quietschen) zugreifen.

Als Nächstes führen Sie eine Endlosschleife bei userBackgroundPriority aus (damit andere Prozesse ausgeführt werden können). In dieser Endlosschleife verwenden Sie Compiler evaluate:, um den Eingang auszuführen.

Und Sie führen dies in einem Skript mit einem kopflosen Bild.

0

Das Projekt http://www.squeaksource.com/SecureSqueak.html umfasst ein Paket REPL, die viel von bieten können, was Sie suchen. Hier

+0

Oh, und der erste Link in Friedrichs Antwort enthält einen Verweis auf ExternalCommandShell, der klingt, als ob er ähnliche Funktionen bietet. –

+0

Weitere Informationen zu REPLServer von SecureSqueak finden Sie unter http://gulik.pbworks.com/w/page/7760030/REPLServer. –

7

Ab Pharo 2.0 (und 1.3/1.4 mit dem unten beschriebenen Fix) sind keine weiteren Hacks notwendig. Der folgende Ausschnitt wird Ihren Vanille Pharo Bild in einen REPL Server ...

Von https://gist.github.com/2604215:

"Works out of the box in Pharo 2.0. For prior versions (definitely works in 1.3 and 1.4), first file in https://gist.github.com/2602113" 

| command | 
[ 
    command := FileStream stdin nextLine. 
    command ~= 'exit' ] whileTrue: [ | result | 
     result := Compiler evaluate: command. 
     FileStream stdout nextPutAll: result asString; lf ]. 

Smalltalk snapshot: false andQuit: true. 

Wenn Sie das Bild wollen ein REPL immer sein, den Code in einem #startup setzen: Methode ; Andernfalls übergeben Sie das Skript an der Befehlszeile, wenn Sie möchten, REPL-Modus, wie folgt:

"/path/to/vm" -headless "/path/to/Pharo-2.0.image" "/path/to/gistfile1.st" 
Verwandte Themen