Some frequently asked questions
about demos2k:
- Why demos?
-
Why change demos?
-
What has changed?
-
Why construct
yades?
-
How
much does it cost?
-
Can I change
it?
-
Where
do I find manuals examples?
-
What
OSes are supported?
-
the
sml install didn't work!
-
What is the expressive power of DEMOS2K?
-
What does the current interface do?
-
How do I illustrate families of models?
-
Why no native interrupts?
-
I don't like the way trace data is
handled?
-
I want a graphic interface to my model?
-
Can I allow users to change parameters
safely ?
-
The compilers are limited!
-
Why is it slow?
-
why does
repeat {i:=0;while[i<=range] {try [getB(foo[i],1)] then {something} etry [] then {};i:=i+1;}}
deadlock?
-
Why is the sml not abstracted
Demos was originally written as a package within SIMULA by Graham
Birtwistle. It was the result of his spotting commonalities in a large
number of simulation models he constructed directly within SIMULA. The
package became a standard within the SIMULA community and provided the
inspiration for many of the subsequent disrete event simulation
environments.
DEMOS was fundamentally reliant on the
underlying SIMULA. Thus in order to give it a complete semantics
firstly one would have to provide a complete semantics for SIMULA.
Graham and I had built operational
and denotational
accounts of DEMOS and these indicated the potential for some
simplification. The denotational accounts within both synchronous and
asynchronous process algebras offered some interesting insights into
multi way synchronisation.
The main structural change is that the programmer is no longer
responsible for the maintenance of pointers to synced objects and
explicitly requeuing them. The basic synchronisation construct of the
language is the waituntil rather than the queue, so the programmer does
not need to construct the own queue maintenance code. Values have been
attached to bins so that their full duality with syncs can
be exploited. Resource and sync monitoring (you can't free what you don't
have) is complete for error avoidance. Ability to hand over both
resource and syncs with bins and entity creation to achieve message
passing of about synchronous CHOCCS ( a precursor to Milner, Parrow and
Walkers Pi calculus) level. Finally, SIMULA access has been removed.
(Yet Another Discrete Event System)
The execution (simulation) Demos2k is mainly intended for debugging
and location of interesting parameters. The motivation was the
observation that it provides a 'half-way' house between formal
languages such as Petri Nets and Process algebras and purely executable
models. Some prototype compilers into tools that support analysis of
these languages are included. The front end is open to extension to
permit the addition of 3rd party compilers for other analysis methods
and tools.
It's free.
The complete system is based on open source principles and software.
Actually its a research liscence. You get the sources of everything and
can change anything up to copyright messages and
acknowledgements.
The download contains and updates version of Graham's original
manual (original
version). There are 70+ examples in the download drawn from this
and about 150 others in the zip for either windows or linux.
There are downloads for both Win32 and
Linux. In principle any system with both sml/nj 110.6 or later and the
perl5.004 with Tk can be supported. The linux version contains all of
the sources and some indication of install requirements for the
unsupported OSs.
We have had instances of corruption on download an up to date version
can be found at - current
sml.
About synchrous CHOCCS ( a precursor to Milner, Parrow and Walkers Pi calculus) level.
It based on 2 window presentation. Current program and results. It has
4 modes of operation
- simple run
- real time interaction
- experiment sets
- scripted model runs
For modes 3 and 4 there are web page generators for the output. Mode
2 also provides the step by step debugging as well as parameter change.
Supporting experiments is a data organizer and 3D graph tool. Modes 1
and 2 have multiple graph support and data export facilities. It also
gives access to plugins sml and perl/tk, provided as system
extensions.
Most modelers do not build single
models ;-) In the scripts there is a mechanism to build illustrations
of families of models, see the model command in the documentation for
scripts.
Graham says the originals were never used. Since we can simulate
them, albeit inefficiently, there are no plans to extend the system to
this at present. Proto design of
hold(t) unless [c1] then {} eunless [c2] then {};
try [c1] then {} etry [c2] then {} until(t);
Are under consideration but would require some demand before they
were implemented.
have a look at the various filter alternatives provided to see how
to write your own as an extension to the system.
Have a look at the code for the animator filter and the animator
examples. This gives a simple 'graphic equaliser' like view and shows
how to intercept traces. If you do something please let us have a copy
to mount on the site.
Both the real time and script modes permit interaction, with
constraints set on the parameter ranges. See the documentation.
Yep they are, very limited resources.
We have concentrated on a reference engine construction. The main
lack of speed is actually the amount of information coming up the pipe
to the interface to speed things up:
- run in value not trace mode, the later is mainly for debugging;
- turn of information you don't need, trace("BIN_OFF");
for instance suppresses bin change data
- Use experiment mode, this supresses everything except explicit
traces, worth keeping to a minimum in experiments;
- Volunteer to do a native java thread compiler of the fast
subset;-)
- Volunteer to do a interpreted compiled version in sml ;-)
why
does repeat {i:=0;while[i<=range] {try [getB(foo[i],1)]
then {something} etry [] then {};i:=i+1;}} deadlock?
It never releases the system clock no hold! If you want to scan over
input coming from multiple sources it is better to use a value bin to
denote the source location and avoid the active wait:
putVB(foo,[myId]); //code for insertion
local var src=0;
...
getVB(foo,[src],true);
something
Too many of the component functions
are useful in compilers.
|