I ended up having to put moc into the cache/dfx0.12.1/ folder and give it execute.
Maybe I should be calling something other than dfx build? Or maybe I should have installed a beta version of dfx and I would have gotten this for free?
I thought of replacing moc in the cache folder but thought it’s a bit too hacky to recommend. It works quite well, you just have to think of doing it again if you ever change dfx versions.
If you build using a canister of type motoko, then setting the env var is probably the cleanest. You can also export that one in your .bashrc or some other dotfile if you want it globally.
No, it’s not in a beta version yet. The dfx beta that just released still only contains 0.7.4.
Set compiler version to “0.7.6” in vessel.dhall file and download the compiler with vessel verify --version 0.7.6 and then pass it to dfx: DFX_MOC_PATH="$(vessel bin)/moc" dfx build <canister_name>
Is there an example of when specifically using an async* declaration could cause conflicts in concurrent access to state between callers, as opposed to a standard async declaration (that wouldn’t)?
An await*-ed async* expression will only yield control to the scheduler/allow interleaving if its body directly (or any async* that it await*s) does a proper, old fashioned await.
So think of the * as this may do 0 or more awaits. If 0, there is not possibility of concurrent interaction. If 1 or more, you need to be careful. If you don’t know how many, you need to be conservative and careful and avoid leaving any shared state (visible by other concurrent calls) in an inconsistent state.