Known limitations#
Things that are known to be missing, fragile or surprising, gathered in one place. Each entry says where it comes from, to help deciding when it becomes worth fixing.
Data structures#
Saved graphs don’t follow the node definitions. The sockets are copied from the
NodeDefinitionwhen a node is added, and saved completely. If a definition changes later (new socket, new allowed value, new default), the existing graphs and their files keep the old sockets. There is no migration.Proxy nodes don’t follow their inner graph. A proxy node copies the interface of its graph when it is created. If the interface changes, the existing proxy node keeps its old sockets; at runtime, new inner parameters use their own value, and removed results give
null_data(the operator using them fails).The
activeflag of the sockets is stored and saved, but nothing uses it.add_linkis O(nodes + links) because of the cycle detection, which copies the set of links. Fine for interactive editing, slow for building huge graphs programmatically.Node IDs are random: two runs of the same program give different IDs (unless
Node::seed_random_idsis used), so the files of a same graph built twice are different.
Disk#
Endianness: the binary format uses the native byte order: files are not portable between little-endian and big-endian machines.
Windows:
GraphManager::can_read/can_writeuse POSIXaccess().Head precedence: reading uses the first head containing the file, saving the most personal writable head; they can disagree (see The GraphManager).
Recursive proxies across several graphs are only detected when building the runtime.
Runtime#
Sequential execution only; no use of the depth for parallelism.
poll()has no real semantics yet (called once, no waiting).The data bank never frees values during the life of a runtime.
Unparsable constants are only detected at run time (
pullfails), not when building.
Process#
doc/todos.rstis generated byutils/generate_todos.pyand must be regenerated after changes.