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