On 08/25/2015 10:47 AM, Niall Douglas wrote:
I'm still unsure what "51 opcodes <= Value transport <= 32 opcodes" is supposed to mean. Min/max code bloat for a monad<int> or future<int>. So the minimum is 51 and the maximum is 32? Correct. That non-sensical outcome is due to definition. The minimum code bloat _should_ result from a known-memory outcome where the compiler knows for a fact memory has some value, and therefore can prune branching down to no code output at all. The maximum code bloat is where memory has unknown state, and therefore the compiler must generate all possible branches for that unknown state.
Compiler optimisers are not as deterministic as perhaps they should be, so you get this weird outcome where the compiler generates more bloat for the known case than the unknown case. Which is a compiler optimiser bug, strictly speaking.
Niall, I don't want to wade into the lively discussion on your review, but I think the confusion is coming from the fact that the inequality signs are in the wrong direction. It says that the time taken by the transport is at least 51 instructions but at most 32. I believe that's all that is being questioned here. Good luck with the review. I will almost certainly never use it, but it looks like a neat library. Jason