斯卡拉缓慢构建:开发方法,以避免(Scala slow builds: development ap

2019-07-30 13:11发布

首先,通过增量SBT版本是相当真棒,一般在<1秒范围内。 不过,有时你必须做一个完整的清洁/编译,或者,在增量的情况下建立,您更改到一个文件,然后触发其他几十个文件的编译。

这是当斯卡拉发展变得不那么...乐趣,在工作流程中产生的减速可以鼓励上下文切换(检查电子邮件,最新的线程#2等),这使得巧妙地少了一个生产

那么,什么是发展的方法,以避免为了提高全员清洁/编译版本,并且(理想情况下),转换一个文件,而无需-重新编译半的应用增量构建?

例子我能想到的:
1)是它最好有一千+线做它,所有的Scala文件或几个文件分开的吗?
2)我可以有我的蛋糕(模式)或意志膨胀的构建时间?
3)我已经pimp'd X,Y,Z库模式,或者不如另谋出路?
4)是包对象(具有implicits)构建时间杀手?
5)嵌套对象和特点?
6)隐式方法/参数或停止是聪明是明确的?

具体而言,我想抛弃蛋糕图案DAO的我想出了和合并到ScalaQuery案例类+伴侣对象+最小的数据库提供商的特征。 这本身会流下20页阶的文件。

该应用程序是足够小(120阶+ 10个java文件)到现在重构没有太多的麻烦。 显然,作为一个阶应用的增长,也将构建时间,只是根据交通线孤独。 我只是想看到修剪脂肪,哪里都不理会(即保持事物的本来面目),所以当前和未来应用从斯卡拉得到不会不必要膨胀的构建时间的表现中受益。

感谢您的黄金三镖客斯卡拉发展相一相建倍经验的一些例子。

Answer 1:

看看重新编译如何在增量SBT工作 。

这大致是这样的:

  1. 查找其公开可见的API已经改变了所有类
  2. 注销所有其家属,其家属扶养人的,等等。

为SBT的目的,“从属”既是类的用户和在相同的文件中定义的类。

欧文对foo.scala例子甚至可以是这样的,你会看到这个问题:

object foo {
  def z: Int = 8
}

object foo2 {
  class A { ... }
}

良好做法:

  • 对于单独的类单独的文件
  • 细粒度接口
  • 使用相同的抽象水平的同伴对象在他们的同伴班; 如果伴随对象通过抽象层,到达时,拉入一个单独的类和文件。


Answer 2:

我注意到,类型成员可以迫使你不会想到的地方重建。 例如:

foo.scala:

object foo {
    class A {
        type F = Float
    }
    def z: Int = 8
}

bar.scala:

object bar {
    def run { println(foo.z) }
}

改变的价值z不会强迫bar进行重新编译。 更改类型F确实,尽管bar从未提及F或甚至A 。 为什么,我不知道(斯卡拉2.9.1)。



文章来源: Scala slow builds: development approaches to avoid