Sponsored Link •
Bill Venners: In addition to being a C# and CLR construct, the value type is a general object-oriented programming concept. Another such concept is immutable types.
When I went to the first JavaOne back in 1996, everyone seemed to have one complaint
about what they missed from C++ that Java didn't have. Different people had different
complaints, but they all seemed to have at least one complaint. My complaint was
const. I really liked
what I could do with
const in C++, though somehow I have gotten along in Java just fine
Did you consider including support for the concept of immutable directly in C# and the CLR?
Anders Hejlsberg: There are two questions in here. With respect to immutability, it's tricky because what you're saying when you say something is immutable, is that from an external perspective, I cannot observe any mutation. That doesn't necessarily mean that it doesn't have a cache inside that makes it go more efficiently. It's just on the outside it looks immutable. That's hard for a compiler to figure out. We could certainly have a rule that says you can only modify the fields of this object in the constructor. And we could make certain usability guarantees. But it actually rules out some scenarios that are in use. So we haven't codified immutability as a hard guarantee, because it's a hard guarantee to make. The concept of an immutable object is very useful, but it's just up to the author to say that it's immutable.
Bill Venners: Immutability is part of the semantics of the class.
Anders Hejlsberg: Yes. With respect to const, it's interesting, because we hear that complaint all the time too: "Why don't you have const?" Implicit in the question is, "Why don't you have const that is enforced by the runtime?" That's really what people are asking, although they don't come out and say it that way.
The reason that const works in C++ is because you can cast it away.
If you couldn't cast it away, then your world would suck. If you declare a method that
takes a const
Bla, you could pass it a non-const
Bla. But if it's
the other way around you can't. If you declare a method that takes a non-const
you can't pass it a const
Bla. So now you're stuck. So you gradually need a const version
of everything that isn't const, and you end up with a shadow world. In C++ you get away
with it, because as with anything in C++ it is purely optional whether you want this check
or not. You can just whack the constness away if you don't like it.
Come back Monday, February 10 for an interview with Eric Gunnerson, C# Compiler Program Manager. If you'd like to receive a brief weekly email announcing new articles at Artima.com, please subscribe to the Artima Newsletter.
Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg:
A Comparative Overview of C#:
Microsoft Visual C#:
Dan Fernandez's Weblog:
Eric Gunnerson's Weblog: