Smalltalk 使用外壳发出的吱吱声

Smalltalk 使用外壳发出的吱吱声,smalltalk,squeak,pharo,Smalltalk,Squeak,Pharo,我是否可以将Squeak作为REPL(无GUI)启动,在那里我可以输入和计算Smalltalk表达式?我知道默认图像不允许这样做。是否有关于如何构建可从命令行shell访问的最小映像的文档?请访问: 而且该项目包括一个REPL包,可以提供您所需的大部分内容。以下是一个(黑客)解决方案: 首先,您需要OSProcess,因此请在工作区中运行: Gofer new squeaksource:'OSProcess'; package:'OSProcess';load. 接下来,将其放入repl.st

我是否可以将Squeak作为REPL(无GUI)启动,在那里我可以输入和计算Smalltalk表达式?我知道默认图像不允许这样做。是否有关于如何构建可从命令行shell访问的最小映像的文档?

请访问: 而且

该项目包括一个REPL包,可以提供您所需的大部分内容。

以下是一个(黑客)解决方案: 首先,您需要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。您可以使用
OSProcess thisoprocess
(当前进程,也称为squeak)访问stdout AttachableFileStream

接下来,以userBackgroundPriority运行无限循环(以便让其他进程运行)。在这个无限循环中,使用
编译器求值:
执行输入

您可以在一个带有无头图像的脚本中运行它。

从Pharo 2.0(和1.3/1.4,以及下面描述的修复程序)开始,没有必要再进行黑客攻击。下面的代码片段将把您的vanilla Pharo映像转换为REPL服务器

发件人:

如果希望映像始终是REPL,请将代码放入#startup:method;否则,在需要REPL模式时,在命令行传递脚本,如:

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

这并不能真正回答问题。第一个环节基本上与问题无关。第二个是关于服务器操作的问题。但这个问题,据我理解,是关于运行类似于
irb
python
的Squeak,以便与stdin和stdout上的终端交互。哦,Friedrich响应中的第一个链接包括对ExternalCommandShell的引用,听起来它提供了类似的功能。有关SecureSqueak的REPLServer的更多信息,请访问。
"/path/to/vm" -headless "/path/to/Pharo-2.0.image" "/path/to/gistfile1.st"