ResumableFunctions
C# style generators a.k.a. semi-coroutines for Julia.
C# has a convenient way to create iterators using the yield return
statement. The package ResumableFunctions
provides the same functionality for the Julia language by introducing the @resumable
and the @yield
macros. These macros can be used to replace the Task
switching functions produce
and consume
which were deprecated in Julia v0.6. Channels
are the preferred way for inter-task communication in julia v0.6+, but their performance is subpar for iterator applications.
Example
using ResumableFunctions
@resumable function fibonacci(n::Int)
a = 0
b = 1
for i in 1:n
@yield a
a, b = b, a+b
end
end
for val in fibonacci(10)
println(val)
end
# output
0
1
1
2
3
5
8
13
21
34
Installation
ResumableFunctions
is a registered package and can be installed by running:
Pkg.add("ResumableFunctions")
Authors
- Ben Lauwens, Royal Military Academy, Brussels, Belgium.
License
ResumableFunctions
is licensed under the MIT "Expat" License.