REPL stands for Read-Evaluate-Print Loop. It was/is the standard way of interacting with LISP based systems. It means interacting with a live interpreter, modifying the program and the data, computing useful results and developing end-user applications in a unified way.
When I started using Python in 2002 it already had fine REPL capabilities – I used it via Emacs and “C-M-x” to send the function definition to the Python process is hard-coded into me.
IPython came along which made interactive (i.e., REPL) Python easier for the many who did not use Emacs.
Then came Notebooks which introduced a whole new generation to REPL (sometimes in a confusing way, as obviously the cells can be evaluated in a non-linear way!).
Then came Jupyter Hub with scalable, sharable environment to collaborate – whether through notebooks or otherwise.
Its taken REPL to an entirely new level, not necessarily the just capabilities but the user-friendliness of the whole system.
Still REPL is not for everybody – how do we attach end-users to this efficient, dynamic environment? I’ve spent some time recently using Panel library for this purpose – and it works great. It allows attaching end-users to a dynamic notebook in a way which allows rapid development with user in the loop. And when the development is finished – equally easy and fast deployment of stand alone apps.
Some architecture slides
Here are some architecture slides on possible Panel Architectures:
And there is more information and some examples at: https://www.bnikolic.co.uk/quantpanel.html