【问题标题】:Is it possible to manually exit out of Smalltalk vm with return code?是否可以使用返回码手动退出 Smalltalk vm?
【发布时间】:2018-01-19 10:06:00
【问题描述】:

基本上,GNU Smalltalk 3.2.5 中是否有某种类似 exit(-1) 的函数?或者有没有办法配置它,如果它在执行过程中遇到错误,它会返回非零退出代码?我希望能够检测gst 是否成功执行了 st 代码文件,或者是否发生了错误(语法或运行时/异常)。

【问题讨论】:

    标签: smalltalk gnu-smalltalk


    【解决方案1】:

    是的,可以使用ObjectMemory quit: 0ObjectMemory 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 对它的 VM 之外的任何东西都没有真正的概念,它的 VM 也可能在某些 PC 上运行,并且也需要有一种与之通信的方法。但是gst 已经支持self halt 停止执行,所以我想知道是否有类似self halt:exitCode 的东西(或者为什么没有)。仅将其打印到标准输出显然不是一种选择,因为没有可靠的方法来区分代码本身输出的文本和这种临时错误代码(特别是如果您对程序输出几乎没有控制权,即如果它是外部的)
    • weel,如果程序没有完全控制标准错误,也不是很理想(此外,编译器可能会在此处忽略一些语法错误)。问题不在于日志记录,而在于 Smalltalk 与外部操作系统的通信(即,exitCode 经常用于判断程序是否成功,并且许多其他程序确实在正确设置了 exitCode)。无法与外部操作系统/系统正确通信只会限制 Smalltalk 作为一种语言的用例。
    • 谢谢!这正是我想要的!不是很容易找到=)
    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多