redshift 1.3.24 → 1.3.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/{README → README.md} +6 -6
- data/RELEASE-NOTES +14 -0
- data/bench/bench +1 -1
- data/ext/redshift/dvector-float/dvector-float.c +183 -0
- data/ext/redshift/dvector-float/dvector-float.h +36 -0
- data/ext/redshift/dvector-float/dvector-float.rb +33 -0
- data/ext/redshift/dvector-float/extconf.rb +2 -0
- data/lib/redshift/redshift.rb +1 -1
- data/lib/redshift/target/c/world-gen.rb +2 -1
- data/test/test.rb +1 -1
- data/test/test_dvector-float.rb +113 -0
- metadata +139 -204
- data/.bnsignore +0 -27
- data/.gitignore +0 -9
- data/TODO +0 -431
- data/bench/aug17-ruby19.bench +0 -86
- data/bench/aug17.bench +0 -86
- data/bench/aug7.bench +0 -86
- data/bench/prof.html +0 -0
- data/rakefile +0 -50
metadata
CHANGED
@@ -1,272 +1,207 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: redshift
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 3
|
9
|
-
- 24
|
10
|
-
version: 1.3.24
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.26
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Joel VanderWerf
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
name: cgen
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 79
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 16
|
33
|
-
- 8
|
34
|
-
version: 0.16.8
|
35
|
-
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: tkar
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 117
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
- 63
|
49
|
-
version: "0.63"
|
50
|
-
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: bones
|
54
|
-
prerelease: false
|
55
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
-
none: false
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
hash: 25
|
61
|
-
segments:
|
62
|
-
- 3
|
63
|
-
- 4
|
64
|
-
- 7
|
65
|
-
version: 3.4.7
|
66
|
-
type: :development
|
67
|
-
version_requirements: *id003
|
68
|
-
description: |
|
69
|
-
A framework for simulation of networks of hybrid automata, similar to SHIFT and Lambda-SHIFT. Includes ruby-based DSL for defining simulation components, and ruby/C code generation and runtime.
|
70
|
-
|
11
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A framework for simulation of networks of hybrid automata, similar to
|
14
|
+
SHIFT and Lambda-SHIFT. Includes ruby-based DSL for defining simulation components,
|
15
|
+
and ruby/C code generation and runtime.
|
71
16
|
email: vjoel@users.sourceforge.net
|
72
17
|
executables: []
|
73
|
-
|
74
|
-
extensions:
|
18
|
+
extensions:
|
75
19
|
- ext/redshift/buffer/extconf.rb
|
76
20
|
- ext/redshift/dvector/extconf.rb
|
77
21
|
- ext/redshift/util/isaac/extconf.rb
|
78
|
-
extra_rdoc_files:
|
79
|
-
- README
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.md
|
80
24
|
- RELEASE-NOTES
|
81
|
-
files:
|
82
|
-
- .
|
83
|
-
- .gitignore
|
84
|
-
- README
|
25
|
+
files:
|
26
|
+
- README.md
|
85
27
|
- RELEASE-NOTES
|
86
|
-
- TODO
|
87
|
-
- bench/alg-state.rb
|
88
|
-
- bench/algebraic.rb
|
89
|
-
- bench/aug17-ruby19.bench
|
90
|
-
- bench/aug17.bench
|
91
|
-
- bench/aug7.bench
|
92
28
|
- bench/bench
|
93
|
-
- bench/bench.rb
|
94
|
-
- bench/connect.rb
|
95
|
-
- bench/continuous.rb
|
96
29
|
- bench/diff-bench
|
97
|
-
- bench/
|
98
|
-
- bench/euler.rb
|
30
|
+
- bench/run
|
99
31
|
- bench/formula.rb
|
32
|
+
- bench/euler.rb
|
33
|
+
- bench/alg-state.rb
|
34
|
+
- bench/bench.rb
|
35
|
+
- bench/discrete.rb
|
100
36
|
- bench/half-strict.rb
|
37
|
+
- bench/strictness.rb
|
101
38
|
- bench/inertness.rb
|
102
|
-
- bench/
|
103
|
-
- bench/prof.html
|
104
|
-
- bench/queues.rb
|
105
|
-
- bench/run
|
39
|
+
- bench/algebraic.rb
|
106
40
|
- bench/simple.rb
|
107
|
-
- bench/
|
108
|
-
-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
- examples/connect-parallel.rb
|
112
|
-
- examples/connect.rb
|
113
|
-
- examples/constants.rb
|
114
|
-
- examples/delay.rb
|
41
|
+
- bench/queues.rb
|
42
|
+
- bench/connect.rb
|
43
|
+
- bench/linked-flows.rb
|
44
|
+
- bench/continuous.rb
|
115
45
|
- examples/derivative.rb
|
116
|
-
- examples/
|
46
|
+
- examples/pid.rb
|
47
|
+
- examples/reset-with-event-val.rb
|
48
|
+
- examples/step-discrete-profiler.rb
|
49
|
+
- examples/lotka-volterra.rb
|
117
50
|
- examples/external-lib.rb
|
51
|
+
- examples/delay.rb
|
52
|
+
- examples/ports.rb
|
53
|
+
- examples/constants.rb
|
54
|
+
- examples/euler.rb
|
55
|
+
- examples/orbit.rb
|
56
|
+
- examples/sync.rb
|
57
|
+
- examples/ball-tkar.rb
|
58
|
+
- examples/queue2.rb
|
59
|
+
- examples/sync-queue.rb
|
60
|
+
- examples/sync-deadlock.rb
|
118
61
|
- examples/guard-debugger.rb
|
119
|
-
- examples/
|
62
|
+
- examples/thermostat.rb
|
63
|
+
- examples/zeno.rb
|
64
|
+
- examples/shell.rb
|
65
|
+
- examples/set-dest.rb
|
66
|
+
- examples/scheduler.rb
|
67
|
+
- examples/sync-retry.rb
|
68
|
+
- examples/step-discrete-hook.rb
|
69
|
+
- examples/connect.rb
|
70
|
+
- examples/collide.rb
|
71
|
+
- examples/subsystem.rb
|
72
|
+
- examples/connect-parallel.rb
|
120
73
|
- examples/modular-component-def.rb
|
121
|
-
- examples/
|
122
|
-
- examples/pid.rb
|
123
|
-
- examples/ports.rb
|
74
|
+
- examples/ball.rb
|
124
75
|
- examples/queue.rb
|
125
|
-
- examples/
|
126
|
-
- examples/reset-with-event-val.rb
|
127
|
-
- examples/robots/README
|
128
|
-
- examples/robots/lib/base.rb
|
129
|
-
- examples/robots/lib/explosion.rb
|
76
|
+
- examples/robots/lib/tracker.rb
|
130
77
|
- examples/robots/lib/missile.rb
|
131
|
-
- examples/robots/lib/radar.rb
|
132
78
|
- examples/robots/lib/robot.rb
|
79
|
+
- examples/robots/lib/explosion.rb
|
80
|
+
- examples/robots/lib/radar.rb
|
81
|
+
- examples/robots/lib/base.rb
|
133
82
|
- examples/robots/lib/shell-world.rb
|
134
|
-
- examples/robots/lib/tracker.rb
|
135
83
|
- examples/robots/robots.rb
|
136
|
-
- examples/
|
137
|
-
- examples/set-dest.rb
|
138
|
-
- examples/shell.rb
|
139
|
-
- examples/simulink/README
|
84
|
+
- examples/robots/README
|
140
85
|
- examples/simulink/delay.mdl
|
141
86
|
- examples/simulink/derivative.mdl
|
142
|
-
- examples/
|
143
|
-
- examples/step-discrete-profiler.rb
|
144
|
-
- examples/subsystem.rb
|
145
|
-
- examples/sync-deadlock.rb
|
146
|
-
- examples/sync-queue.rb
|
147
|
-
- examples/sync-retry.rb
|
148
|
-
- examples/sync.rb
|
149
|
-
- examples/thermostat.rb
|
150
|
-
- examples/zeno.rb
|
151
|
-
- ext/redshift/buffer/buffer.c
|
152
|
-
- ext/redshift/buffer/buffer.h
|
153
|
-
- ext/redshift/buffer/dir.rb
|
154
|
-
- ext/redshift/buffer/extconf.rb
|
87
|
+
- examples/simulink/README
|
155
88
|
- ext/redshift/dvector/dvector.c
|
89
|
+
- ext/redshift/buffer/buffer.c
|
90
|
+
- ext/redshift/util/isaac/isaac.c
|
91
|
+
- ext/redshift/util/isaac/rand.c
|
92
|
+
- ext/redshift/dvector-float/dvector-float.c
|
156
93
|
- ext/redshift/dvector/dvector.h
|
94
|
+
- ext/redshift/buffer/buffer.h
|
95
|
+
- ext/redshift/util/isaac/rand.h
|
96
|
+
- ext/redshift/dvector-float/dvector-float.h
|
157
97
|
- ext/redshift/dvector/dvector.rb
|
158
98
|
- ext/redshift/dvector/extconf.rb
|
99
|
+
- ext/redshift/buffer/dir.rb
|
100
|
+
- ext/redshift/buffer/extconf.rb
|
159
101
|
- ext/redshift/util/isaac/extconf.rb
|
160
|
-
- ext/redshift/
|
161
|
-
- ext/redshift/
|
162
|
-
- ext/redshift/util/isaac/rand.h
|
163
|
-
- lib/redshift.rb
|
164
|
-
- lib/redshift/component.rb
|
165
|
-
- lib/redshift/meta.rb
|
166
|
-
- lib/redshift/mixins/shell.rb
|
167
|
-
- lib/redshift/mixins/zeno-debugger.rb
|
168
|
-
- lib/redshift/port.rb
|
169
|
-
- lib/redshift/queue.rb
|
170
|
-
- lib/redshift/redshift.rb
|
102
|
+
- ext/redshift/dvector-float/dvector-float.rb
|
103
|
+
- ext/redshift/dvector-float/extconf.rb
|
171
104
|
- lib/redshift/state.rb
|
172
|
-
- lib/redshift/syntax.rb
|
173
105
|
- lib/redshift/target/c.rb
|
174
|
-
- lib/redshift/target/
|
175
|
-
- lib/redshift/target/c/flow-gen.rb
|
176
|
-
- lib/redshift/target/c/flow/algebraic.rb
|
177
|
-
- lib/redshift/target/c/flow/buffer.rb
|
178
|
-
- lib/redshift/target/c/flow/delay.rb
|
106
|
+
- lib/redshift/target/spec.rb
|
179
107
|
- lib/redshift/target/c/flow/derivative.rb
|
108
|
+
- lib/redshift/target/c/flow/delay.rb
|
180
109
|
- lib/redshift/target/c/flow/euler.rb
|
181
110
|
- lib/redshift/target/c/flow/expr.rb
|
111
|
+
- lib/redshift/target/c/flow/algebraic.rb
|
112
|
+
- lib/redshift/target/c/flow/buffer.rb
|
182
113
|
- lib/redshift/target/c/flow/rk4.rb
|
183
|
-
- lib/redshift/target/c/
|
114
|
+
- lib/redshift/target/c/flow-gen.rb
|
184
115
|
- lib/redshift/target/c/world-gen.rb
|
185
|
-
- lib/redshift/target/
|
186
|
-
- lib/redshift/
|
116
|
+
- lib/redshift/target/c/component-gen.rb
|
117
|
+
- lib/redshift/target/c/library.rb
|
118
|
+
- lib/redshift/meta.rb
|
119
|
+
- lib/redshift/util/superhash.rb
|
187
120
|
- lib/redshift/util/argos.rb
|
188
|
-
- lib/redshift/util/histogram.rb
|
189
|
-
- lib/redshift/util/irb-shell.rb
|
190
|
-
- lib/redshift/util/isaac.rb
|
191
|
-
- lib/redshift/util/modular.rb
|
192
|
-
- lib/redshift/util/object-diff.rb
|
193
|
-
- lib/redshift/util/plot.rb
|
194
121
|
- lib/redshift/util/random.rb
|
195
|
-
- lib/redshift/util/
|
122
|
+
- lib/redshift/util/irb-shell.rb
|
196
123
|
- lib/redshift/util/tkar-driver.rb
|
197
|
-
- lib/redshift/util/
|
124
|
+
- lib/redshift/util/accessible-index.rb
|
125
|
+
- lib/redshift/util/modular.rb
|
198
126
|
- lib/redshift/util/tracer/trace.rb
|
199
127
|
- lib/redshift/util/tracer/var.rb
|
128
|
+
- lib/redshift/util/isaac.rb
|
129
|
+
- lib/redshift/util/object-diff.rb
|
130
|
+
- lib/redshift/util/tracer.rb
|
131
|
+
- lib/redshift/util/histogram.rb
|
132
|
+
- lib/redshift/util/plot.rb
|
133
|
+
- lib/redshift/port.rb
|
134
|
+
- lib/redshift/redshift.rb
|
135
|
+
- lib/redshift/component.rb
|
136
|
+
- lib/redshift/mixins/shell.rb
|
137
|
+
- lib/redshift/mixins/zeno-debugger.rb
|
138
|
+
- lib/redshift/syntax.rb
|
200
139
|
- lib/redshift/world.rb
|
201
|
-
-
|
202
|
-
-
|
140
|
+
- lib/redshift/queue.rb
|
141
|
+
- lib/redshift.rb
|
142
|
+
- test/test_setup.rb
|
143
|
+
- test/test_inherit_link.rb
|
144
|
+
- test/test_discrete_isolated.rb
|
145
|
+
- test/test_connect_strict.rb
|
203
146
|
- test/test_buffer.rb
|
147
|
+
- test/test_world.rb
|
148
|
+
- test/test_flow_link.rb
|
149
|
+
- test/test_dvector-float.rb
|
150
|
+
- test/test_dvector.rb
|
151
|
+
- test/test_reset.rb
|
152
|
+
- test/test_inherit_flow.rb
|
153
|
+
- test/test.rb
|
204
154
|
- test/test_connect.rb
|
205
|
-
- test/
|
206
|
-
- test/
|
207
|
-
- test/test_constant.rb
|
155
|
+
- test/test_inherit_state.rb
|
156
|
+
- test/test_flow_trans.rb
|
208
157
|
- test/test_delay.rb
|
209
|
-
- test/
|
210
|
-
- test/test_discrete.rb
|
211
|
-
- test/test_discrete_isolated.rb
|
212
|
-
- test/test_dvector.rb
|
213
|
-
- test/test_exit.rb
|
158
|
+
- test/test_strict_reset_error.rb
|
214
159
|
- test/test_flow.rb
|
215
|
-
- test/
|
216
|
-
- test/test_flow_sub.rb
|
217
|
-
- test/test_flow_trans.rb
|
160
|
+
- test/test_derivative.rb
|
218
161
|
- test/test_inherit.rb
|
219
|
-
- test/test_inherit_event.rb
|
220
|
-
- test/test_inherit_flow.rb
|
221
|
-
- test/test_inherit_link.rb
|
222
|
-
- test/test_inherit_setup.rb
|
223
|
-
- test/test_inherit_state.rb
|
224
162
|
- test/test_inherit_transition.rb
|
225
|
-
- test/
|
226
|
-
- test/test_queue.rb
|
163
|
+
- test/test_connect_parallel.rb
|
227
164
|
- test/test_queue_alone.rb
|
228
|
-
- test/
|
229
|
-
- test/
|
230
|
-
- test/test_strict_continuity.rb
|
231
|
-
- test/test_strict_reset_error.rb
|
165
|
+
- test/test_exit.rb
|
166
|
+
- test/test_discrete.rb
|
232
167
|
- test/test_strictness_error.rb
|
233
168
|
- test/test_sync.rb
|
234
|
-
- test/
|
235
|
-
|
169
|
+
- test/test_queue.rb
|
170
|
+
- test/test_flow_sub.rb
|
171
|
+
- test/test_inherit_setup.rb
|
172
|
+
- test/test_numerics.rb
|
173
|
+
- test/test_strict_continuity.rb
|
174
|
+
- test/test_constant.rb
|
175
|
+
- test/test_inherit_event.rb
|
236
176
|
homepage: http://rubyforge.org/projects/redshift
|
237
177
|
licenses: []
|
238
|
-
|
178
|
+
metadata: {}
|
239
179
|
post_install_message:
|
240
|
-
rdoc_options:
|
180
|
+
rdoc_options:
|
181
|
+
- --quiet
|
182
|
+
- --line-numbers
|
183
|
+
- --inline-source
|
184
|
+
- --title
|
185
|
+
- CGenerator
|
241
186
|
- --main
|
242
|
-
- README
|
243
|
-
require_paths:
|
187
|
+
- README.md
|
188
|
+
require_paths:
|
244
189
|
- lib
|
245
190
|
- ext
|
246
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
none: false
|
257
|
-
requirements:
|
258
|
-
- - ">="
|
259
|
-
- !ruby/object:Gem::Version
|
260
|
-
hash: 3
|
261
|
-
segments:
|
262
|
-
- 0
|
263
|
-
version: "0"
|
191
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - '>='
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
264
201
|
requirements: []
|
265
|
-
|
266
202
|
rubyforge_project: redshift
|
267
|
-
rubygems_version:
|
203
|
+
rubygems_version: 2.0.3
|
268
204
|
signing_key:
|
269
|
-
specification_version:
|
205
|
+
specification_version: 4
|
270
206
|
summary: Simulation of hybrid automata
|
271
207
|
test_files: []
|
272
|
-
|
data/.bnsignore
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# The list of files that should be ignored by Mr Bones.
|
2
|
-
# Lines that start with '#' are comments.
|
3
|
-
#
|
4
|
-
# A .gitignore file can be used instead by setting it as the ignore
|
5
|
-
# file in your Rakefile:
|
6
|
-
#
|
7
|
-
# PROJ.ignore_file = '.gitignore'
|
8
|
-
#
|
9
|
-
# For a project with a C extension, the following would be a good set of
|
10
|
-
# exclude patterns (uncomment them if you want to use them):
|
11
|
-
# *.[oa]
|
12
|
-
# *~
|
13
|
-
announcement.txt
|
14
|
-
coverage
|
15
|
-
doc
|
16
|
-
pkg
|
17
|
-
*.bck
|
18
|
-
*.so
|
19
|
-
*.o
|
20
|
-
ext/*/*/Makefile
|
21
|
-
ext/*/*/*/Makefile
|
22
|
-
misc
|
23
|
-
junk
|
24
|
-
tmp
|
25
|
-
*/tmp
|
26
|
-
*/*/tmp
|
27
|
-
*/junk
|
data/.gitignore
DELETED
data/TODO
DELETED
@@ -1,431 +0,0 @@
|
|
1
|
-
Publishing RedShift
|
2
|
-
===================
|
3
|
-
|
4
|
-
core for 1.3 release
|
5
|
-
|
6
|
-
clean up world (save/load etc)
|
7
|
-
tracer
|
8
|
-
event value conditions in sync clause?
|
9
|
-
sync :client => check(:accept){|val| val==self}
|
10
|
-
# from sync-queue.rb
|
11
|
-
|
12
|
-
doc, tutorial, web site
|
13
|
-
|
14
|
-
clean up tests, examples
|
15
|
-
|
16
|
-
user tools
|
17
|
-
zeno and other debuggers
|
18
|
-
shell
|
19
|
-
visualization interfaces: tkar, gnuplot, opengl
|
20
|
-
|
21
|
-
benchmarks
|
22
|
-
- compare with stateflow and simulink examples
|
23
|
-
- try to scale these examples up
|
24
|
-
- compare with Ptolemy -- ask devs for good benchmarks
|
25
|
-
|
26
|
-
packaging and project mgmt
|
27
|
-
- windows w/ several compilers
|
28
|
-
|
29
|
-
notify
|
30
|
-
- shift-dev folks, hs researchers (e.g., Joao Hispanha, Ed Lee)
|
31
|
-
- contacts who have expressed interest in redshift or shift
|
32
|
-
- others:
|
33
|
-
http://www.dis.anl.gov/exp/cas/index.html
|
34
|
-
http://www.artcompsci.org
|
35
|
-
Sylvain Joyeux (esp. re: distributed simulation)
|
36
|
-
Martin Fowler (see http://martinfowler.com/dslwip/)
|
37
|
-
|
38
|
-
publicize
|
39
|
-
- http://path.berkeley.edu/shift/
|
40
|
-
(this is still the first google hit for "hybrid system simulation")
|
41
|
-
- ruby-talk, sciruby
|
42
|
-
- comp.simulation, comp.soft-sys.(matlab|ptolemy), scs.org
|
43
|
-
- paper?
|
44
|
-
|
45
|
-
funding
|
46
|
-
- nsf or sbir
|
47
|
-
- need to emphasize research goals:
|
48
|
-
- distributed hybrid simulation
|
49
|
-
- further optimizations like strict
|
50
|
-
- approach potential users in industry
|
51
|
-
- GM, with wrapping for CarSim dll
|
52
|
-
|
53
|
-
long-term goals
|
54
|
-
- multiple clocks and threshold crossing detection, as in:
|
55
|
-
http://repository.upenn.edu/ese_papers/123/
|
56
|
-
- vector-valued signals
|
57
|
-
- need proper C parsing first
|
58
|
-
- user-friendly interface and related tools
|
59
|
-
- distributed simulation (HLA. CERTI?)
|
60
|
-
- library of integrators/flows and components
|
61
|
-
- jruby/jvm port (and use duby for actions etc)
|
62
|
-
- import models from simulink, Ptolemy, HSIF, etc.
|
63
|
-
- interface at run time with simulink etc.
|
64
|
-
- redshift as simulink block
|
65
|
-
- rt code generation?
|
66
|
-
- HLA support for interoperability
|
67
|
-
|
68
|
-
backronym: Ruby-based Efficient Deterministic SHIFT
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
To do
|
74
|
-
=====
|
75
|
-
|
76
|
-
Project
|
77
|
-
|
78
|
-
Subversion, gems, etc.
|
79
|
-
|
80
|
-
Docs and tutorial
|
81
|
-
|
82
|
-
Bugs
|
83
|
-
|
84
|
-
Make sure the arrays used internally are not shared:
|
85
|
-
call rb_ary_modify() before setting len or etc.
|
86
|
-
|
87
|
-
what happens if an exception (or throw or break) happens inside
|
88
|
-
of a block during discrete_update? (e.g. an action, reset, or
|
89
|
-
guard block)
|
90
|
-
|
91
|
-
Syntax
|
92
|
-
|
93
|
-
better sync syntax to avoid the :l=>:e, :l=>:f prob
|
94
|
-
sync {l.e, l.f} ?
|
95
|
-
|
96
|
-
should define, for each link, a TransitionParser method which returns
|
97
|
-
a dummy link object that responds to #event and returns
|
98
|
-
a dummy event that responds to #==(value) so that you can write
|
99
|
-
|
100
|
-
guard link_var.some_event == 123
|
101
|
-
|
102
|
-
instead of
|
103
|
-
|
104
|
-
[:link_var, :some_event, 123]
|
105
|
-
|
106
|
-
should be possible to allow:
|
107
|
-
|
108
|
-
reset x => ... instead of reset :x => ...
|
109
|
-
|
110
|
-
replace strictly_* with strict_* and alias back for compat
|
111
|
-
|
112
|
-
express flows, guards, etc, in ruby syntax and use something to parse:
|
113
|
-
|
114
|
-
nodedump/nodewrap
|
115
|
-
|
116
|
-
ripper
|
117
|
-
|
118
|
-
"expansion.rb"
|
119
|
-
|
120
|
-
vars are class methods returning Var obejcts
|
121
|
-
|
122
|
-
resets and even assignment to cont-vars can use '<<'
|
123
|
-
|
124
|
-
equations can use '=='
|
125
|
-
|
126
|
-
reset syntax:
|
127
|
-
|
128
|
-
reset do
|
129
|
-
x 3
|
130
|
-
y "x+2"
|
131
|
-
z { (x-y).abs }
|
132
|
-
|
133
|
-
check for symbol conflicts
|
134
|
-
user attributes may conflict with Component's attrs
|
135
|
-
ditto for flows and other methods defined in subclasses
|
136
|
-
can we 'hook' method def and attr def to check for conflict?
|
137
|
-
or just use a consistent naming scheme to keep internals separate?
|
138
|
-
|
139
|
-
flow /Foo.*/ ...
|
140
|
-
matches on name of states
|
141
|
-
|
142
|
-
Semantics
|
143
|
-
|
144
|
-
export event _to_ comp? and sync on event alone w/o link?
|
145
|
-
export [:e, 4] => :lnk # sender
|
146
|
-
sync :e # receiver
|
147
|
-
|
148
|
-
add check for values of event after sync
|
149
|
-
(and then repeat sync loop)
|
150
|
-
"sync :l => {:e => 3}" or better syntax
|
151
|
-
|
152
|
-
option to initialize all float vars to NaN?
|
153
|
-
|
154
|
-
ideas from Verilog?
|
155
|
-
|
156
|
-
ideas from DEVS? (http://moncs.cs.mcgill.ca/people/tfeng/thesis/node12.html)
|
157
|
-
|
158
|
-
"Buffer" could be used for:
|
159
|
-
|
160
|
-
- recurrence relations/ difference equations:
|
161
|
-
|
162
|
-
recurrence " x = x[-0.1] + x[-0.2] "
|
163
|
-
|
164
|
-
- input data (possibly interpolated) from table/file/etc
|
165
|
-
|
166
|
-
- output to data (or file) faster than ruby array of double
|
167
|
-
|
168
|
-
( record " expr " => file ? )
|
169
|
-
|
170
|
-
Use NArray of doubles for this?
|
171
|
-
|
172
|
-
Better: array of ptr to 1K blocks of float/double
|
173
|
-
|
174
|
-
Per state syntax:
|
175
|
-
|
176
|
-
some_state.record var => "expr"
|
177
|
-
|
178
|
-
var refers to array of bocks of raw data
|
179
|
-
|
180
|
-
expr is evaled after discrete update
|
181
|
-
|
182
|
-
- need a language for piping data streams:
|
183
|
-
|
184
|
-
src | x | integrate | ... | dst
|
185
|
-
|
186
|
-
register event observers:
|
187
|
-
on comp=>event do ... end
|
188
|
-
|
189
|
-
Does permissive make sense?
|
190
|
-
|
191
|
-
inheritance among states:
|
192
|
-
|
193
|
-
"state Foo has everything that Bar has, plus ...."
|
194
|
-
|
195
|
-
a transition that can happen only once per discrete step, to easily
|
196
|
-
prevent zeno pb (useful for utility transitions, such as output)
|
197
|
-
|
198
|
-
better: a "pre-strict" var that can only get reset once per step
|
199
|
-
|
200
|
-
per-state strictness?
|
201
|
-
|
202
|
-
if guard "strictvar && something" is checked and strictvar is false,
|
203
|
-
then the guard doesn't need to be checked again, regardless of "something"
|
204
|
-
similarly for: guard "strictvar"; guard "something"
|
205
|
-
|
206
|
-
"finalizers" for components -- called when component exits, world
|
207
|
-
is finalized, or app quits
|
208
|
-
|
209
|
-
more generally, code that executes when a given state is entered:
|
210
|
-
|
211
|
-
state Exit do
|
212
|
-
# do some finalization stuff here
|
213
|
-
end
|
214
|
-
|
215
|
-
Or:
|
216
|
-
|
217
|
-
entering SomeState do...end
|
218
|
-
exiting SomeState do...end
|
219
|
-
|
220
|
-
Maybe this is better handled by adding another state (PreSomeState)
|
221
|
-
|
222
|
-
abstract classes (no code generated)
|
223
|
-
|
224
|
-
input events (in place of interrupts?)
|
225
|
-
|
226
|
-
as opposed to normal events, which are output (pull vs. push)
|
227
|
-
|
228
|
-
but does this mean arriving events are queued?
|
229
|
-
|
230
|
-
this would be useful for timers so that client component doesn't
|
231
|
-
have to manage a ref to the timer
|
232
|
-
|
233
|
-
wait/sleep
|
234
|
-
|
235
|
-
in a transition, saying "sleep n" says that the component will not
|
236
|
-
check guards for the rest of that discrete update and for n time units.
|
237
|
-
|
238
|
-
exception handler clauses in transitions (or use interrupts?)
|
239
|
-
on LockFailed { |var, value| ... }
|
240
|
-
|
241
|
-
state stack:
|
242
|
-
a transition (or interrupt) can push the current state or pop back
|
243
|
-
to a previously saved state (like Kader's idea)
|
244
|
-
syntax:
|
245
|
-
transition ... do
|
246
|
-
push [or pop, in which case the dest. state is ignored]
|
247
|
-
end
|
248
|
-
|
249
|
-
interrupts
|
250
|
-
a way of enabling a transition without evaluating guards
|
251
|
-
-faster
|
252
|
-
can do sender-receiver, rather than broadcast
|
253
|
-
can register with global interrupt manager
|
254
|
-
notify after T seconds
|
255
|
-
notify when global event happens (like what?)
|
256
|
-
receive in any state, switch to new state optional (push ok)
|
257
|
-
synchronous in the sense that no other components act in between
|
258
|
-
the send and receive, and the receiver action happens before the
|
259
|
-
sender action finishes (?)
|
260
|
-
but not parallel assignment
|
261
|
-
based on methods
|
262
|
-
in sender's action clause: 'x.foo args'
|
263
|
-
in receiver:
|
264
|
-
interrupt :foo => NewState do
|
265
|
-
action { |args| ...}
|
266
|
-
event ...
|
267
|
-
end
|
268
|
-
|
269
|
-
signals
|
270
|
-
maybe better than interrupts, more general
|
271
|
-
|
272
|
-
transition ... do
|
273
|
-
signal value => receiver_collection, ...
|
274
|
-
end
|
275
|
-
|
276
|
-
on value do ... end
|
277
|
-
|
278
|
-
is this better than a simple method call?
|
279
|
-
yes: can implement queue
|
280
|
-
|
281
|
-
discrete evolution
|
282
|
-
more flexibility:
|
283
|
-
start actions as well as finish actions
|
284
|
-
(before/after)
|
285
|
-
enter and exit blocks for each state
|
286
|
-
start_when and finish_when to implement sync
|
287
|
-
transitions like in statechart
|
288
|
-
parametric transitions?
|
289
|
-
attach :all, ...
|
290
|
-
syncronization
|
291
|
-
explicit?
|
292
|
-
|
293
|
-
exceptions
|
294
|
-
catch them if they arise in action
|
295
|
-
pass them on to handler where?
|
296
|
-
|
297
|
-
might be better not to raise or rb_raise, but to call redshift_error on the
|
298
|
-
world class, which the class could override as needed
|
299
|
-
|
300
|
-
Component#teardown called after exit
|
301
|
-
maybe #setup should only be called at last moment before running,
|
302
|
-
so that setup clauses can be added later
|
303
|
-
|
304
|
-
Implementation
|
305
|
-
|
306
|
-
use static functions where possible
|
307
|
-
|
308
|
-
decouple expr code from particular states/transitions so that
|
309
|
-
two state can share code
|
310
|
-
changing state name doesn't cause (much) recompile
|
311
|
-
etc.
|
312
|
-
|
313
|
-
option to dump all C code to one file (amalgam), so compiler can optimize more
|
314
|
-
|
315
|
-
improve performance of event and local storage by using native (NVector)
|
316
|
-
where possible, but keeping ruby array for ruby values
|
317
|
-
|
318
|
-
remove -g (if not debug) from CFLAGS
|
319
|
-
add -march=i686 -msse2 -mfpmath=sse (keep -fPIC?)
|
320
|
-
or whatever current hw is (how to determine that?)
|
321
|
-
|
322
|
-
possible to use only 1 tmp value for rk4?
|
323
|
-
|
324
|
-
optimization: no ContState object, just a pointer in the comp. shadow struct
|
325
|
-
could point to area at end of component's shadow struct
|
326
|
-
|
327
|
-
revert to on-demand var evaluation during continuous update?
|
328
|
-
|
329
|
-
optimization: transitive closure of strict sleep, based on declaration
|
330
|
-
that prevents setters
|
331
|
-
|
332
|
-
optimization: weaken "strict" so that resets can apply at end of
|
333
|
-
discrete update, but still get all the optimizations (see bench/discrete.rb)
|
334
|
-
|
335
|
-
- a new kind of flow that applies an "impulse" to a strict var at the
|
336
|
-
beginning of the next cont step, or
|
337
|
-
|
338
|
-
- a declaration that a var becomes strict for the rest of the discrete
|
339
|
-
step
|
340
|
-
|
341
|
-
Allow c-coded actions:
|
342
|
-
|
343
|
-
transition do
|
344
|
-
action " func(self, x*2, lnk.y) "
|
345
|
-
end
|
346
|
-
|
347
|
-
cdef <<END
|
348
|
-
func(SelfShadowClass *self, double arg1, double arg2) {
|
349
|
-
...
|
350
|
-
}
|
351
|
-
END
|
352
|
-
|
353
|
-
Debug mode that uses hooks to add extra checking:
|
354
|
-
|
355
|
-
- rollover check for d_tick, step_count
|
356
|
-
|
357
|
-
- check_strict (and make it *not* the default)
|
358
|
-
|
359
|
-
Instead of caching flow function in each cont var, maybe just have pointer
|
360
|
-
to a single per state object? This can also have the outgoing transitions,
|
361
|
-
and so __update_cache can be somewhat faster.
|
362
|
-
|
363
|
-
share mark and free funcs where possible (e.g., guards)
|
364
|
-
|
365
|
-
guards should not be written in numerical order (".._0", "..._1"), but
|
366
|
-
in a more meaningful way so that changing order doesn't force recompile
|
367
|
-
|
368
|
-
unified internal repr. for phases
|
369
|
-
|
370
|
-
insert a mnemonic for quick detection of phase type in discrete update
|
371
|
-
|
372
|
-
distribute Init_clib better
|
373
|
-
|
374
|
-
break flow-gen.rb and world-gen.rb into several files each
|
375
|
-
flow-gen files can be loaded on demand as flow types are needed
|
376
|
-
most of world-gen can be a .c file used as a template
|
377
|
-
|
378
|
-
optimization
|
379
|
-
profiling
|
380
|
-
use valgrind, gprof, etc. to profile the C code
|
381
|
-
compare with shift, matlab
|
382
|
-
|
383
|
-
compile time error checking:
|
384
|
-
translate C compiler error (e.g. bad result type in expr) to ruby exception
|
385
|
-
|
386
|
-
run time error checking
|
387
|
-
more 'if $DEBUG ...' checks
|
388
|
-
catch definition of flows after commit, etc.
|
389
|
-
|
390
|
-
exception handling
|
391
|
-
syntax and math errors, esp. in flows, guards
|
392
|
-
use Exception classes
|
393
|
-
|
394
|
-
error messages
|
395
|
-
|
396
|
-
Current file/line position must be saved by many constructs, e.g. reset,
|
397
|
-
so that it can be shown later if there is an error message
|
398
|
-
|
399
|
-
use ", []" to avoid showing backtrace when it is not helpful
|
400
|
-
|
401
|
-
exceptions in C code sometimes don't give symbolic info, like var names
|
402
|
-
|
403
|
-
check against ruby 1.9
|
404
|
-
|
405
|
-
replace RARRAY(x)->len with RARRAY_LEN(x)
|
406
|
-
|
407
|
-
libtcc backend
|
408
|
-
|
409
|
-
dot backend (see file in lib dir)
|
410
|
-
|
411
|
-
optimization: split diff_list for different integrators, so comps with
|
412
|
-
only euler flows don't get iterated over as much
|
413
|
-
|
414
|
-
User interface
|
415
|
-
|
416
|
-
yaml and pp outputs
|
417
|
-
|
418
|
-
Tools
|
419
|
-
|
420
|
-
profiler mixin for World (also an executable script?)
|
421
|
-
|
422
|
-
debugger mixin for World (also an executable script?)
|
423
|
-
|
424
|
-
generalize the irb-shell.rb and TO4230 shells, and make RedShift::Shell
|
425
|
-
|
426
|
-
use this in ZenoDebugger, too
|
427
|
-
|
428
|
-
can this be a mixin for World
|
429
|
-
|
430
|
-
general vis interface using TkCanvas/tkar or opengl
|
431
|
-
|