Currently, the programming environment does not support languages with I/O, which would be necessary for any real-world language.
Combining I/O with live programming is challenging because running code automatically may cause unintentional or even destructive side effects.
Additionally, I/O actions may block execution indefinitely, which prevents the programming environment from providing runtime information for the whole program (in time).
The first issue is one of safety. Automatic program execution could be made safe by isolating the program from the rest of the system running on the computer using containers (as in Docker). Containers are already widely used for this purpose, so the remaining work is building an interactive system for defining container images based on the program's requirements and integrating this in a development environment.
For prototyping, it would also be nice to be able to approve I/O actions interactively instead of having to modify a container image.
If the runtime environment of the program is brought under control of the programming environment, the performance issue is also solved more easily. Snapshots of intermediate container states could be used to skip the computations and I/O actions that lead up to that state in later executions.
Currently, the programming environment does not support languages with I/O, which would be necessary for any real-world language. Combining I/O with live programming is challenging because running code automatically may cause unintentional or even destructive side effects. Additionally, I/O actions may block execution indefinitely, which prevents the programming environment from providing runtime information for the whole program (in time).
The first issue is one of safety. Automatic program execution could be made safe by isolating the program from the rest of the system running on the computer using containers (as in Docker). Containers are already widely used for this purpose, so the remaining work is building an interactive system for defining container images based on the program's requirements and integrating this in a development environment. For prototyping, it would also be nice to be able to approve I/O actions interactively instead of having to modify a container image.
If the runtime environment of the program is brought under control of the programming environment, the performance issue is also solved more easily. Snapshots of intermediate container states could be used to skip the computations and I/O actions that lead up to that state in later executions.