From c8ea81d0bcbe5a5bf66596d550eaf7faeafbbc34 2022-05-14 19:10:15 From: MH Date: 2022-05-14 19:10:15 Subject: [PATCH] WIP on documentation for known issues --- diff --git a/docs/runtime/known_issues.md b/docs/runtime/known_issues.md new file mode 100644 index 0000000000000000000000000000000000000000..a16238e15a50edcedbd0cc583522c4f49f510944 --- /dev/null +++ b/docs/runtime/known_issues.md @@ -0,0 +1,23 @@ +# Known Issues + +The current implementation of Reowolf has the following known issues: + +- Cannot create uninitialized variables that are later known to be initialized. This is not a problem for the regular types (perhaps a bit tedious), but is a problem for channels/ports. That is to say: if a component needs a temporary variable for a port, then it must create a complete channel. e.g. + + ``` + comp send(out tx1, out tx2, in which) { + channel unused -> temporary; + while (true) sync { + if (get(which)) { + temporary = tx1; + } else { + temporary = tx2; + } + put(temporary, 1); + } + } + ``` + +- Reserved memory for ports will grow without bounds: Ports can be given away from one component to another by creating a component, or by sending a message containing them. The component sending those ports cannot remove them from its own memory if there are still other references to the transferred port in its memory. This is because we want to throw a reasonable error if that transferred port is used by the original owner. Hence we need to keep some information about that transferred port in the sending component's memory. The solution is to have reference counting for the ports, but this is not implemented. + +- Some control algorithms are not robust under multithreading. Mainly error handling when in sync mode (because there needs to be a revision where we keep track of which components are still reachable by another component). And complicated scenarios where ports are transferred. \ No newline at end of file