When a Mouse Eats a Python: Smalltalk-style Development for Python and Ruby
Debuggers in interactive programming environments are powerful tools to explore and develop systems at runtime.
However, among users of scripting languages such as Python or Ruby, a debugger is sometimes viewed as a rarely used “development time” tool. As Seaton, Van De Vanter, and Haupt have observed debugging support is assumed to come with compromises: there surely must be a performance impact; in order to minimize the impact when debugging is not needed the functionality surely must be limited; the complexity of debugging couples debuggers closely to just one language; and in order to actually use debugging facilities, one surely must accept the inconvenience of having to run the program in a special “debug” mode.
Due to the inconvenience involved in using debuggers in such systems, developers instead set up feedback loops by creating the infrastructure for quick, repeated test executions. This further cements the distinction between “development time” and “deployment time”: to a program running in production, this feedback loop infrastructure is not available and any issues have to be reproduced and distilled into tests on a development system before they can be fixed.
As Gilad Bracha has noted, this separation of development time and deployment time stands in contrast to environments in the Lisp, Smalltalk, and Self heritage that view programs as live, continuously evolving systems. The development environment is the runtime environment and developers can work with concrete objects and can interrupt, inspect, and modify runtime state, and keep running.
In this work, we present a prototype virtual machine (VM) written in RPython based on the RSqueak/VM that provides Squeak/Smalltalk’s live development and debugging to PyPy Python and Topaz Ruby. Of particular interest in this context is how the interpreters can be adapted in a general fashion for Smalltalk-style development, as well as the practical overhead of such an integration.
The core features of our prototype are:
- A combination of multiple RPython interpreters in the same, cooperatively scheduled execution environment,
- Smalltalk-style unhandled exception debugging for Ruby and Python,
- Smalltalk-style edit-and-continue for Ruby and Python.
|Extended Abstract (morevms17-final14.pdf)||99KiB|
Mon 3 Apr
|09:00 - 09:25|
|09:25 - 09:50|
|09:50 - 10:15|
|10:15 - 10:40|