JuliaParallel / JuliaParallel/Dagger.jl

`@spawn` has confusing move semantics

Open
#357 8 comments 0 reactions 1 assignee Claimed by @jpsamaroo View on GitHub
documentation eager api enhancement help wanted
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.