The contrast between the Java and Ruby communities approach to external
libraries is interesting.
In Java, calling executables programs is hard (check out
the
amount of code it takes to process the input and output). Wrapping a C
library is also difficult. You've got to do lots of futzing with the
Java
Native Interface.
Then Sun came up with the 100% Pure Java marketing campaign to promote
writing applications without resorting to native code or calling external
programs. This ensured maximum portability for Java applications. There is
a lot of dissension and a number of
spectacular failures (like Netscape's "Javagator" browser) but being 100%
Pure Java is still highly regarded in the Java community, as a
quick search will show. Look at the number of open source projects that
come up, touting their 100% Pure Java status.
Between the difficulty of calling non-Java programs and the cultural bias
against doing it, there is not a lot of this going on. That means there
are things that either were re-implemented in Java, don't exist, or aren't
considered.
Meanwhile, in Ruby (and Perl and Python -- the "glue" languages)
the use of C extensions and calling off to external programs is
widespread. Sure, a "Pure Ruby" API may be preferred if it exists,
but it's not uncommon for performance bottlenecks to be
re-written in C, or for Ruby libraries to wrap C libraries with a
Ruby-esque interface.
This does have some problems. Not all C libraries are available
on all platforms. Some scripts and libraries only work on Linux
and other Unix-like operating systems. A solution that only works
on most platforms would be unacceptable to many Java programmers.
But it does get Ruby most of the way there, and it brings a huge
advantage: Ruby can use much of the existing C libraries (or even
Java, with GCJ).
Paul Graham spoke at RailsConf on
The
Power of the Marginal.
I must admit I was not particularly impressed.
One thing that particularly annoyed me was this, in a bit about the
"Great American Novel", written by committee:
As everyone knows, America plus tragedy equals the Civil War, so that's what it would have to be about. Better stick to the standard cartoon version that the Civil War was about slavery; people would be confused otherwise; plus you can show a lot of strength and diversity.
I am continually surprised that smart people fall for this
Confederate-sympathizer "Doomed Cause" claptrap. I think it's especially
popular with libertarian types, because it allows them to feel
counter-cultural and vaguely superior to all those dolts who believe the
"cartoon version" that the Civil War was about slavery.
Consider this analysis of the
differences between the US constitution and the Confederate constitution.
Nearly every substantive difference deals with cementing the institution
of slavery and an inalienable right.
Certainly, the causes of the Civil War were complicated. The opposition to
slavery in the North was for economic and political as well as moral
reasons. A series of increasingly strained compromises managed to hold the
Union together for a while. Understanding why those compromises failed
is important.
But to say that the Civil War wasn't about slavery is negligent in the
extreme, and in its more virulent forms, neo-Confederate or even racist.
Lending support to the false idea that the civil war wasn't about slavery
is foolish. Delivering it with such a sense of superiority is dangerous.
More Reading:
Blogcritics: Blogger denies slavery cause of Civil War
The Constitution of the
Confederate States of America
Wikipedia: Origins of the American Civil War