开发者

Internal scala compilation. Working with interactive.Global

I am trying to retrieve the AST from scala souce file. I have simplified the code (only relevant code) to following.

trait GetAST {
     val settings = new Sett开发者_运维技巧ings
     val global = new Global(settings, new ConsoleReporter(settings))
     def getSt = "hello" //global.typedTree(src, true)
}
object Tre extends GetAST {
    def main(args:Array[String])
    {
        println(getSt.getClass)
        println("exiting program")
    }
}

The above code compiles fine and runs fine. But the problem is the program does not exit. The prompt is not displayed after printing "exiting program". I have to use ^c to exit. Any idea what the problem might be


I believe Michael is correct, the compiler uses Threads and therefore the JVM doesn't just exit.

The good news is that interactive.Global mixes in interactive.CompilerControl trait whose askShutdown method you can call at the end of your main to let the program exit.


Without knowing what Settings, Global and ConsoleReporter are nobody can give you an exact answer. I would guess that at least one of them is creating a thread. The JVM waits until all threads are done (or all running are deamon threads). See here.

I would bet if you comment out the settings and global lines it will exit as expected.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜