From the solidity docs:
Use the Checks-Effects-Interactions Pattern Most functions will first perform some checks (who called the function, are the arguments in range, did they send enough Ether, does the person have tokens, etc.). These checks should be done first.
As the second step, if all checks passed, effects to the state variables of the current contract should be made. Interaction with other contracts should be the very last step in any function.
Early contracts delayed some effects and waited for external function calls to return in a non-error state. This is often a serious mistake because of the re-entrancy problem explained above.
Note that, also, calls to known contracts might in turn cause calls to unknown contracts, so it is probably better to just always apply this pattern.
Does the statement "Interaction with other contracts should be the very last step in any function" also apply to "constant interactions", i.e., when calling a
view function in another contract?
I think that the answer is naturally No, however, the docs do emphasize any function.
Isn't this restriction a little too harsh? Or am I wrong?