SBT是否使用快速Scala编译器(fsc)?

SBT是否使用快速Scala编译器(fsc)?,scala,sbt,Scala,Sbt,SBT是否使用fsc 出于测试目的,我正在一台相当慢的Ubuntu机器(AtomN270)上编译一个500行的程序。三个连续的编译时间分别为77秒、66秒和66秒 然后,我使用命令行中的fsc编译了该文件。现在我的时代是80年代,25年代,18年代。更好!这对我来说意味着sbt是而不是fsc。我说得对吗?如果是,为什么不使用它 我可能会尝试让sbt显式地使用fsc进行编译,尽管我不确定我是否会弄清楚配置。有人这样做过吗?当您以交互方式运行快速Scala编译器(使用或不使用其连续构建模式)时,SB

SBT是否使用fsc

出于测试目的,我正在一台相当慢的Ubuntu机器(AtomN270)上编译一个500行的程序。三个连续的编译时间分别为77秒、66秒和66秒

然后,我使用命令行中的
fsc
编译了该文件。现在我的时代是80年代,25年代,18年代。更好!这对我来说意味着sbt是而不是
fsc
。我说得对吗?如果是,为什么不使用它


我可能会尝试让sbt显式地使用fsc进行编译,尽管我不确定我是否会弄清楚配置。有人这样做过吗?

当您以交互方式运行快速Scala编译器(使用或不使用其连续构建模式)时,SBT无法从中受益,因为Scala编译器类已加载并“预热”和JIT,这是fsc的全部优势。

至少对于SBT 0.7.x,作者解释说它不如fsc快,后者缓存编译器实例(包括加载的库),而不仅仅是JITted编译器类:

我的经验还证实,fsc对于完整编译速度更快,但不会自动选择要重新编译的内容


对于SBT 0.10,我找不到关于这个问题的任何文档。

这个讨论让我意识到我使用了
SBT
错误的方法

而不是(从命令行):

…应保持
sbt
运行,并将其视为命令提示符

$ sbt
> compile
  ...
> test
它有命令历史记录,甚至可以跳回操作系统命令行。我为其他像我这样的人写了这个“答案”(来自Makefile心态),他们可能没有意识到我们服用的药丸是错的


(虽然仍然很慢。)

你不需要再做了。Sbt现在有自己的方式:


谢谢。这使得我问题的第二部分更加重要:是否有人创建了自定义操作来强制在sbt中使用fsc?Jeriho在你的帖子中指出了一个错误:“这对我意味着fsc没有使用fsc。”你如何使用sbt编译?在SBT提示符下键入“compile”,或者调用SBT两次?我在SBT提示符下键入“compile”。我不会在编译之间重新启动sbt。但即使sbt退出后,fsc也可以在后台运行。报告的编译时间清楚地表明,再次运行编译不会更快(OP不会在编译之间重新启动sbt)。Fsc保持Java&Scala库类的加载,而sbt每次都会重新加载它们。fsc的加速在Scala编程中进行了解释,并在这里传递了与sbt的比较:更新:最后使用sbt 0.12.2(或可能更早)sbt可以保持编译器本身驻留。这是默认启用的还是需要手动启用的?我认为默认启用,但是我应该检查一下。我找到的唯一的文档提到这是实验性的,但这只讨论了0.12。代码仍在中,因此支持已完成或已悄然删除(我不希望如此)。如何中断sbt命令(例如,我有一个web服务器,在测试/开发周期中更改代码时需要中断)?这将有助于添加到akauppi的answerHi@RamRajamony-你知道sbt左轮手枪吗,它听起来像你正在寻找的东西。本质上,它将sbt保持在后台,并在源代码更改时自动重新编译。寻找这种工作流,而不是中断sbt。我肯定会欢迎IntelliJ IDE和命令行的联合编译后端(我在两者中都工作)。然而,在我看来,这仍然是在概念层面上,或者我真的可以在当前sbt(0.13.8)的情况下尝试一下吗?我真的可以在sbt 0.13.13上使用客户端/服务器吗?2016年3月状态:(博客)
$ sbt
> compile
  ...
> test