

Adding a new statement to Python - motter
http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/

======
ghc
I would have liked to see how easy it is to add a new statement to pypy for
comparison's sake.

~~~
kingkilr
It's going to have all these same steps, but they'll mostly be in python. I'll
try to write a tutorial on this at some point.

------
perfunctory
Very useful post I think. Not to depreciate Python the language, but it might
be interesting to compare "adding a new statement to Python" with "adding a
new statement to Lisp". Especially for people struggling to grasp Lisp's
benefits.

~~~
Kototama
Here, adding a 'unless' statement:

    
    
        (defmacro unless [expr & body] `(if ~expr nil (do ~@body)))
    

Taken from: [http://stackoverflow.com/questions/2977882/defining-
clojure-...](http://stackoverflow.com/questions/2977882/defining-clojure-
macro-syntax)

Macro in Lisp are essentially functions taking code as argument and returning
code, but they are executed at compile-time.

Edit: replaced with the correct version, sorry for the error.

~~~
roryokane
According to that question's answer and comments, that definition is buggy
(making it not quite a fair comparison). Here is a less buggy, more flexible
version, taken from a comment:

    
    
      (defmacro unless [expr & body] `(if ~expr nil (do ~@body)))

------
motter
I was reminded of this by the post on the goto statement -- having used the
AST module recently in a limited capacity[1], I was really impressed by how
easy it was to use. There's a good pycon talk for those interested
specifically in this part of the process[2], and you can also see the full
grammar[3].

[1] [http://blueprintforge.com/blog/2012/02/27/static-
modificatio...](http://blueprintforge.com/blog/2012/02/27/static-modification-
of-python-with-python-the-ast-module/)

[2] [http://blip.tv/pycon-us-
videos-2009-2010-2011/pycon-2011-wha...](http://blip.tv/pycon-us-
videos-2009-2010-2011/pycon-2011-what-would-you-do-with-an-ast-4898264)

[3] <http://docs.python.org/library/ast.html#abstract-grammar>

------
thomaslee
Here's my original paper on the topic in case folks are interested:

[http://tomlee.co/wp-content/uploads/2008/12/python-
language-...](http://tomlee.co/wp-content/uploads/2008/12/python-language-
internals.pdf)

------
drstrangevibes
How well do you know the Sutras?

Special cases aren't special enough to break the rules. ... There should be
one-- and preferably only one --obvious way to do it.

~~~
eliben
Did you even try to read the linked article :) ?

Here's the second section:

A language-advocacy digression

\------------------------------

This article doesn’t attempt to suggest the addition of an until statement to
Python. Although I think such a statement would make some code clearer, and
this article displays how easy it is to add, I completely respect Python’s
philosophy of minimalism. All I’m trying to do here, really, is gain some
insight into the inner workings of Python.

~~~
drstrangevibes
point taken

