Hacker News new | past | comments | ask | show | jobs | submit login
Adding a new statement to Python (thegreenplace.net)
100 points by motter on March 12, 2012 | hide | past | favorite | 14 comments



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


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.


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.


Or Forth.

http://www.yosefk.com/blog/my-history-with-forth-stack-machi...

my mind was immediately blown away by the following passage right at the top of system.fth, the part of pForth implemented in Forth on top of the C interpreter:

    : (   41 word drop ; immediate
    ( That was the definition for the comment word. )
    ( Now we can add comments to what we are doing! )


Here, adding a 'unless' statement:

    (defmacro unless [expr & body] `(if ~expr nil (do ~@body)))
Taken from: http://stackoverflow.com/questions/2977882/defining-clojure-...

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.


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)))


Or adding a new statement to Tcl:

http://wiki.tcl.tk/917


Or BASIC ;-) http://en.wikipedia.org/wiki/DOS_Wedge

On a more serious note, the ability to add constructs to the language is not nearly as unique to LISP as Lispers think it is.


Or Io:

  unless := method(call evalArgAt(0) ifFalse(call evalArgAt(1)))
Usage example...

  unless(1 == 2, writeln("Tis false"))


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...

[2] http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-wha...

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


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

http://tomlee.co/wp-content/uploads/2008/12/python-language-...


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.


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.


point taken




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: