This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++ "with" keyword


On Sat, 04 Jan 2003 10:12:11 -0800 Gianni Mariani <gmariani@chaincast.com> wrote:

> Tolga Dalman wrote:
> 
> >On Sat, 04 Jan 2003 09:31:50 -0800 Gianni Mariani <gmariani@chaincast.com> wrote
> >  
> >
> >>
> >>So, I'd like to steer the discussion back to the merits of "with".
> >>
> >>The "with" syntax was a pain in the rear in Pascal and I never want to 
> >>see it again - this is why:
> >>
> >>Take 2 structures, A and B which are both used in a "with" statement.
> >>
> >>e.g. (I'll use the proposed new "with" syntax in c++ below)
> >>
> >>Let's start with some valid working code ...
> >>
> >>struct A {
> >>    int    X;
> >>    int    Y;
> >>    int    hUgH;
> >>};
> >>
> >>struct B {
> >>    int    Z;
> >>};
> >>
> >>int func()
> >>{
> >>        ....
> >>        A & a;
> >>        B & b;
> >>        ....
> >>
> >>        with ( a )
> >>        witb ( b )
> >>        {
> >>
> >>            Y = Z;
> >>            hUgH = X; //  woz this then eh ? <-- point of confusion
> >>        }
> >>        ...
> >>}
> >>
> >>And a little later someone comes and fixes a bug and adds
> >>
> >>struct B {
> >>    int    Z;
> >>    int    X;    // need an X to fix The Bug (tm)
> >>};
> >>
> >>Oops - which X is now instantiated at "point of confusion" ?
> >>
> >>Someone innocently added a new member and completly changed the 
> >>behaviour of the code.  For code maintainability, I'd suggest that this 
> >>would cause more difficult to discover problems than would be merited.
> >>
> >>    
> >>
> >
> >it should be possible to disallow a "with" keyword within another "with" block.
> >  
> >
> It becomes MUCH less useful if you do this and hence I'll argue that it 
> makes little sense to have a "with" at all.
> In almost every case where I used the "with" keyword in my distant past, 
> I remember that I was dealing with at least 2 structures and messing 
> with them together.

i understand. "with" is comparable to the switch-case construct. there, you aren't allowed to uses cascaded switch'es. i'm happy to have it anyways, 
and i believe a with would be aswell useful. 

additionally, i don't think there's a (efficient, at least) way to solve the 
ambiguity problem for multiple withs. 

> 
> >>This is also one of the reasons I don't like namespaces much either - 
> >>hence I allways prefix identifiers that are not within a class's scope.
> >>
> >>    
> >>
> >
> >hm, i know a lot of people who don't like namespaces aswell, but the point is: 
> >it'd be great to have a compiler-feature to make code more readable. 
> >i think, long struct-names are very annoying and a common  solution 
> >(either standard or compiler-addon) for this problem would be very good.
> >just my opinion. 
> >  
> >
> 
> But there is, as has been explained :)
> 
>             {
>                 A & y = long_descriptive_expression_I_dont_like_repeating;
>                 B & z = long_descriptive_expression_I_dont_like_repeating;
> 
>                 z.memberA = z.memberB;
>                 z.memberB = y.memberA;
>             }
> 
> ... Totally unambiguous, very readable, no new syntax - QED.
> 

... and potentially two new variables in your code and binary.
what i wanted to have:

 
             {
               #define y long_descriptive_expression_I_dont_like_repeating;
               #define z long_descriptive_expression_I_dont_like_repeating;
 
                 z.memberA = z.memberB;
                 z.memberB = y.memberA;
               #undef z
               #undef y
             }
 
but this is just ugly. 
no offense, but you state you wouldn't like namespaces, on the other hand 
you propagate using new variables within a new block to be less confusing?


> >  
> >
> >>If you were to implement (heaven forbid) the "with" mechanism, I'd 
> >>suggest you use the "using" keyword instead.
> >>
> >>    
> >>
> >
> >the actual name doesn't matter i think, but "with" is already used in other programming languages. so, why to use "using"?
> >
> sematically similar meaning of the keyword - it's just a suggestion.
> 

one reason against the with keyword would be that there's one more word in our
C vocabulary. a (programming-)language with too many words is rather unattractive, i'd say.

Tolga Dalman.




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]