##// END OF EJS Templates
Mention new introspection capabilities in What's New document.
Thomas Kluyver -
Show More
@@ -1,235 +1,239 b''
1 ================================================
1 ================================================
2 Development version
2 Development version
3 ================================================
3 ================================================
4
4
5 The changes listed here are a brief summary of the substantial work on IPython
5 The changes listed here are a brief summary of the substantial work on IPython
6 since the 0.10.x release series. For more details, please consult the actual
6 since the 0.10.x release series. For more details, please consult the actual
7 source.
7 source.
8
8
9 Main `ipython` branch
9 Main `ipython` branch
10 =====================
10 =====================
11
11
12 Refactoring
12 Refactoring
13 -----------
13 -----------
14
14
15 As of the 0.11 version of IPython, a signifiant portion of the core has been
15 As of the 0.11 version of IPython, a signifiant portion of the core has been
16 refactored. This refactoring is founded on a number of new abstractions.
16 refactored. This refactoring is founded on a number of new abstractions.
17 The main new classes that implement these abstractions are:
17 The main new classes that implement these abstractions are:
18
18
19 * :class:`IPython.utils.traitlets.HasTraitlets`.
19 * :class:`IPython.utils.traitlets.HasTraitlets`.
20 * :class:`IPython.core.component.Component`.
20 * :class:`IPython.core.component.Component`.
21 * :class:`IPython.core.application.Application`.
21 * :class:`IPython.core.application.Application`.
22 * :class:`IPython.config.loader.ConfigLoader`.
22 * :class:`IPython.config.loader.ConfigLoader`.
23 * :class:`IPython.config.loader.Config`
23 * :class:`IPython.config.loader.Config`
24
24
25 We are still in the process of writing developer focused documentation about
25 We are still in the process of writing developer focused documentation about
26 these classes, but for now our :ref:`configuration documentation
26 these classes, but for now our :ref:`configuration documentation
27 <config_overview>` contains a high level overview of the concepts that these
27 <config_overview>` contains a high level overview of the concepts that these
28 classes express.
28 classes express.
29
29
30 ZMQ architecture
30 ZMQ architecture
31 ----------------
31 ----------------
32
32
33 There is a new GUI framework for IPython, based on a client-server model in
33 There is a new GUI framework for IPython, based on a client-server model in
34 which multiple clients can communicate with one IPython kernel, using the
34 which multiple clients can communicate with one IPython kernel, using the
35 ZeroMQ messaging framework. There is already a Qt console client, which can
35 ZeroMQ messaging framework. There is already a Qt console client, which can
36 be started by calling ``ipython-qtconsole``. The protocol is :ref:`documented
36 be started by calling ``ipython qtconsole``. The protocol is :ref:`documented
37 <messaging>`.
37 <messaging>`.
38
38
39 The parallel computing framework has also been rewritten using ZMQ. The
39 The parallel computing framework has also been rewritten using ZMQ. The
40 protocol is described :ref:`here <parallel_messages>`, and the code is in the
40 protocol is described :ref:`here <parallel_messages>`, and the code is in the
41 new :mod:`IPython.parallel` module.
41 new :mod:`IPython.parallel` module.
42
42
43 New features
43 New features
44 ------------
44 ------------
45
45
46 * You can now get help on an object halfway through typing a command. For
47 instance, typing ``a = zip?`` shows the details of :func:`zip`. It also
48 leaves the command at the next prompt so you can carry on with it.
49
46 * The input history is now written to an SQLite database. The API for
50 * The input history is now written to an SQLite database. The API for
47 retrieving items from the history has also been redesigned.
51 retrieving items from the history has also been redesigned.
48
52
49 * The :mod:`IPython.extensions.pretty` extension has been moved out of
53 * The :mod:`IPython.extensions.pretty` extension has been moved out of
50 quarantine and fully updated to the new extension API.
54 quarantine and fully updated to the new extension API.
51
55
52 * New magics for loading/unloading/reloading extensions have been added:
56 * New magics for loading/unloading/reloading extensions have been added:
53 ``%load_ext``, ``%unload_ext`` and ``%reload_ext``.
57 ``%load_ext``, ``%unload_ext`` and ``%reload_ext``.
54
58
55 * The configuration system and configuration files are brand new. See the
59 * The configuration system and configuration files are brand new. See the
56 configuration system :ref:`documentation <config_index>` for more details.
60 configuration system :ref:`documentation <config_index>` for more details.
57
61
58 * The :class:`~IPython.core.iplib.InteractiveShell` class is now a
62 * The :class:`~IPython.core.iplib.InteractiveShell` class is now a
59 :class:`~IPython.core.component.Component` subclass and has traitlets that
63 :class:`~IPython.core.component.Component` subclass and has traitlets that
60 determine the defaults and runtime environment. The ``__init__`` method has
64 determine the defaults and runtime environment. The ``__init__`` method has
61 also been refactored so this class can be instantiated and run without the
65 also been refactored so this class can be instantiated and run without the
62 old :mod:`ipmaker` module.
66 old :mod:`ipmaker` module.
63
67
64 * The methods of :class:`~IPython.core.iplib.InteractiveShell` have
68 * The methods of :class:`~IPython.core.iplib.InteractiveShell` have
65 been organized into sections to make it easier to turn more sections
69 been organized into sections to make it easier to turn more sections
66 of functionality into componenets.
70 of functionality into components.
67
71
68 * The embedded shell has been refactored into a truly standalone subclass of
72 * The embedded shell has been refactored into a truly standalone subclass of
69 :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All
73 :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All
70 embedding logic has been taken out of the base class and put into the
74 embedding logic has been taken out of the base class and put into the
71 embedded subclass.
75 embedded subclass.
72
76
73 * I have created methods of :class:`~IPython.core.iplib.InteractiveShell` to
77 * I have created methods of :class:`~IPython.core.iplib.InteractiveShell` to
74 help it cleanup after itself. The :meth:`cleanup` method controls this. We
78 help it cleanup after itself. The :meth:`cleanup` method controls this. We
75 couldn't do this in :meth:`__del__` because we have cycles in our object
79 couldn't do this in :meth:`__del__` because we have cycles in our object
76 graph that prevent it from being called.
80 graph that prevent it from being called.
77
81
78 * Created a new module :mod:`IPython.utils.importstring` for resolving
82 * Created a new module :mod:`IPython.utils.importstring` for resolving
79 strings like ``foo.bar.Bar`` to the actual class.
83 strings like ``foo.bar.Bar`` to the actual class.
80
84
81 * Completely refactored the :mod:`IPython.core.prefilter` module into
85 * Completely refactored the :mod:`IPython.core.prefilter` module into
82 :class:`~IPython.core.component.Component` subclasses. Added a new layer
86 :class:`~IPython.core.component.Component` subclasses. Added a new layer
83 into the prefilter system, called "transformations" that all new prefilter
87 into the prefilter system, called "transformations" that all new prefilter
84 logic should use (rather than the older "checker/handler" approach).
88 logic should use (rather than the older "checker/handler" approach).
85
89
86 * Aliases are now components (:mod:`IPython.core.alias`).
90 * Aliases are now components (:mod:`IPython.core.alias`).
87
91
88 * We are now using an internally shipped version of
92 * We are now using an internally shipped version of
89 :mod:`~IPython.external.argparse` to parse command line options for
93 :mod:`~IPython.external.argparse` to parse command line options for
90 :command:`ipython`.
94 :command:`ipython`.
91
95
92 * New top level :func:`~IPython.frontend.terminal.embed.embed` function that can be called
96 * New top level :func:`~IPython.frontend.terminal.embed.embed` function that can be called
93 to embed IPython at any place in user's code. One the first call it will
97 to embed IPython at any place in user's code. One the first call it will
94 create an :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed` instance and
98 create an :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed` instance and
95 call it. In later calls, it just calls the previously created
99 call it. In later calls, it just calls the previously created
96 :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`.
100 :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`.
97
101
98 * Created a component system (:mod:`IPython.core.component`) that is based on
102 * Created a component system (:mod:`IPython.core.component`) that is based on
99 :mod:`IPython.utils.traitlets`. Components are arranged into a runtime
103 :mod:`IPython.utils.traitlets`. Components are arranged into a runtime
100 containment tree (not inheritance) that i) automatically propagates
104 containment tree (not inheritance) that i) automatically propagates
101 configuration information and ii) allows components to discover each other
105 configuration information and ii) allows components to discover each other
102 in a loosely coupled manner. In the future all parts of IPython will be
106 in a loosely coupled manner. In the future all parts of IPython will be
103 subclasses of :class:`~IPython.core.component.Component`. All IPython
107 subclasses of :class:`~IPython.core.component.Component`. All IPython
104 developers should become familiar with the component system.
108 developers should become familiar with the component system.
105
109
106 * Created a new :class:`~IPython.config.loader.Config` for holding
110 * Created a new :class:`~IPython.config.loader.Config` for holding
107 configuration information. This is a dict like class with a few extras: i)
111 configuration information. This is a dict like class with a few extras: i)
108 it supports attribute style access, ii) it has a merge function that merges
112 it supports attribute style access, ii) it has a merge function that merges
109 two :class:`~IPython.config.loader.Config` instances recursively and iii) it
113 two :class:`~IPython.config.loader.Config` instances recursively and iii) it
110 will automatically create sub-:class:`~IPython.config.loader.Config`
114 will automatically create sub-:class:`~IPython.config.loader.Config`
111 instances for attributes that start with an uppercase character.
115 instances for attributes that start with an uppercase character.
112
116
113 * Created new configuration loaders in :mod:`IPython.config.loader`. These
117 * Created new configuration loaders in :mod:`IPython.config.loader`. These
114 loaders provide a unified loading interface for all configuration
118 loaders provide a unified loading interface for all configuration
115 information including command line arguments and configuration files. We
119 information including command line arguments and configuration files. We
116 have two default implementations based on :mod:`argparse` and plain python
120 have two default implementations based on :mod:`argparse` and plain python
117 files. These are used to implement the new configuration system.
121 files. These are used to implement the new configuration system.
118
122
119 * Created a top-level :class:`Application` class in
123 * Created a top-level :class:`Application` class in
120 :mod:`IPython.core.application` that is designed to encapsulate the starting
124 :mod:`IPython.core.application` that is designed to encapsulate the starting
121 of any IPython process. An application loads and merges all the
125 of any IPython process. An application loads and merges all the
122 configuration objects, constructs the main application :class:`Component`
126 configuration objects, constructs the main application :class:`Component`
123 instances and then starts the application running. The default
127 instances and then starts the application running. The default
124 :class:`Application` class has built-in logic for handling the IPython
128 :class:`Application` class has built-in logic for handling the IPython
125 directory as well as profiles.
129 directory as well as profiles.
126
130
127 * The :class:`Type` and :class:`Instance` traitlets now handle classes given
131 * The :class:`Type` and :class:`Instance` traitlets now handle classes given
128 as strings, like ``foo.bar.Bar``. This is needed for forward declarations.
132 as strings, like ``foo.bar.Bar``. This is needed for forward declarations.
129 But, this was implemented in a careful way so that string to class
133 But, this was implemented in a careful way so that string to class
130 resolution is done at a single point, when the parent
134 resolution is done at a single point, when the parent
131 :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated.
135 :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated.
132
136
133 * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of
137 * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of
134 dict. It also now has full docstrings and doctests.
138 dict. It also now has full docstrings and doctests.
135 * Created a Trait's like implementation in :mod:`IPython.utils.traitlets`.
139 * Created a Trait's like implementation in :mod:`IPython.utils.traitlets`.
136 This is a pure Python, lightweight version of a library that is similar to
140 This is a pure Python, lightweight version of a library that is similar to
137 :mod:`enthought.traits`. We are using this for validation, defaults and
141 :mod:`enthought.traits`. We are using this for validation, defaults and
138 notification in our new component system. Although it is not API compatible
142 notification in our new component system. Although it is not API compatible
139 with :mod:`enthought.traits`, we plan on moving in this direction so that
143 with :mod:`enthought.traits`, we plan on moving in this direction so that
140 eventually our implementation could be replaced by a (yet to exist) pure
144 eventually our implementation could be replaced by a (yet to exist) pure
141 Python version of :mod:`enthought.traits`.
145 Python version of :mod:`enthought.traits`.
142
146
143 * Added a new module :mod:`IPython.lib.inputhook` to manage the integration
147 * Added a new module :mod:`IPython.lib.inputhook` to manage the integration
144 with GUI event loops using `PyOS_InputHook`. See the docstrings in this
148 with GUI event loops using `PyOS_InputHook`. See the docstrings in this
145 module or the main IPython docs for details.
149 module or the main IPython docs for details.
146
150
147 * For users, GUI event loop integration is now handled through the new
151 * For users, GUI event loop integration is now handled through the new
148 :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for
152 :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for
149 documentation.
153 documentation.
150
154
151 * The command line options ``-wthread``, ``-qthread`` and
155 * The command line options ``-wthread``, ``-qthread`` and
152 ``-gthread`` just call the appropriate :mod:`IPython.lib.inputhook`
156 ``-gthread`` just call the appropriate :mod:`IPython.lib.inputhook`
153 functions.
157 functions.
154
158
155 * For developers :mod:`IPython.lib.inputhook` provides a simple interface
159 * For developers :mod:`IPython.lib.inputhook` provides a simple interface
156 for managing the event loops in their interactive GUI applications.
160 for managing the event loops in their interactive GUI applications.
157 Examples can be found in our :file:`docs/examples/lib` directory.
161 Examples can be found in our :file:`docs/examples/lib` directory.
158
162
159 Backwards incompatible changes
163 Backwards incompatible changes
160 ------------------------------
164 ------------------------------
161
165
162 * The extension loading functions have been renamed to
166 * The extension loading functions have been renamed to
163 :func:`load_ipython_extension` and :func:`unload_ipython_extension`.
167 :func:`load_ipython_extension` and :func:`unload_ipython_extension`.
164
168
165 * :class:`~IPython.core.iplib.InteractiveShell` no longer takes an
169 * :class:`~IPython.core.iplib.InteractiveShell` no longer takes an
166 ``embedded`` argument. Instead just use the
170 ``embedded`` argument. Instead just use the
167 :class:`~IPython.core.iplib.InteractiveShellEmbed` class.
171 :class:`~IPython.core.iplib.InteractiveShellEmbed` class.
168
172
169 * ``__IPYTHON__`` is no longer injected into ``__builtin__``.
173 * ``__IPYTHON__`` is no longer injected into ``__builtin__``.
170
174
171 * :meth:`Struct.__init__` no longer takes `None` as its first argument. It
175 * :meth:`Struct.__init__` no longer takes `None` as its first argument. It
172 must be a :class:`dict` or :class:`Struct`.
176 must be a :class:`dict` or :class:`Struct`.
173
177
174 * :meth:`~IPython.core.iplib.InteractiveShell.ipmagic` has been renamed
178 * :meth:`~IPython.core.iplib.InteractiveShell.ipmagic` has been renamed
175 :meth:`~IPython.core.iplib.InteractiveShell.magic.`
179 :meth:`~IPython.core.iplib.InteractiveShell.magic.`
176
180
177 * The functions :func:`ipmagic` and :func:`ipalias` have been removed from
181 * The functions :func:`ipmagic` and :func:`ipalias` have been removed from
178 :mod:`__builtins__`.
182 :mod:`__builtins__`.
179
183
180 * The references to the global :class:`~IPython.core.iplib.InteractiveShell`
184 * The references to the global :class:`~IPython.core.iplib.InteractiveShell`
181 instance (``_ip``, and ``__IP``) have been removed from the user's
185 instance (``_ip``, and ``__IP``) have been removed from the user's
182 namespace. They are replaced by a new function called :func:`get_ipython`
186 namespace. They are replaced by a new function called :func:`get_ipython`
183 that returns the current :class:`~IPython.core.iplib.InteractiveShell`
187 that returns the current :class:`~IPython.core.iplib.InteractiveShell`
184 instance. This function is injected into the user's namespace and is now the
188 instance. This function is injected into the user's namespace and is now the
185 main way of accessing IPython's API.
189 main way of accessing IPython's API.
186
190
187 * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py`
191 * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py`
188 are no longer supported. Users should migrate there configuration files to
192 are no longer supported. Users should migrate there configuration files to
189 the new format described :ref:`here <config_overview>` and :ref:`here
193 the new format described :ref:`here <config_overview>` and :ref:`here
190 <configuring_ipython>`.
194 <configuring_ipython>`.
191
195
192 * The old IPython extension API that relied on :func:`ipapi` has been
196 * The old IPython extension API that relied on :func:`ipapi` has been
193 completely removed. The new extension API is described :ref:`here
197 completely removed. The new extension API is described :ref:`here
194 <configuring_ipython>`.
198 <configuring_ipython>`.
195
199
196 * Support for ``qt3`` has been dropped. User's who need this should use
200 * Support for ``qt3`` has been dropped. User's who need this should use
197 previous versions of IPython.
201 previous versions of IPython.
198
202
199 * Removed :mod:`shellglobals` as it was obsolete.
203 * Removed :mod:`shellglobals` as it was obsolete.
200
204
201 * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no
205 * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no
202 longer needed because of the new capabilities in
206 longer needed because of the new capabilities in
203 :mod:`IPython.lib.inputhook`.
207 :mod:`IPython.lib.inputhook`.
204
208
205 * The ``-pylab`` command line flag has been disabled until matplotlib adds
209 * The ``-pylab`` command line flag has been disabled until matplotlib adds
206 support for the new :mod:`IPython.lib.inputhook` approach. The new stuff
210 support for the new :mod:`IPython.lib.inputhook` approach. The new stuff
207 does work with matplotlib, but you have to set everything up by hand.
211 does work with matplotlib, but you have to set everything up by hand.
208
212
209 * New top-level sub-packages have been created: :mod:`IPython.core`,
213 * New top-level sub-packages have been created: :mod:`IPython.core`,
210 :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`,
214 :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`,
211 :mod:`IPython.quarantine`. All existing top-level modules have been
215 :mod:`IPython.quarantine`. All existing top-level modules have been
212 moved to appropriate sub-packages. All internal import statements
216 moved to appropriate sub-packages. All internal import statements
213 have been updated and tests have been added. The build system (setup.py
217 have been updated and tests have been added. The build system (setup.py
214 and friends) have been updated. See :ref:`this section <module_reorg>` of the
218 and friends) have been updated. See :ref:`this section <module_reorg>` of the
215 documentation for descriptions of these new sub-packages.
219 documentation for descriptions of these new sub-packages.
216
220
217 * Compatability modules have been created for :mod:`IPython.Shell`,
221 * Compatability modules have been created for :mod:`IPython.Shell`,
218 :mod:`IPython.ipapi` and :mod:`IPython.iplib` that display warnings
222 :mod:`IPython.ipapi` and :mod:`IPython.iplib` that display warnings
219 and then load the actual implementation from :mod:`IPython.core`.
223 and then load the actual implementation from :mod:`IPython.core`.
220
224
221 * :mod:`Extensions` has been moved to :mod:`extensions` and all existing
225 * :mod:`Extensions` has been moved to :mod:`extensions` and all existing
222 extensions have been moved to either :mod:`IPython.quarantine` or
226 extensions have been moved to either :mod:`IPython.quarantine` or
223 :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we
227 :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we
224 plan on keeping but that need to be updated. :mod:`IPython.deathrow`
228 plan on keeping but that need to be updated. :mod:`IPython.deathrow`
225 contains modules that are either dead or that should be maintained as third
229 contains modules that are either dead or that should be maintained as third
226 party libraries. More details about this can be found :ref:`here
230 party libraries. More details about this can be found :ref:`here
227 <module_reorg>`.
231 <module_reorg>`.
228
232
229 * The IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are likely
233 * The IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are likely
230 broken because of the refactoring in the core. With proper updates, these
234 broken because of the refactoring in the core. With proper updates, these
231 should still work. We probably want to get these so they are not using
235 should still work. We probably want to get these so they are not using
232 :mod:`IPython.kernel.core` (which is being phased out).
236 :mod:`IPython.kernel.core` (which is being phased out).
233
237
234
238
235
239
General Comments 0
You need to be logged in to leave comments. Login now