@@ -7,29 +7,43 @@ that they are not compatible at all. E.g. you cannot
77you as a package developer want to make your package support both Distributed
88and DistributedNext, we suggest using
99[ Preferences.jl] ( https://juliapackaging.github.io/Preferences.jl/stable/ ) to
10- choose which library to load:
10+ choose which package to load.
11+
12+ Here's an example for a package named Foo.jl:
1113``` julia
12- import Preferences: load_preference
14+ module Foo
15+
16+ import Dependency
17+ import Preferences: @load_preference , @set_preferences!
1318
14- const distributed_library_name = load_preference (" distributed-library " , " name " )
15- if distributed_library_name == " DistributedNext"
19+ const distributed_package = @ load_preference (" distributed-package " )
20+ if distributed_package == " DistributedNext"
1621 using DistributedNext
17- elseif distributed_library_name == " Distributed"
22+ elseif distributed_package == " Distributed"
1823 using Distributed
1924else
20- error (" Unsupported `distributed-library `: '$(distributed_library_name ) '" )
25+ error (" Unsupported `distributed-package `: '$(distributed_package ) '" )
2126end
22- ```
2327
24- ` distributed-library ` is a top-level name that we recommend all packages who
25- want to support switching backends use. The advantage of using a global
26- preference instead of a per-package preference is that you can set it once:
27- ``` julia
28- import Preferences: set_preferences!
28+ """
29+ set_distributed_package!(value[="Distributed|DistributedNext"])
2930
30- set_preferences! (" distributed-library" , " name" => " DistributedNext" )
31+ Set a [preference](https://github.com/JuliaPackaging/Preferences.jl) for using
32+ either the Distributed.jl stdlib or DistributedNext.jl. You will need to restart
33+ Julia after setting a new preference.
34+ """
35+ function set_distributed_package! (value)
36+ # Set preferences for all dependencies
37+ Dependency. set_distributed_package! (value)
38+
39+ @set_preferences! (" distributed-package" => value)
40+ @info " Foo.jl preference has been set, restart your Julia session for this change to take effect!"
41+ end
42+
43+ end
3144```
3245
33- And all packages that support the ` distributed-library ` preference will pick
34- that up automatically so an end-user doesn't need to worry about setting
35- preferences for all of the dependencies of the package that they want to use.
46+ Users will then be able to call
47+ e.g. ` Foo.set_distributed_package!("DistributedNext") ` . Note that
48+ ` Foo.set_distributed_package!() ` should also set the preferences of any dependencies
49+ of Foo.jl that use a distributed worker package.
0 commit comments