| 23 mean, |
23 mean, |
| 24 proj_norm₂₁ball!, |
24 proj_norm₂₁ball!, |
| 25 curry, |
25 curry, |
| 26 ⬿, |
26 ⬿, |
| 27 @threadsif, |
27 @threadsif, |
| 28 @background |
28 @background, |
| |
29 @backgroundif |
| 29 |
30 |
| 30 |
31 |
| 31 ########## |
32 ########## |
| 32 # Threads |
33 # Threads |
| 33 ########## |
34 ########## |
| 34 |
35 |
| 35 macro threadsif(threads, loop) |
36 macro threadsif(threads, loop) |
| 36 return esc(:(if $threads |
37 return esc(:(if $threads |
| 37 Threads.@threads $loop |
38 Threads.@threads $loop |
| 38 else |
39 else |
| 39 $loop |
40 $loop |
| 40 end)) |
41 end)) |
| 41 end |
42 end |
| 42 |
43 |
| 43 macro background(bgtask, fgtask) |
44 macro background(bgtask, fgtask) |
| 44 return :(t = Threads.@spawn $(esc(bgtask)); |
45 return :(t = Threads.@spawn $(esc(bgtask)); |
| 45 $(esc(fgtask)); |
46 $(esc(fgtask)); |
| 46 wait(t)) |
47 wait(t)) |
| |
48 end |
| |
49 |
| |
50 macro backgroundif(threads, bgtask, fgtask) |
| |
51 return :(if $(esc(threads)) |
| |
52 @background $(esc(bgtask)) $(esc(fgtask)) |
| |
53 else |
| |
54 $(esc(bgtask)) |
| |
55 $(esc(fgtask)) |
| |
56 end) |
| 47 end |
57 end |
| 48 |
58 |
| 49 ######################## |
59 ######################## |
| 50 # Functional programming |
60 # Functional programming |
| 51 ######################### |
61 ######################### |