是否可以使用返回码手动退出Smalltalk虚拟机?
问题描述:
基本上,GNU Smalltalk 3.2.5中有没有某种类型的exit(-1)
函数?或者有没有一种方法来配置它,以便如果在执行期间遇到错误,它会返回非零退出代码?我希望能够检测到gst
是否成功执行st代码文件,或者是否发生错误(语法或运行时/异常)。是否可以使用返回码手动退出Smalltalk虚拟机?
答
是,能够使用ObjectMemory quit: 0
或ObjectMemory quit: 1
等source code为ObjectMemory quit:
ObjectMemory class >> quit: exitStatus [
"Quit the Smalltalk environment, passing the exitStatus integer
to the OS. Files are closed and other similar cleanups occur."
<category: 'builtins'>
<primitive: VMpr_ObjectMemory_quit>
SystemExceptions.WrongClass signalOn: exitStatus mustBe: SmallInteger
]
搜索在源代码中“退出”将提供在动作这样的例子。
嗯,据我所知,Smalltalk并没有真正强大的虚拟机之外的任何概念,并且虚拟机也可能在某些PC上运行,并且需要与其进行通信。但是'gst'已经支持'self halt'来停止执行,所以我想知道是否有'self halt:exitCode'(或者为什么没有)之类的东西。只需将它打印到标准输出,显然不是一种选择,因为是通过代码本身和这样一个临时的错误代码(特别是如果你有过程序的输出,即难以控制,如果是外部)输出的文本区分 没有可靠的方法 –
weel,如果程序没有完全控制stderr(也是,编译器可能会出现一些语法错误),那么它也不是很理想。现在的问题不是关于日志记录,但关于Smalltalk中的与外OS通信(即退出码经常被用来告诉程序是否成功与否,真正的退出码了很多其他程序的正确设置)。无法与外部os /系统正确通信仅限制Smalltalk作为语言的用例。 –
@DanM。见编辑的答案。 –