.. _roadmap: =================== Development roadmap =================== IPython is an ambitious project that is still under heavy development. However, we want IPython to become useful to as many people as possible, as quickly as possible. To help us accomplish this, we are laying out a roadmap of where we are headed and what needs to happen to get there. Hopefully, this will help the IPython developers figure out the best things to work on for each upcoming release. Work targeted to particular releases ==================================== Release 0.11 ------------ * Full module and package reorganization (done). * Removal of the threaded shells and new implementation of GUI support based on ``PyOSInputHook`` (done). * Refactor the configuration system (done). * Prepare to refactor IPython's core by creating a new component and application system (done). * Start to refactor IPython's core by turning everything into components (started). Release 0.12 ------------ * Continue to refactor IPython's core by turning everything into components. Major areas of work =================== Refactoring the main IPython core --------------------------------- During the summer of 2009, we began refactoring IPython's core. The main thrust in this work was make the IPython core into a set of loosely coupled components. The base component class for this is :class:`IPython.core.component.Component`. This section outlines the status of this work. Parts of the IPython core that have been turned into components: * The main :class:`InteractiveShell` class. * The aliases (:mod:`IPython.core.aliases`). * The display and builtin traps (:mod:`IPython.core.display_trap` and :mod:`IPython.core.builtin_trap`). * The prefilter machinery (:mod:`IPython.core.prefilter`). Parts of the IPythoncore that need to be turned into components: * Magics. * Input and output history management. * Prompts. * Completers. * Logging. * Exception handling. * Anything else. Process management for :mod:`IPython.kernel` -------------------------------------------- Performance problems -------------------- Currently, we have a number of performance issues in :mod:`IPython.kernel`: * The controller stores a large amount of state in Python dictionaries. Under heavy usage, these dicts with get very large, causing memory usage problems. We need to develop more scalable solutions to this problem. This will also help the controller to be more fault tolerant. * We currently don't have a good way of handling large objects in the controller. The biggest problem is that because we don't have any way of streaming objects, we get lots of temporary copies in the low-level buffers. We need to implement a better serialization approach and true streaming support. * The controller currently unpickles and repickles objects. We need to use the [push|pull]_serialized methods instead. * Currently the controller is a bottleneck. The best approach for this is to separate the controller itself into multiple processes, one for the core controller and one each for the controller interfaces. Porting to 3.0 ============== There are no definite plans for porting of IPython to Python 3. The major issue is the dependency on Twisted framework for the networking/threading stuff. It is possible that it the traditional IPython interactive console could be ported more easily since it has no such dependency. Here are a few things that will need to be considered when doing such a port especially if we want to have a codebase that works directly on both 2.x and 3.x. 1. The syntax for exceptions changed (PEP 3110). The old `except exc, var` changed to `except exc as var`. At last count there was 78 occurrences of this usage in the code base. This is a particularly problematic issue, because it's not easy to implement it in a 2.5-compatible way. Because it is quite difficult to support simultaneously Python 2.5 and 3.x, we will likely at some point put out a release that requires strictly 2.6 and abandons 2.5 compatibility. This will then allow us to port the code to using :func:`print` as a function, `except exc as var` syntax, etc. But as of version 0.11 at least, we will retain Python 2.5 compatibility.