The Perils of the Common Type System
by Glenn Vanderburg
Related link: http://zdnet.com.com/2100-1107-842922.html
In the referenced article, Matt Liotta sounds a note of
warning about the wisdom of Microsoft's Common Language Runtime (CLR) and (although Liotta doesn't mention it explicitly) the Common Type System (CTS). The CLR and the CTS represent the base platform on which .NET applications are written.
Bjarne Stroustrup, the designer of C++, once wrote that "Library design is language design." His point was that every programming API is a language, and serves to augment and extend the base language in which it is used.
A corollary is that libraries don't exist in isolation from languages. They tend to inherit models and philosophies from the programming languages they are designed for. The best-designed libraries mesh cleanly with their base languages, embracing the natural style and idioms, and exploiting the type systems, of those languages.
A library designed to be used by many languages is necessarily a kind of least-common-denominator. It is prohibited from exploiting language-specific features, because doing so would compromise its language-independence.
Does this mean that cross-language libraries are a bad idea? Of course not. But a cross-language library is always a compromise; we relinquish some of the power of our language in order to gain the power of interaction with other programs, written in other languages.
Look at some of the other languages that have been ported to the CLR. In every case, those languages have had to lose something important that made them different to fit the common dominator offered by the CLR.
That's absolutely true, and I'm glad to see people beginning to point this out. Programming languages have come a long way, but there are other advances waiting in the future. Our field has benefited from the ease with which we have been able to adopt new languages -- Perl, Java, Python, PHP, Ruby -- over the past decade. I fear that .NET, if it becomes as successful as Microsoft hopes, will present a huge barrier to the adoption of new and innovative programming languages -- and their libraries and type systems -- in the future.