Becoming Lisp
Python really is becoming lisp. With the type/class unification, decorators, and generator expressions, it’s jumped from 80 percent of Common Lisp + CLOS to 90 percent1, and for web tasks the web programming libraries often make up the difference.
I’ve listed below some of the functional and metaprogramming recipes and packages that have shown up in PyPI and the Python Cookbook over the past few weeks. [As of Memorial Day weekend, when I first wrote this. I didn’t post it until a week later. My real job is heating up :-]
The point is not that these recipes exist. There’s plenty of clever Perl preprocessor hacks; there’s some pretty amazing C++ template metaprogramming libraries; and I bet if you scoured the web you could find this many recipes for Java reflection. (Well, I don’t bet very much on the Java part. I’ll buy you an ice cream at Bart’s. First taker only.)
The point is that these are flowing in fast and furious, and that they don’t take much code. The recipes below are from just two weeks. There’s half a dozen functional programming recipes, and a dozen MOP (Metaobject Programming) recipes; many of them are one-pagers. There were some real wizards in the Lisp community, but I don’t recall anything like this pace of development on top of the CLOS (Common Lisp Object System) MOP (Metaobject Protocol, this time).
Two weeks of MOP (Metaobject Programming) and reflection recipes:
Two weeks of functional programming recipes:
Web programming in August:
-
Webcleaner, a filtering HTTP proxy
-
rxrdf, an RDF application stack
-
milter, interface to sendmail milter API
-
itools, uri, resources, handlers, i18n, and workflow tools
-
libgmail, a binding for Google’s Gmail service
-
naja, a download manager and a website grabber
-
linkchecker, not sure what this does :-)
And hotswap finally adds object evolution (what “live edit”).
-
Percentage gains are subjective and are based on simulated exploratory programming conditions. Actual productivity will vary with hardware speed, workplace environment, development habits, and problem complexity. Results reported to SEI indicate that the majority of projects with these estimates will achieve between 71% and 123% of Lisp productivity in single-person projects and between 83% and 159% in team projects. ↩