[M3devel] "target specific pragmas"?
hendrik at topoi.pooq.com
hendrik at topoi.pooq.com
Thu Feb 14 19:59:47 CET 2008
On Wed, Feb 13, 2008 at 05:43:13PM -0800, Mika Nystrom wrote:
> Not even C++ has virtual methods in stack-allocated objects does
> it?
To my knowledge (as former C++ implementor), it does. But such a
stack-allocated variable is of statically-known actual type, so the
compiler can statically resolve all virtual methods to the actual
function implementing them. And it you pass the address of such an
object to another function, the other function will handle its virtual
methods by the usual virtual function lookup.
The only real problem is that it's a bloody disaster if you try to
free one of them as if it has been dynamically allocated. But that
wouldn't be a problem in a garbage-collected language.
> If there's a language that has a lot of arbitrary limitations
> in this area it's C++. It's kind of funny: if you know Modula-3,
> you start by wondering how C++ implements X, where X is a feature
> you would like but M3 lacks, and then you find that while C++ does
> indeed implement X', that is, X in a restricted sense, it does
> actually not implement X in the full generality you'd like. And
> for the same reasons that M3 doesn't touch it in the first place.
> Stack-allocated objects are an example of this. If you want
> stack-allocated data structures, use a RECORD and a PROCEDURE. That
> will give you almost exactly the same thing that a stack-allocated
> object gives you in C++!
Not quite -- you lose its ability to be considered an inheritor of
another class. That's a big loss.
> About C++: do you *really* know C++? I was reading Stroustrup's
> book a while back and after reading four or five times "if you want
> to try this, ask an experienced colleague first" I gave up in disgust
> on trying to understand C++.
As implementor, I suppose I might be considered an experienced
colleague.
> There are so many odd little ways you
> can go wrong in C++.
Yup. That's why I like to avoid using it.
> Sometimes assigning an object to a variable
> causes your program to break in mysterious and horrible ways,
> sometimes...
It should never have allowed those potentially type-violating
assignments.
> C++ programmers also tend to underestimate how effective
> garbage collection is in simplifying things. This is different
> from saying "garbage collection helps you avoid memory management
> errors" (because you say "I am a competent C++ programmer, I never
> make memory management errors"). Garbage collection lets you
> structure your code in ways that simply is not possible if you have
> to worry about which part of it is going to allocate and which part
> is going to deallocate memory.
There's code I wouldn't venture to write without built-in garbage
collection. C++ throws a sop at the programmer in the form of enabling
him to core reference-counting in an at least semi-automatic way, but it
isn't enough.
-- hendrik
More information about the M3devel
mailing list