Date: Sun, 7 Sep 2014 11:16:10 -0400 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: [PATCH 1/9] interface additions for the C thread implementation On Sun, Sep 07, 2014 at 04:45:01PM +0200, Jens Gustedt wrote: > Am Sonntag, den 07.09.2014, 07:32 -0400 schrieb Rich Felker: > > On Sun, Sep 07, 2014 at 01:16:43PM +0200, Jens Gustedt wrote: > > > Am Sonntag, den 07.09.2014, 14:05 +0400 schrieb Alexander Monakov: > > > > On Sun, 7 Sep 2014, Jens Gustedt wrote: > > > > > > > For the C++ API/ABI, these also are different types, now, with type names > > > > > > > (that are used for name mangling, e.g) as listed above. > > > > > > > > > > > > > > Somebody better versed in C++ could perhaps contribute code that > > > > > > > overloads the comparison and assignment operators such that a compilation > > > > > > > that tries to compare or copy these types fails. > > > > > > > > > > > > I'm not sure what you meant by this last paragraph. > > > > > > > > > > AFAIR in C++ there are ways to inhibit usage of copy assignment by > > > > > declaring some "operator=" function that is never defined. But my C++ > > > > > has really become rusty. > > > > > > > > There's no need to do that since those are unrelated structs, and therefore no > > > > operator== and operator= are available in the first place. You also can't do > > > > that in C (but in C++ you get an error rather than a warning when trying > > > > to assign pointers). > > > > > > This is not about assignment between different types and also not for > > > pointers but for the struct themselves. > > > > > > With the current C threads version the following is a priori allowed, > > > but shouldn't: > > > > > > mtx_t a, b; > > > mtx_init(&a, mtx_plain); > > > b = a; > > > > > > This "works" in C and in C++. > > > > > > The corresponding code in pthreads would be UB. > > > > I'm not clear on whether the assignment is well-defined in pthreads, > > but actually attempting to use the mutex (by passing it to any of the > > pthread_mutex_* functions) would be UB. The same should be true for > > C11 threads; if not, it's a defect. > > It is. It is a defect? Or..? > sure, we all (should) know that, but the average user wouldn't > > > I don't think the committee intended to forbid any of the above types > > of implementation; on the contrary it seems they went out of their way > > to support crazy types of implementations, e.g. by omitting > > initializers. > > No, unfortunately for the later, the lack of a definition for default > initialization and initializers seems to be intentional. There are > people on the committee who defend the interdiction of statically > initialized mutexes, seemingly because some oldish windows thread > implementation didn't have it. That's what I mean. By refusing to support static initialization of mutexes, they seem to be supporting the possibility of implementations for which static initialization is impractical, much like some of the crazy ideas I mentioned above. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.