redshift 1.3.24 → 1.3.26

Sign up to get free protection for your applications and to get access to all the features.
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
-