是否可以使用返回码手动退出Smalltalk虚拟机?

问题描述:

基本上,GNU Smalltalk 3.2.5中有没有某种类型的exit(-1)函数?或者有没有一种方法来配置它,以便如果在执行期间遇到错误,它会返回非零退出代码?我希望能够检测到gst是否成功执行st代码文件,或者是否发生错误(语法或运行时/异常)。是否可以使用返回码手动退出Smalltalk虚拟机?

是,能够使用ObjectMemory quit: 0ObjectMemory quit: 1source codeObjectMemory 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 
    ] 

搜索在源代码中“退出”将提供在动作这样的例子。

+0

嗯,据我所知,Smalltalk并没有真正强大的虚拟机之外的任何概念,并且虚拟机也可能在某些PC上运行,并且需要与其进行通信。但是'gst'已经支持'self halt'来停止执行,所以我想知道是否有'self halt:exitCode'(或者为什么没有)之类的东西。只需将它打印到标准输出,显然不是一种选择,因为是通过代码本身和这样一个临时的错误代码(特别是如果你有过程序的输出,即难以控制,如果是外部)输出的文本区分 没有可靠的方法 –

+0

weel,如果程序没有完全控制stderr(也是,编译器可能会出现一些语法错误),那么它也不是很理想。现在的问题不是关于日志记录,但关于Smalltalk中的与外OS通信(即退出码经常被用来告诉程序是否成功与否,真正的退出码了很多其他程序的正确设置)。无法与外部os /系统正确通信仅限制Smalltalk作为语言的用例。 –

+0

@DanM。见编辑的答案。 –