Expand description
This crate is a part of discrete event simulation framework DVCompute Simulator (registration
number 2021660590 of Rospatent). The dvcompute_gpss_dist
crate defines a GPSS-like DSL for
optimistic distributed simulation, but the same code base is shared by the dvcompute_gpss_branch
crate destined for nested simulation.
The DSL language implements analogs of the following blocks: PREEMPT, RETURN, ASSEMBLE, GATHER, SPLIT, TRANSFER and others. The SELECT block is naturally expressed as a composition of computations. There are analogs of the facility and storage entities.
There are the following main crates: dvcompute
(sequential simulation),
dvcompute_dist
(optimistic distributed simulation),
dvcompute_cons
(conservative distributed simulation) and
dvcompute_branch
(nested simulation). All four crates are
very close. They are based on the same method.
In case of optimistic distributed simulation, you must satisfy the requirements that
the dvcompute_dist
crate imposes regarding the dynamic (shared) libraries.
The simulation method is described in the author’s article: Sorokin David. DVCompute Simulator for discrete event simulation. Prikladnaya informatika=Journal of Applied Informatics, 2021, vol.16, no.3, pp.93-108 (in Russian). DOI: 10.37791/2687-0649-2021-16-3-93-108
Here is an example, where each student arrival is modeled by some transact. These transacts are processed by the block computations:
fn student_chain(line: Grc<Queue>, prof: Grc<Facility<f64>>) -> BlockBox<Transact<f64>, ()> {
queue_block(line.clone(), 1)
.and_then(seize_block(prof.clone()))
.and_then(depart_block(line.clone(), 1))
.and_then({
advance_block(random_exponential_process_(1000.0))
})
.and_then(let_go_chain(line, prof))
.into_boxed()
}
fn let_go_chain(_line: Grc<Queue>, prof: Grc<Facility<f64>>) -> BlockBox<Transact<f64>, ()> {
release_block(prof)
.and_then(terminate_block())
.into_boxed()
}
These computations are arrows in terms of functional programming. They are combined with help of composition. Such computations should be run later to take effect.
You can find more examples in the author’s repository: https://gitflic.ru/project/dsorokin/dvcompute.
Modules§
- prelude
- The prelude module.
- simulation
- The main simulation module.