[libdispatch-dev] linux + libdispatch + clang + blocks
David Leimbach
leimy2k at gmail.com
Tue Jun 8 11:54:17 PDT 2010
Well I guess we don't agree at all :-). Have a nice day.
On Tue, Jun 8, 2010 at 11:49 AM, Paolo Bonzini <bonzini at gnu.org> wrote:
> On 06/08/2010 07:27 PM, David Leimbach wrote:
>
>> This is not a strawman because it is not an argument. I'm telling you
>> that by definition, C99 says double underscore names are for the
>> implementation. It's also not arguable that unistd.h is not part of
>> C99's standard library by definition, and therefore had no business
>> using double underscored names to begin with.
>>
>
> Ok, it is not C99. It's POSIX. Come on. You're "drawing the line" in the
> most unreasonable place. Anyway.
>
>
> BTW, from your favorite libc's _ctype.h:
>>
>> static __inline int
>> __istype(__ct_rune_t c, unsigned long _f)
>> {
>> return (!!__maskrune(_c, _f));
>> }
>>
>> __istype looks like a nice candidate for a new compiler keyword...
>>
>> Unfortunately for your counter-example, ctype.h is part of C99, and
>> therefore a use of double underscored names is valid within that context
>> as far as I can tell.
>>
>
> No, it is _ctype.h with the underscore. Nowhere in that file I read that
> it is internal use only. Anyway, 4 seconds of grep and here is this from
> FreeBSD pthread.h:
>
> #define pthread_cleanup_push(cleanup_routine, cleanup_arg) \
> { \
> struct _pthread_cleanup_info __cleanup_info__; \
> __pthread_cleanup_push_imp(cleanup_routine, cleanup_arg, \
> &__cleanup_info__); \
> {
>
> #define pthread_cleanup_pop(execute)
> } \
> __pthread_cleanup_pop_imp(execute); \
> }
>
> Tada, __cleanup_info__. BTW pthread_cleanup_{push,pop} just _cannot_ be
> implemented without macros of this kind, so pthreads cannot be implemented
> without either following your interpretation of the C99 standard, or
> breaking the user's namespace.
>
>
> Claiming that Apple and the LLVM team is being a poor collaborator for
>> using __block is hard to maintain when that entire namespace was
>> allotted to them by the C99 standards committee.
>>
>
> I never said that. I said that the choice of __block without trailing
> underscores was poor. Nobody's perfect, GCC did the same for __thread, but
> guess what, there is a fixincludes for that:
>
> /*
> * __thread is now a keyword.
> */
> fix = {
> hackname = thread_keyword;
> files = "pthread.h";
> files = "bits/sigthread.h";
> select = "([* ])__thread([,)])";
> c_fix = format;
> c_fix_arg = "%1__thr%2";
>
> };
>
> > As you say below, it's a young implementation, and possibly easier to
> > change that unistd.h.
>
> No, it's set in stone now. I'm not suggesting changing it. I'm just
> suggesting that for the first time clang is showing the need for
> fixincludes.
>
>
> Maybe it could easily be __block__ going forward, but don't you think
>> that's going to change a lot of people's libdispatch related code just
>> to make things compatible with unistd.h from glibc?
>>
>
> I never proposed that.
>
>
> Isn't that worse
>> than fixing glibc's header to comply with C99?
>>
>
> No need to say that again. Repeating the same argument sounds like the
> preferred strategy of people writing to glibc bugzilla, just to see Drepper
> getting upset. But we're not on glibc bugzilla, and I'm not Drepper.
>
>
> 2) past experience has suggested a workaround, namely "fixincludes".
>> Currently clang is being sloppy in this respect; it can afford that
>> because it only supports a few targets (basically Linux and Mac OS
>> X). It's a young project, so I don't have anything against that.
>> But sooner or later you will have to deal with the consequences of
>> not controlling the whole C99/POSIX environment.
>>
>> fixincludes was to deal with non-ANSI headers right? How is that going
>> to help with the __block keyword?
>>
>
> Nowadays fixincludes nowadays deals with all sort of problems. It is even
> fixing old glibc to cope with removed extensions, or backwards-incompatible
> changes in the compiler (in addition to the above example with __thread, I
> can count two cases: C99 inline semantics, and removal of lvalue casts). It
> can run arbitrary substitutions and sed scripts. Here is another example:
>
> /*
> * Incorrect sprintf declaration in X11/Xmu.h
> */
> fix = {
> hackname = x11_sprintf;
> files = X11/Xmu.h;
> files = X11/Xmu/Xmu.h;
> select = "^extern char \\*\tsprintf\\(\\);$";
>
> c_fix = format;
> c_fix_arg = "#ifndef __STDC__\n%0\n#endif /* !defined __STDC__ */";
>
> test_text = "extern char *\tsprintf();";
> };
>
> Paolo
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/libdispatch-dev/attachments/20100608/de4f01cb/attachment.html>
More information about the libdispatch-dev
mailing list