JuliaParallel / JuliaParallel/Dagger.jl
`@spawn` has confusing move semantics
- Dominant language
- Julia
- Stars
- 723
- Forks
- 90
- Avg merge
- 1d 37m
- Merged PRs (30d)
- 9
Description
Note that
```
◖◗ Dagger.@spawn single=2 println(myid())
EagerThunk (running)
◖◗ From worker 2: 1
◖◗
◖◗ Dagger.spawn(() -> println(myid()), single=2)
EagerThunk (running)
◖◗ From worker 2: 2
```
I think what's happening here is that in the former case it is evaluating `myid()` on process 1 and the function executed on worker 2 is just `println(1)`.
This seems like a problem, it's hard to guess that these examples would be different. I suggest that `@spawn` should match `spawn` so that its arguments can be read as if it were the function body passed to `spawn`. Otherwise I think it will need a lot of documentation.
A stronger argument might be that `Distributed.@spawnat` already works as I'm suggesting:
```
◖◗ @spawnat 2 println(myid());
◖◗ From worker 2: 2
```
(My suggestion is clearly badly breaking at least in principle, so this is tricky.)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.