redshift 1.3.24 → 1.3.26

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.
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
- hash: 43
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
- date: 2010-08-17 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
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
- - .bnsignore
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/discrete.rb
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/linked-flows.rb
103
- - bench/prof.html
104
- - bench/queues.rb
105
- - bench/run
39
+ - bench/algebraic.rb
106
40
  - bench/simple.rb
107
- - bench/strictness.rb
108
- - examples/ball-tkar.rb
109
- - examples/ball.rb
110
- - examples/collide.rb
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/euler.rb
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/lotka-volterra.rb
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/orbit.rb
122
- - examples/pid.rb
123
- - examples/ports.rb
74
+ - examples/ball.rb
124
75
  - examples/queue.rb
125
- - examples/queue2.rb
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/scheduler.rb
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/step-discrete-hook.rb
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/util/isaac/isaac.c
161
- - ext/redshift/util/isaac/rand.c
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/c/component-gen.rb
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/library.rb
114
+ - lib/redshift/target/c/flow-gen.rb
184
115
  - lib/redshift/target/c/world-gen.rb
185
- - lib/redshift/target/spec.rb
186
- - lib/redshift/util/accessible-index.rb
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/superhash.rb
122
+ - lib/redshift/util/irb-shell.rb
196
123
  - lib/redshift/util/tkar-driver.rb
197
- - lib/redshift/util/tracer.rb
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
- - rakefile
202
- - test/test.rb
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/test_connect_parallel.rb
206
- - test/test_connect_strict.rb
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/test_derivative.rb
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/test_flow_link.rb
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/test_numerics.rb
226
- - test/test_queue.rb
163
+ - test/test_connect_parallel.rb
227
164
  - test/test_queue_alone.rb
228
- - test/test_reset.rb
229
- - test/test_setup.rb
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/test_world.rb
235
- has_rdoc: true
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
- none: false
248
- requirements:
249
- - - ">="
250
- - !ruby/object:Gem::Version
251
- hash: 3
252
- segments:
253
- - 0
254
- version: "0"
255
- required_rubygems_version: !ruby/object:Gem::Requirement
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: 1.3.7
203
+ rubygems_version: 2.0.3
268
204
  signing_key:
269
- specification_version: 3
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
@@ -1,9 +0,0 @@
1
- *.bck
2
- /pkg
3
- junk
4
- tmp
5
- *.o
6
- *.so
7
- /ext/*/*/Makefile
8
- /ext/*/*/*/Makefile
9
- /rdoc/*
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
-