Tail Recursion is a Brain Hack Not a Compiler Hack

A few months ago this last-in-a-thread-of-posts generated a lot of buzz. In it, the creator of the Python programming language shared his views about how tail-recursion does not belong in Python. The only problem with the post(s) was that he, admittedly, did not understand tail-recursion. This course of events, the blog posts, comments, and aftermath, were interesting in what they revealed:

  1. How one person can affect how so many think
  2. How tail-recursion is so misunderstood within the developer community

The first, of course, is the prerogative of any BDFL. It is sort of fascinating how the edict that he set forth is enough to convince thousands and thousands of Pythonistas that tail-recursion is flawed and unnecessary (that is power!). That is sad, but, it is a privilege of the role. The interesting part is the impact of never understanding tail-recursion (#2): it removes an entire style of abstraction from the developers toolbox.
Here are 3 works that explain that style:

  1. LAMBDA: The Ultimate Imperative
  2. LAMBDA: The Ultimate GOTO
  3. Automata via Macros

I haven’t found any other resources than those and Jon’s post here (see the last section) that touch upon the style. Do you know of any others?

Serious Statistics Programs Pay for the Fun Ones

Here is an article that explains how one of the four co-founders of SAS, a statistician, has an awesome job where the serious product (SAS) pays for him to develop the fun product (JMP).
Note: That is an understatement, as it probably would pay for him to stare at the ocean for the rest of his life if he wanted. It is still a good point, though: sell serious stuff to pay for the fun (for you) stuff.

bzlib/dbi – an extensible database interface for PLT

bzlib/dbi has just been made available via planet – inspired by Perl DBI, it is an extensible database interface, currently with the following drivers implemented:
bzlib/dbd-spgsql – wraps around schematics/spgsql
bzlib/dbd-jsqlite – wraps around jaymccarthy/sqlite
bzlib/dbd-jazmysql – wraps around jaz/mysql
bzlib/dbi/app – a kill-safe wrapper over raw database handles
bzlib/dbi/pool – a database connection pool wrapper
So if you need to switch within the three databases you now can do so more easily, and you get database connection pools and kill-safe wrappers for free.
You can find more details at http://weblambda.blogspot.com/2009/09/extensible-abstract-database-interace.html – which explains more in details about the interface.

(via PLT)