6 ms·
Adding a new statement to Python
- motter 15y agoI 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-modification-of-python-with-python-the-ast-module/ http://blueprintforge.com/blog/2012/02/27/static-modificatio... [2] http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-what-would-you-do-with-an-ast-4898264 http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-wha... [3] http://docs.python.org/library/ast.html#abstract-grammar http://docs.python.org/library/ast.html#abstract-grammar
- perfunctory 15y agoVery 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.
- davidw 15y agoOr adding a new statement to Tcl: http://wiki.tcl.tk/917 http://wiki.tcl.tk/917
- gaius 15y agoOr BASIC ;-) http://en.wikipedia.org/wiki/DOS_Wedge 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.
- gaius 15y agoOr Forth. http://www.yosefk.com/blog/my-history-with-forth-stack-machines.html 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! )
- Kototama 15y agoHere, adding a 'unless' statement: (defmacro unless [expr & body] `(if ~expr nil (do ~@body))) Taken from: http://stackoverflow.com/questions/2977882/defining-clojure-macro-syntax 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.
- roryokane 15y agoAccording 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)))
- draegtun 15y agoOr Io: unless := method(call evalArgAt(0) ifFalse(call evalArgAt(1))) Usage example... unless(1 == 2, writeln("Tis false"))
- drstrangevibes 15y agoHow 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 15y agoDid 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 15y agopoint taken
- deleted 15y ago[deleted]
- ghc 15y agoI would have liked to see how easy it is to add a new statement to pypy for comparison's sake.
- kingkilr 15y agoIt'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.
- thomaslee 15y agoHere's my original paper on the topic in case folks are interested: http://tomlee.co/wp-content/uploads/2008/12/python-language-internals.pdf http://tomlee.co/wp-content/uploads/2008/12/python-language-...