All Projects → garro95 → desim

garro95 / desim

Licence: GPL-3.0 license
A discrete-time events simulation framework, written in rust, using the generator experimental feature

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to desim

Eztime
ezTime — pronounced "Easy Time" — is a very easy to use Arduino time and date library that provides NTP network time lookups, extensive timezone support, formatted time and date strings, user events, millisecond precision and more.
Stars: ✭ 173 (+540.74%)
Mutual labels:  events, time
Easyappointments
Easy!Appointments is a highly customizable web application that allows customers to book appointments with you via a sophisticated web interface. Moreover, it provides the ability to sync your data with Google Calendar so you can use them with other services. It is an open source project that you can download and install even for commercial use. Easy!Appointments will run smoothly with your existing website as it can be installed in a single folder of the server and of course share an existing database.
Stars: ✭ 2,013 (+7355.56%)
Mutual labels:  events, time
cas
Cellular Automata Simulator
Stars: ✭ 22 (-18.52%)
Mutual labels:  time, simulator
easyappointments-integrations
📅 Various platform integration packages of Easy!Appointments
Stars: ✭ 29 (+7.41%)
Mutual labels:  events, time
kalend
React calendar component with support for multiple views and events
Stars: ✭ 135 (+400%)
Mutual labels:  events
appfiguratesdk
Appfigurate provides the ability to change configuration properties in iOS and watchOS, apps and app extensions, securely, at runtime.
Stars: ✭ 21 (-22.22%)
Mutual labels:  simulator
dead-simple
💀💡 Dead simple PubSub and EventEmitter in JavaScript
Stars: ✭ 21 (-22.22%)
Mutual labels:  events
pyEnigma
Python Enigma cypher machine simulator.
Stars: ✭ 44 (+62.96%)
Mutual labels:  simulator
time.clj
time util for Clojure(Script)
Stars: ✭ 45 (+66.67%)
Mutual labels:  time
TimesDates.jl
Nanosecond resolution for Time and Date, TimeZones
Stars: ✭ 28 (+3.7%)
Mutual labels:  time
kronos
Management of arithmetic operations on dates
Stars: ✭ 23 (-14.81%)
Mutual labels:  time
TimeContinuum
No description or website provided.
Stars: ✭ 28 (+3.7%)
Mutual labels:  time
lv sim emscripten
LVGL ported to Emscripten to be converted to JavaScript
Stars: ✭ 40 (+48.15%)
Mutual labels:  simulator
brainbox
Teaching-focused digital circuit simulator. Allows anyone to graphically connect objects within a awesome web-browser application without knowing coding or hacking.
Stars: ✭ 100 (+270.37%)
Mutual labels:  simulator
event
An event dispatching library for PHP
Stars: ✭ 19 (-29.63%)
Mutual labels:  events
KittyEvents
Super simple event system on top of ActiveJob
Stars: ✭ 20 (-25.93%)
Mutual labels:  events
scala-java-time
Implementation of the `java.time` API in scala. Especially useful for scala.js
Stars: ✭ 111 (+311.11%)
Mutual labels:  time
react-native-console-time-polyfill
console.time and console.timeEnd polyfill for react-native
Stars: ✭ 92 (+240.74%)
Mutual labels:  time
time machine
A date and time API for Dart
Stars: ✭ 120 (+344.44%)
Mutual labels:  time
commons.openshift.org
Repository for OpenShift Commons Community Site
Stars: ✭ 31 (+14.81%)
Mutual labels:  events

desim

crate workflow status

desim stands for Discrete-time Events SIMulator. It aims to be a high quality, easy to use simulation framework for physical or logical systems that are based on processes that are triggered by events and that can cause other events to occur.

It is inspired by the Simpy environment for Python, but with the aim of being more efficient and to provide also a concurrent implementation. To achieve the same ease of use remaining light and efficient, it is based on the experimental generators (coroutine) rust feature.

You can read the API documentation here

Usage

To use the framework, add the following line to your Cargo.toml:

desim = "0.2"

Version numbers follow the semver convention.

The simulation environment is provided by the Simulation struct, which exposes methods to spawn processes, allocate resources and schedule events. Moreover it offers getters to retrieve the current time and the ordered list of processed events and methods to process the next event in the simulation and to run all the events until a certain condition is verified.

A process is a generator that yields a variant of the Effect enum. Using this type the process may interact with the simulation, for example scheduling events or requesting resources.

For more information see the API documentation linked above.

Examples

The examples folder contains some simulations that use desim. You can build and run them with cargo run --example <name>.

Contributing

Feel free to contribute to this project with pull requests and/or issues. All contribution should be under a license compatible with the GNU GPLv3.

Why did you chose the GNU GPL instead of a more permissive license like Apache/MIT? Because I wrote a piece of free software and I don't want it to be used as the basis of a proprietary one. Improvements of this work or simulation software written using desim as a library should be free software as well.

Changes

  • 0.3.0 Allow the definition of custom Resource types.
    WARNING: contains breaking changes:
    • SimGen has been renamed to Process
    • Resource is now a trait and the create_resource method has been updated to take in input a Box<dyn Resource<T>>
    • The old resource type can still be used creating an instance of SimpleResource
  • 0.2.0 With generators resume arguments support, add a Simulation Context that is passed to processes on resume and can be used to retrieve the simulation time or the event that caused the generator to resume
  • 0.1.0 First release
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].