The CPAN (Comprehensive Perl Archive Network) is the backbone of the Perl community. It includes hundreds of modules that
extend Perl in every imaginable direction: networking, directory services, XML processing, statistics, you name it. Before
writing a substantial piece of new code, a seasoned Perl programmer will check CPAN to see whether an existing module can
meet the need. The same holds true for users of PHP, Python, Ruby, and other dynamic languages.
As these language communities have evolved in parallel, each has accumulated its own library of supporting modules. Sometimes
a module exists in order to provide an easy-to-use interface to a low-level system service -- network sockets, for example.
In that case, all the languages talk to a common piece of the operating system's C or C++ code, but each language has to create
its own bindings to that code. Alternatively, a module may directly implement a higher-level service such as the HTTP protocol.
Here too, though, each dynamic language has to create its own version of the module.
As you can imagine, this process entails a lot of duplicate effort. Perl needs XML, LDAP, database, and other modules. Versions
of the same modules are also needed for Python, PHP, Ruby, and so on. The ongoing reinvention of all these wheels always struck
me as wasteful. Energy spent wrapping existing services is energy diverted from writing applications and creating new language-independent
services.
Despite this inefficiency, things have worked well enough so far. Each of the dynamic languages I've mentioned occupies an
important niche in the IT ecosystem. Each language appeals to a particular audience of developers and makes those developers
highly productive when solving a variety of problems.
Two factors largely account for that productivity. The first is cultural. All of these languages evolved on the Internet and
are shepherded by pragmatic open source developers who know how to collaborate to get things done. The second factor is technical.
At the core of each of these languages there is a VM that manages memory automatically, just as the JVM does for Java programmers
and the CLR (Common Language Runtime) does for .Net programmers. Managed code isn't a panacea, but it's the dominant reason
why programming is getting easier and safer.
Core operating-system services aren't yet built with managed code, to be sure, and they probably won't be for a few years.
Yet we already rely on managed interfaces to those services. Some developers acquire those interfaces by way of dynamic languages,
others get them courtesy of Java and .Net. These two camps have historically regarded one another with suspicion, but the
inexorable logic of managed code creates a common bond.
As operating systems consolidate around managed interfaces, they'll choose the Java and .Net VMs, not the Perl, Python, or
PHP VMs. But the agility of the dynamic languages and the collaborative energy of their open source communities are two of
the pistons that crank the engine of progress. These worlds need to converge -- and at the O'Reilly Open Source Conference
there was new evidence that they will. Jim Hugunin, father of Jython (Python for JVM), made a pair of dramatic announcements.
He has released the first version of IronPython (Python for CLR/Mono). And by the time you read this, he'll have started his
new job at Microsoft. Good hire!