【问题标题】:Programmatically get the execution order of objects inside a method?以编程方式获取方法内对象的执行顺序?
【发布时间】:2013-01-25 10:42:13
【问题描述】:

我有这段代码(取自 ProfStef,但可以是任何类的任何方法)。我如何以编程方式获取 Squeak/Pharo 执行对象的顺序。

知道 Smalltalk 文档中的执行顺序,但是如果我在正在构建的应用程序中需要这些信息怎么办。本质上是使用它来构建一个执行图,以显示代码外观和执行方式之间的差异。

PS。我需要大规模地完成这项工作......我不能手工完成。

tutorial: aTutorialClass lesson: aSelector 
    | tutorial | 
    tutorial := aTutorialClass new. 
    self player tutorial: tutorial. 
    self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).

输出将是一棵类似于此的树

做这件事

另一个对象[做这件事]

finalobject [ anotherobject [something do this] ]。 // 这就是原始代码的样子。

【问题讨论】:

    标签: smalltalk pharo squeak


    【解决方案1】:

    查看我们的AST interpreter,它将让您对 Smalltalk 代码的执行进行细粒度控制。

    使用底层 AST 作为执行格式,很容易将当前执行的代码映射回源代码。

    【讨论】:

    • 看来你是对的,magaloma.seasidehosting.st/AST-Core 它似乎有所有需要的类。同样从我在编译时读到的内容来看,它确实是“愚蠢的”,您也可以使用它来生成执行树,例如代码。如果您有时间,请从您网站上的联系表中向您发送一封电子邮件,以扩展讨论。
    【解决方案2】:

    Pharo 和其他几种方言中有一个字节码解释器。在 Pharo 中,查看 ContextPart 类>>trace:on:。这是一个运行示例:

    ContextPart trace: [3 factorial]
    

    【讨论】:

    • 哇,当你添加它时,我从未见过这个答案。刚刚测试了一下,挺有意思的。我尝试了 ContextPart trace: [Transcript open],它显示了完成该操作所执行的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多