小编Mik*_*rle的帖子

我可以对我的scala代码做什么,以便更快地编译?

我有一个大型的scala代码库.(https://opensource.ncsa.illinois.edu/confluence/display/DFDL/Daffodil%3A+Open+Source+DFDL)

它就像70K行的scala代码.我们在scala 2.11.7上

开发变得越来越困难,因为编译 - 编辑 - 编译 - 测试 - 调试周期对于小的更改来说太长了.

增量重新编译时间可能是一分钟,而且没有打开优化.有时更长.而且没有在文件中编辑很多更改.有时,一个非常小的变化会导致巨大的重新编译.

所以我的问题是:通过组织代码,我可以做些什么,这将改善编译时间?

例如,将代码分解为较小的文件?这会有帮助吗?

例如,更小的图书馆?

例如,避免使用implicits?(我们很少)

例如,避免使用特征?(我们有吨)

例如,避免大量进口?(我们有吨 - 包边界在这一点上非常混乱)

或者我真的无能为力吗?

我觉得这个很长的编译在某种程度上是由于依赖性导致了大量的重新编译,我正在考虑如何减少错误依赖......但这只是一个理论

我希望其他人可以对我们可能做的事情有所了解,这将提高增量变更的编译速度.

dependencies scala compilation

45
推荐指数
2
解决办法
3755
查看次数

什么是适当的monad或序列理解来映射和携带状态?

我正在编写一个编程语言解释器.

我需要正确的代码习惯用法来评估表达式序列以获取其值的序列,并在评估发生时将状态从一个评估器传播到下一个评估器.我想要一个函数式编程习惯用法.

它不是折叠因为结果像地图一样出现.这不是地图,因为国家支持.

我所拥有的是这个代码,我用来试图解决这个问题.首先考虑几行试验台:

// test rig
class MonadLearning extends JUnit3Suite {

  val d = List("1", "2", "3") // some expressions to evaluate. 

  type ResType = Int 
  case class State(i : ResType) // trivial state for experiment purposes
  val initialState = State(0)

// my stub/dummy "eval" function...obviously the real one will be...real.
  def computeResultAndNewState(s : String, st : State) : (ResType, State) = {
    val State(i) = st
    val res = s.toInt + i
    val newStateInt = i + 1 …
Run Code Online (Sandbox Code Playgroud)

monads state scala state-monad

14
推荐指数
1
解决办法
1960
查看次数

标签 统计

scala ×2

compilation ×1

dependencies ×1

monads ×1

state ×1

state-monad ×1