1. 41
  1. 7

    The Factorio devs have a seriously impressive work ethic when it comes to driving out bugs and optimizing performance. I wouldn’t blame them at all for deciding this behaviour is just a natural emergent consequence of the design decisions and tradeoffs they have made.

    1. 9

      Yeah, they’ve put a lot of thought into the belt algorithm, and I’m not sure I’d even consider this behavior wrong. I bet the belt code is thousands of lines, especially due to optimization. Some of their blog posts that talk about belt behavior:

      https://www.factorio.com/blog/post/fff-176 https://www.factorio.com/blog/post/fff-276 https://factorio.com/blog/post/fff-231 https://factorio.com/blog/post/fff-287

    2. 6

      This is analogous to type checking functions in a programming language. Most languages will assume that a function’s type signature is correct while type checking it. Thus recursive calls are assumed to return the type that the function says they will return. But there’s a sense in which this isn’t correct: if the function runs forever, then recursive calls don’t return a value of the correct type. So proof assistant languages like Coq/Idris/etc. that want to disallow non-termination must pessimistically assume that recursive calls don’t return the same type, unless it proves that they terminate.