ruff 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +3 -1
- data/docs/Ruff.html +3 -3
- data/docs/Ruff/Effect.html +2 -2
- data/docs/Ruff/Handler.html +2 -2
- data/docs/Ruff/Standard.html +3 -3
- data/docs/Ruff/Standard/Async.html +24 -23
- data/docs/Ruff/Standard/Async/Instance.html +57 -21
- data/docs/Ruff/Standard/Call1cc.html +297 -0
- data/docs/Ruff/Standard/CurrentTime.html +2 -2
- data/docs/Ruff/Standard/CurrentTime/Instance.html +2 -2
- data/docs/Ruff/Standard/Defer.html +2 -2
- data/docs/Ruff/Standard/Defer/Instance.html +2 -2
- data/docs/Ruff/Standard/MeasureTime.html +2 -2
- data/docs/Ruff/Standard/MeasureTime/Instance.html +2 -2
- data/docs/Ruff/Standard/State.html +2 -2
- data/docs/Ruff/Standard/State/Instance.html +2 -2
- data/docs/Ruff/Throws.html +2 -2
- data/docs/Ruff/Throws/Eff.html +2 -2
- data/docs/Ruff/Throws/Resend.html +2 -2
- data/docs/_index.html +10 -3
- data/docs/class_list.html +1 -1
- data/docs/file.README.html +2 -2
- data/docs/frames.html +1 -1
- data/docs/index.html +2 -2
- data/docs/method_list.html +55 -39
- data/docs/top-level-namespace.html +2 -2
- data/lib/ruff/standard.rb +1 -0
- data/lib/ruff/standard/async.rb +18 -16
- data/lib/ruff/standard/call1cc.rb +57 -0
- data/lib/ruff/version.rb +1 -1
- data/version +1 -1
- metadata +4 -2
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Ruff 1.3.
|
9
|
+
— Ruff 1.3.1 Documentation
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -100,7 +100,7 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on
|
103
|
+
Generated on Wed Oct 30 01:51:52 2019 by
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
105
|
0.9.20 (ruby-2.6.5).
|
106
106
|
</div>
|
data/lib/ruff/standard.rb
CHANGED
data/lib/ruff/standard/async.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# `Async` provides effects `Async.async`, `Async.yield` and `Async.await`,
|
3
|
+
# `Async` provides effects `Async.async`, `Async.yield` and `Async.await`,
|
4
|
+
# and the implementation async/await.
|
4
5
|
# This implementation is based on the tutorial for Multicore OCaml.
|
5
6
|
# @see https://github.com/ocamllabs/ocaml-effects-tutorial/blob/master/sources/solved/async_await.ml
|
6
7
|
#
|
@@ -47,8 +48,8 @@ module Ruff::Standard::Async
|
|
47
48
|
# type 'a promise =
|
48
49
|
# | Waiting of ('a, unit) continuation list
|
49
50
|
# | Done of 'a
|
50
|
-
|
51
|
-
|
51
|
+
Waiting = Util::ADT.create
|
52
|
+
Done = Util::ADT.create
|
52
53
|
|
53
54
|
# makes a new instance.
|
54
55
|
def initialize
|
@@ -95,7 +96,7 @@ module Ruff::Standard::Async
|
|
95
96
|
# @return [()!{e}]
|
96
97
|
# returns unit but still has the possibility to invoke effects `e` .
|
97
98
|
define_method :with do |&th|
|
98
|
-
fork(Util::Ref.new(
|
99
|
+
fork(Util::Ref.new(Waiting.new([])), th)
|
99
100
|
end
|
100
101
|
|
101
102
|
# You can reimplement the handler using these effect instances
|
@@ -104,26 +105,26 @@ module Ruff::Standard::Async
|
|
104
105
|
|
105
106
|
private
|
106
107
|
|
108
|
+
# rubocop:disable Metrics/AbcSize
|
109
|
+
# rubocop:disable Metrics/BlockLength
|
107
110
|
define_method :fork do |pr, th|
|
108
111
|
Ruff.handler
|
109
112
|
.to do |v|
|
110
113
|
pp = pr.get
|
111
114
|
l = case pp
|
112
|
-
when
|
113
|
-
|
114
|
-
else
|
115
|
-
raise 'impossible'
|
115
|
+
when Waiting then pp.get
|
116
|
+
else raise 'impossible'
|
116
117
|
end
|
117
118
|
|
118
119
|
l.each do |k|
|
119
120
|
@q.enqueue(-> { k[v] })
|
120
121
|
end
|
121
122
|
|
122
|
-
pr.set(
|
123
|
+
pr.set(Done.new(v))
|
123
124
|
@q.dequeue
|
124
125
|
end
|
125
126
|
.on(@eff.async) do |k, f|
|
126
|
-
pr_ = Util::Ref.new(
|
127
|
+
pr_ = Util::Ref.new(Waiting.new([]))
|
127
128
|
@q.enqueue(-> { k[pr_] })
|
128
129
|
fork(pr_, f)
|
129
130
|
end
|
@@ -131,19 +132,20 @@ module Ruff::Standard::Async
|
|
131
132
|
@q.enqueue(-> { k[] })
|
132
133
|
@q.dequeue.call
|
133
134
|
end
|
134
|
-
.on(@eff.await) do |k,
|
135
|
-
pp =
|
135
|
+
.on(@eff.await) do |k, ppr|
|
136
|
+
pp = ppr.get
|
136
137
|
|
137
138
|
return case pp
|
138
|
-
when
|
139
|
-
|
140
|
-
|
141
|
-
pr.set(_Waiting.new(@q.cons(k)))
|
139
|
+
when Done then k[pp.get]
|
140
|
+
when Waiting
|
141
|
+
pr.set(Waiting.new(@q.cons(k)))
|
142
142
|
@q.dequeue.call
|
143
143
|
end
|
144
144
|
end
|
145
145
|
.run { th[] }
|
146
146
|
end
|
147
|
+
# rubocop:enable Metrics/BlockLength
|
148
|
+
# rubocop:enable Metrics/AbcSize
|
147
149
|
end
|
148
150
|
|
149
151
|
# ---
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# `Call1cc` provides call-with-oneshot-continuation.
|
4
|
+
# The continuation can be run in the `context`.
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# Call1cc.context do
|
8
|
+
# divfail = lambda { |l, default|
|
9
|
+
# Call1cc.run {|k|
|
10
|
+
# l.map{|e|
|
11
|
+
# if e.zero?
|
12
|
+
# k.call(default)
|
13
|
+
# else
|
14
|
+
# e / 2
|
15
|
+
# end
|
16
|
+
# }
|
17
|
+
# }
|
18
|
+
# }
|
19
|
+
#
|
20
|
+
# pp divfail.call([1, 3, 5], [1])
|
21
|
+
# # ==> [0, 1, 2]
|
22
|
+
# puts '---'
|
23
|
+
# pp divfail.call([1, 0, 5], [1])
|
24
|
+
# # ==> [1]
|
25
|
+
# end
|
26
|
+
|
27
|
+
module Ruff::Standard::Call1cc
|
28
|
+
# call stack
|
29
|
+
@stack = []
|
30
|
+
|
31
|
+
def context(&prc)
|
32
|
+
p = Ruff.instance
|
33
|
+
@stack.push p
|
34
|
+
|
35
|
+
ret = Ruff.handler
|
36
|
+
.on(p) do |k, v|
|
37
|
+
k.call(v)
|
38
|
+
end
|
39
|
+
.run(&prc)
|
40
|
+
|
41
|
+
@stack.pop
|
42
|
+
ret
|
43
|
+
end
|
44
|
+
|
45
|
+
def run(&f)
|
46
|
+
top = @stack.first
|
47
|
+
Ruff.handler
|
48
|
+
.on(top) do |_, v|
|
49
|
+
# abort the rest of computation from calling the continuation
|
50
|
+
top.perform(v)
|
51
|
+
end.run do
|
52
|
+
f.call(->(v) { top.perform(v) })
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
module_function :context, :run
|
57
|
+
end
|
data/lib/ruff/version.rb
CHANGED
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nymphium
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- docs/Ruff/Standard.html
|
61
61
|
- docs/Ruff/Standard/Async.html
|
62
62
|
- docs/Ruff/Standard/Async/Instance.html
|
63
|
+
- docs/Ruff/Standard/Call1cc.html
|
63
64
|
- docs/Ruff/Standard/CurrentTime.html
|
64
65
|
- docs/Ruff/Standard/CurrentTime/Instance.html
|
65
66
|
- docs/Ruff/Standard/Defer.html
|
@@ -95,6 +96,7 @@ files:
|
|
95
96
|
- lib/ruff/objects.rb
|
96
97
|
- lib/ruff/standard.rb
|
97
98
|
- lib/ruff/standard/async.rb
|
99
|
+
- lib/ruff/standard/call1cc.rb
|
98
100
|
- lib/ruff/standard/current_time.rb
|
99
101
|
- lib/ruff/standard/defer.rb
|
100
102
|
- lib/ruff/standard/measure_time.rb
|