如何调整swift表达式编译超时?

时间:2016-03-12 22:19:29

标签: xcode swift clang

当表达式过于复杂时,Swift中存在编译错误:Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

有谁知道如何调整此超时(“合理时间”)?很高兴看到这个提示,它非常有用,但我不希望我的程序在某些随机情况下无法编译,例如:在慢速机器上。

任何人都有任何想法如何实现它?或者我应该不再担心吗?

1 个答案:

答案 0 :(得分:3)

该诊断实际上并非时间。它是关于记忆的。因此,计算机的速度并不重要。很少需要担心它在不同的机器上的表现会有所不同(见下文)。

来自CSSolver.cpp

  // If the solver has allocated an excessive amount of memory when solving for
  // this expression, short-circuit the binding operation and mark the parent
  // expression as "too complex".
  if (cs.TC.Context.getSolverMemory() >
        cs.TC.Context.LangOpts.SolverMemoryThreshold) {
    cs.setExpressionTooComplex(true);
    return true;
  }

setExpressionTooComplex是该诊断的起源)

当前SolverMemoryThreshold约为15MB。

因为Swift被移植到不同的架构,所以有可能(尽管IMO非常不可能)你可以在某些平台上得到这个错误,而不是其他平台。一般来说,这可以在另一个方向上工作,而不是你在思考。例如,在此诊断触发之前,实际上可以允许32位系统进一步沿着兔子洞移动(因为32位机器通常为数据结构分配更少的内存)。但是如果你试图评估单个表达式达到15 MB,那么你可能只需要几次递归就可以解决它。所以这将是一个非常令人惊讶且不太可能的结果。