[IPython-dev] Execution semantics and how to set them

Zakariyya Mughal zaki.mughal at gmail.com
Sun Jan 25 14:16:59 EST 2015


On 2015-01-25 at 10:57:01 -0800, Thomas Kluyver wrote:
> Hi Zaki,
> 
> On 25 January 2015 at 10:26, Zakariyya Mughal <zaki.mughal at gmail.com> wrote:
> 
> >
> > I'm a language kernel author  and I'm looking at the execution semantics
> > document[^1] where I see a reference to the "single" execution mode.
> >
> > It says that the code
> >
> >     for i in range(10):
> >         i**2
> >
> > running in "single" mode would display 10 lines.
> >
> > I looked through the IPython source and I see that the execution
> > semantics are set as an argument for `run_ast_nodes`[^2], but I see no
> > way that the given for-loop would give multiple outputs unless the
> > `interactivity` parameter is set to `last` or `all`.
> 
> 
> First, let me emphasise that all of this is only relevant for executing
> Python code. If you're building a kernel for another language, you should
> ignore all of this. That documentation page is only about IPython's own
> kernel.
> 
> The three modes described on that page (exec, eval, single) are compilation
> modes of Python itself, passed as arguments to the built-in compile()
> function.
> 
> The parameter passed to our run_ast_nodes() method (which can be all, none,
> last or last_expr) controls which of a list of AST nodes are compiled in
> 'single' mode. Our default of last_expr is chosen specifically so that the
> for loop example above does not produce output, because we think that's
> more likely to be annoying than useful. There is no way to control this
> from the frontend, and I don't think we have any intention to add such a
> feature.
> 
> For your own kernel, you should implement whatever display of output makes
> sense given the language and the likely users. For Python, we decided that
> it makes sense to automatically display the result of the last statement if
> that statement is an expression, and implemented that using the details
> described above. For R, I implemented similar behaviour based on the
> evaluate package by creating an output_handler with a value= parameter.

I see. It's easy enough to just call print if a user wants that.

> Which language are you working on a kernel for?

I wrote one for Perl <https://github.com/zmughal/p5-Devel-IPerl>.

I released it back in August and I've been meaning to write a blog post
and announce it more widely, but I first wanted to make sure it
installed everywhere.

Cheers,
- Zaki Mughal

> 
> Thomas

> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev




More information about the IPython-dev mailing list