Можно ли запустить Squeak как REPL (без GUI), где я могу вводить и оценивать выражения Smalltalk? Я знаю, что изображение по умолчанию не позволяет этого. Есть ли какая-либо документация о том, как создать минимальное изображение, доступ к которому можно получить из командной строки?
Использование Squeak из оболочки
Ответ 1
Вот (хакерское) решение: Во-первых, вам нужен OSProcess, поэтому запустите его в рабочей области:
Gofer new squeaksource:'OSProcess'; package:'OSProcess';load.
Затем поместите это в файл 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)
И, наконец, запустите эту команду:
squeak -headless path/to/squeak.image /absolute/path/to/repl.st
Теперь вы можете получать удовольствие от Smalltalk REPL. Не забудьте ввести команду:
Smalltalk snapshot:true andQuit:true
если вы хотите сохранить свои изменения.
Теперь, на объяснение этого решения:
OSProcess - это пакет, который позволяет запускать другие процессы, читать из stdin и писать в stdout и stderr. Вы можете получить доступ к stdout AttachableFileStream с помощью OSProcess thisOSProcess
(текущий процесс, ака скрипка).
Затем вы запускаете бесконечный цикл в userBackgroundPriority (чтобы другие процессы выполнялись). В этом бесконечном цикле вы используете Compiler evaluate:
для выполнения ввода.
И вы запускаете это в script с безголовым изображением.
Ответ 2
Пожалуйста, посетите: http://map.squeak.org/package/2c3b916b-75e2-455b-b25d-eba1bbc94b84 и Запустить Smalltalk на сервере без GUI?
Ответ 3
Начиная с Pharo 2.0 (и 1.3/1.4 с исправлением, описанным ниже), больше нет необходимости в хаке. Следующий фрагмент превратит ваше ванильное изображение Pharo в сервер REPL...
Из 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.
Если вы хотите, чтобы изображение всегда было REPL, поместите код в метод #startup:; в противном случае передайте script в командной строке, когда вы хотите использовать режим REPL, например:
"/path/to/vm" -headless "/path/to/Pharo-2.0.image" "/path/to/gistfile1.st"
Ответ 4
Проект http://www.squeaksource.com/SecureSqueak.html включает пакет REPL, который может обеспечить большую часть того, что вы ищете.