Some run-times are also a paradigm, e.g. relational DBMS with indexes; distribuited Actor model with queue of messages; active rule systems.
Every part of Dok code should use a feature/DSL and compile to a feature/multiple-run-times.
So the workflow in Dok is:
- decide the best paradigm for a certain part
- use the correct DSL
- use the correct runtime
Some minor run-times as active rule systems can be used inside other run-times like distribuited Actors.
Some run-times can be used transparently from a DSL, as target of the macro expansion.
Other run-times are part of the paradigm exposed to the user.
There are differences between systems and an algorithms. Algorithms starts with an input and they procude a result. They have a complexity, constraints and so on. A System is composed of ever running process. It has a state with invariants. It never stop. It calls algorithms. It can follow different design paradigm like Actors, Calm, etc…
Hence, in Dok one can make a distinction between the language used for algorithms and synthetizing code using macro, and the run-time characteristics of the System.