Whether you are using a statically typed or dynamically typed language, there is typically a rigid separation between writing code and running code. Smalltalk environments focused on running code where writing code was actually a function of the running program. However, this approach was usually implemented using a snapshot of a running process that makes sharing code and managing changes over time quite difficult.
What if we could blur the separation between writing code and running code? This could empower us to use information about how our program is running in production while adding new features or maintaining existing code. What if we could combine data from test runs, a coworker’s activities, and running production applications while writing code? Such a feature could enable powerful code analysis and auditing tools. This talk takes a tour of these possibilities on the Rubinius dynamic language environment.