TLDR: Python / C# yield
with performance matching plain Julia iterators (i.e. unbelievably fast)
Continuables are generator-like higher-order functions which take a continuation as an extra argument. The key macro provided by the package is @cont
which will give access to the special function cont
within its scope and wraps the computation in a special Type Continuables.Continuable
.
It is best to think of cont
in the sense of yield
from Python's Generators. It generates values and takes feedback from the outer process as return value.
If you come from Python, use Continuables wherever you would use generators. If you are Julia-native, Continuables can be used instead of Julia's Channels in many place with drastic performance-improvements (really drastic: in the little benchmark example below it is 20 million times faster!).
This package implements all standard functions like e.g. collect
, reduce
, any
and others. As well as functionalities known from Base.Iterators
and IterTools.jl
like take
, dropwhile
, groupby
, partition
, nth
and others.
For convenience, all methods also work for plain iterables.
Install like
using Pkg
pkg"add Continuables"
Use it like
using Continuables
For further information take a look at the documentation.
Sometimes you recursively want to read files, skipping certain directories and doing other individual adaptations. Using Continuables
you get full flexibility with very well readable code and good performance:
list_all_juliafiles(path=abspath(".")) = @cont begin
if isfile(path)
endswith(path, ".jl") && cont(path)
elseif isdir(path)
basename(path) in (".git",) && return
for file in readdir(path)
foreach(cont, list_all_juliafiles(joinpath(path, file)))
end
end
end
collect(list_all_juliafiles())