C89, size_t, and long

F

Flash Gordon

Yevgen Muntyan wrote, On 16/03/07 18:49:
Flash said:
Yevgen Muntyan wrote, On 16/03/07 15:26:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 06:22: [snip]
Dear Mr Heathfield, I do understand that saying in public you're not
telling the truth is a bad offense. But when you're making totally
ridiculous statements to justify your rudeness, I simply can't resist.

The last few posts in this thread by Richard and Eric do not seem to
be making ridiculous statements to me, only your posts seem to be
doing that.

Um, Mr Richard didn't quote me calling him a liar, did he? It wasn't
about last few posts in this thread. Or do you mean Mr Heathfield is
liar? Then, I didn't mean Eric words. I said "Mr Heathfield". What I
said to Mr Richard has nothing to do with what I said to Eric Sosman.

I've never noticed either Richard Heathfield or Eric lying. I've seen
them make mistakes, and I've certainly disagreed with Richard in the
past (I don't keep score, but he has probably been right more often
than me). However the way you have been attacking in this thread I can
certainly see how what you've said can be interpreted as implying they
are lying, in particular what you say above about Eric's comment.

Um, I am attacking, huh? Okay.

Saying something like,
| Perhaps. I do understand that you have to earn right to be an asshole,
| like Mr Heathfield has.

Certainly sounds like attacking to me.

Reviewing the thread, it looks like there are only a couple of instances
of such things, so it might in part be you catching me on the wrong day
or me finding you irritating for whatever reason.
Bullshit.

Suggesting that they are avoiding the standard headers because they
think some implementation has headers broken enough that they have to be
avoided does suggest they are incompetent. However, elsewhere you have
admitted that it is glibc and looking at the headers in some of them
they *do* include stdef.h and stdio.h, so that obviously is *not* the
reason.
 
K

Keith Thompson

CBFalconer said:
If your mythical user includes the "#define _GNU_SOURCE" line he is
a known C idiot, who is invading the implementors namespace and
ensuring that overall behaviour is undefined.

He's not necessarily an idiot. He is very likely just using the
documented mechanism to enable glibc-specific extensions to the
standard C library. The macro "_GNU_SOURCE" is specified in the glibc
documentation; since glibc is part of the implementation, using a name
in the implementor's namespace is exactly the right thing for glibc to
do.

Yes, the behavior is undefined by the standard. Exploiting undefined
behavior (by defining it) is a perfectly good way to implement
extensions.

Of course the user needs to know how to use it properly, and in
particular whether it should appear before or after any other #include
directives.
 
C

CBFalconer

Dave said:
I can make a stronger statement than that: I've started writing
code, decided I wanted to use a size_t, and therefore added (or
made a mental note to add) a "#include <stddef.h>"... But every
time, I've ended up (often as the next thing I do) adding a call
to a standard library function declared in a header that defines
size_t anyways. So I've never had a reason to #include <stddef.h>
by the time I let a compiler see the code.

The fact that size_t is defined in various headers is incidental.
The point is that the routines in <arbitrary.h> require size_t to
be defined, so that is done. Otherwise there would be awkward
dependencies between header files.
 
Y

Yevgen Muntyan

Flash said:
Yevgen Muntyan wrote, On 16/03/07 18:49:
Flash said:
Yevgen Muntyan wrote, On 16/03/07 15:26:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 06:22: [snip]
Dear Mr Heathfield, I do understand that saying in public you're not
telling the truth is a bad offense. But when you're making totally
ridiculous statements to justify your rudeness, I simply can't
resist.

The last few posts in this thread by Richard and Eric do not seem
to be making ridiculous statements to me, only your posts seem to
be doing that.

Um, Mr Richard didn't quote me calling him a liar, did he? It wasn't
about last few posts in this thread. Or do you mean Mr Heathfield is
liar? Then, I didn't mean Eric words. I said "Mr Heathfield". What I
said to Mr Richard has nothing to do with what I said to Eric Sosman.

I've never noticed either Richard Heathfield or Eric lying. I've seen
them make mistakes, and I've certainly disagreed with Richard in the
past (I don't keep score, but he has probably been right more often
than me). However the way you have been attacking in this thread I
can certainly see how what you've said can be interpreted as implying
they are lying, in particular what you say above about Eric's comment.

Um, I am attacking, huh? Okay.

Saying something like,
| Perhaps. I do understand that you have to earn right to be an asshole,
| like Mr Heathfield has.

Certainly sounds like attacking to me.

This indeed does. I didn't understand you mean "attacking Mr.
Heathfield". Well, he came accusing me of calling him a liar, and
did not present any evidence of that. Ask him when I called him a
liar. Maybe you'll understand why I feel this way about him. Or
perhaps not. Or perhaps you'll be presented an evidence of him being
an asshole.
Reviewing the thread, it looks like there are only a couple of instances
of such things, so it might in part be you catching me on the wrong day
or me finding you irritating for whatever reason.


Suggesting that they are avoiding the standard headers because they
think some implementation has headers broken enough that they have to be
avoided does suggest they are incompetent.

I did *not* say glib avoids using standard headers. It does not, in
fact. It does avoid string.h, but it doesn't avoid stddef.h. If you
think otherwise, please quote where I said glib uses unsigned long
instead of size_t because of headers thing.
Glib uses unsigned long there because of other reasons, which I
suspect are really "historic reasons". You and Eric easily jump
into "glib developers are incompetent". This is what I call bullshit,
or, politely, groundless, not honest and hostile.

Yevgen
 
F

Flash Gordon

Yevgen Muntyan wrote, On 16/03/07 16:12:
For what claim exactly? That there is such a library?
Yes.

> Are you calling me
a liar? And no, I don't want to bring names in this context, regardless
of how people take my claims. Especially if they don't take them
seriously regardless.

If you say something exists but you are not prepared to tell people your
references you cannot expect to be taken seriously.
> You know, if I am accused of asking standard to
bless using UB (read the thread if you like), then I can be said to fly
to Mars and whatnot. And then what?

I did not comment on that part of the argument because I did not want to
trace it back.
I think you have it not even backwards. I said that some people *may*
have good reasons. If you say that fact of you, Eric, me, and two
other people not knowing such a good reason implies non-existence of
such a reason, then I will disagree.
But in fact, I was trying to make up reasons "why people would not
want to have standard headers included in their own headers which
do not use features from standard headers". It's in fact even not
very relevant to the "evil library", because it has dedicated type
to serve same purpose as size_t, and long instead of size_t was
in fact a mistake, and then there is backwards compatibility, api
stability and all that.

The version of the library originally introducing long instead of size_t
is the "evil library" so you still have it.

Also library frequently break backwards compatibility in various ways on
major upgrades.
But you folks decided I am defending this particular thing, and
to justify that I accuse standard of causing all my problems. It
surely is easier to argue with.

The thing that got me was you appearing to be claiming that an
implementation with broken headers was a good reason to avoid including
them and therefore not having size_t available.
I am claiming this: my (and yours, and Eric's, and all the regulars
here) lack of knowledge about one particular obscure system does
*not* imply I (you, Eric, etc.) *know* something about it. If
I write code, I don't worry about those obscure systems. But I
admit a possibility of someone who does worry about obscure system
I never heard about. I do *not* claim existence of that system.
Not sure what I need to prove here.

The point of using the facilities provided by the standard headers is so
that you do not have to worry about obscure systems since the
implementer has done the worrying for you.
I doubt it. Read the sentence. "Every module that performs I/O includes


Same thing. I rarely use size_t in fact. I did though have modules
which perform I/O and do not use stdio.h.

So you are using things outside of standard C. Now what would be broken
if you included one of the standard headers?
This is a very wrong thing. There may be localized bugs which have
to be worked around. It's a source distribution world, you can't
say "Fnu compiler is broken, we shall not use it", you have to
work it around if it's not too hard. Seen gnulib?

Yes, I've seen it. It does not seem to mention support for broken
implementations, although it does provide stuff for pre-C89 implementations.
So you can all jump around and yell "those guys are incompetent morons
how cool we are"?

No, to make the point.
If your code is going to work on that implementation, yes.

Actually, when it was found that the Pentium (I think it was) had a bug
like this there was a major shout about it and MS release a new version
of their compiler (their C implementation was effectively broken by it)
that worked around the processor bug thus leading to a non-broken
implementation. So yes, all the writers of software (or enough) shouted
and screamed about the C implementation now being broken and waited for
it to be fixed instead of working around the problem themselves.
Totally funny.

I was not one to raise bug reports on the Pentium, but people *did* and
it got fixed but providers of implementations providing implementations
that worked despite the processor bug and Intel fixing the processor.

What I have done is told customers that given versions of libraries were
broken and that they had to upgrade. I've also told them that they have
to upgrade to newer version of complete OSs. My customers are orders of
magnitude larger than the company I work for.
Well, it's different world. You can't say "don't use glibc" or
"don't use FreeBSD C library" or "don't use operating system
you're using".

I can do it. I know because I HAVE done it. Let's see if I can remember
it...

We told customers they had to upgrade to SCO 5.0.5 because the Java
implementations available for earlier versions were not good enough...

We later told them that they had to upgrade from SCO to Linux because
SCO various libraries we wanted to use were not available on SCO...

We also told another that they would have to upgrade from AIX 4.3 to
either Linux or an up to date version of AIX due to library problems...

We have also told customers when they have reported problems and we have
seen that their systems were out of date to "patch up to the latest
version and test again, if there is still a problem we will look at it
then." So they had to update before we would even look to see if the
problem was in out software or the library!
"everyone else" is three people including you? Perhaps you are right,
I don't know. But I don't know enough to make such a conclusion.

Any such implementation would be basically unusable so it would not survive.
You are kidding, right? How about MS?

When building with Visual Studio in include their standard headers
without any problems. So what about MS? They are not an example of such
a broken system.
Oh, of course, you stopped generalizing and now you are talking about
size_t. Yes, I can't believe there is an implementation which doesn't
have size_t correctly defined in stddef.h. I somehow talked about
the general thing of people not wanting to use standard headers.
You can read it upthread.

I claim that there has been no implementation since 1995 claiming
conformance to any version of the C standard that has been broken for as
long as a month such that including the standard headers in conforming
mode would break correct code. I further claim that even in
non-conforming mode if you avoid anything that clashes with documented
extensions it would still not break.

I am *not* talking specifically about size_t, I am talking about
including *any* standard header.
I can't prove it, and I am not going to, since I simply don't know
if it's true. But I don't claim it's false just because I don't know
any example.

I do claim it is true because I have some limited understanding of
commercial and open-source realities. The reality is that no one can be
bothered to deal with severely broken systems unless they are being paid
a lot of money specifically to do it. So any implementation broken badly
enough that including standard headers is not safe will simply not be used.
You mean "mian" was relevant to anything?

Yes. If an implementation is so broken that including standard headers
is not safe then it is so broken that anything could be wrong including
the spelling of main.
Yes it can, why can't it? Execution starts in main(), everything
is fine.

If you cannot write your own main function and have that as the entry
point for your program then by *definition* it is not a conforming
hosted implementation.
With MS VC++ maybe. I can use other compilers which *might* use
hidden main(). Can you *prove* (you love proofs don't you) my
favorite compiler doesn't do what I say? (I have no idea what
it does really)

The proof is the definition of a hosted implementation given by the C
standard. It states that the entry point to the program that *you* write
is main, so if the entry point to your code is anything other than main
it does not meet that definition.
Again, I don't know how to use MS VC++.

That I can believe. A lot of people don't know how to use it properly as
a C compiler. My statement is still true.
You didn't get it either.

#include <foo-thelib.h>
#define _GNU_SOURCE
#include <string.h>

void bar (void)
{
strndup ("33", 1);
}

If foo.h includes string.h, then strndup() won't be declared.
Whose problem is this? User's. Why does it happen? Because
user is stupid, he should #define _GNU_SOURCE at the very
beginning. Is the library right? No.

Actually, I believe that if you do:
#define _GNU_SOURCE
#include <foo-thelib.h>
#include <string.h>

void bar (void)
{
strndup ("33", 1);
}

It will all work perfectly unless foo-thelib.h invades the
implementation name space, in which case foo-thelib.h is broken. The
implementation provided headers are perfectly OK.
It's not about the truth. It's about you not having right to tell others
people earth is round (it's not, you know).

Freedom of speech. I've got the right to tell you that. Equally you have
the right to tell me that I am wrong. However, that is not what is
important here. What is important is what is true and what isn't, if you
don't think that then I think a technical group is the wrong place for you.

That's how it seemed.
Still, I can't do either. I can't accept something has done a wrong
thing simply because I don't know the reason he did it.

Another good reason for providing what you believe are example. Then
people can explain why it was wrong or be convinced that there actually
is a good reason under some situation.
> If you can
it's your right. Of course, your opinion is backed up by opinions
of other three people in this newsgroup, of yeah, collective wisdom.

Just tell, why does gnulib exist, why does it have so many wrappers
for so many *standard* things? Because people working on it are
stupid?

It exists to aid porting GNU, part of which *is* an implementation.
There are specific reasons why it still supports pre-C89 implementations
(actually, it is only the library they support as pre-C89). An
implementation no having been upgraded to C89 is not broken as such,
just old (or, rather, ancient), but supporting it requires wrapping
various standard library functions and dealing with not having standard
headers, or them not having been upgraded to match the C89 standard.

So it is *not* an example of working around broken implementations, only
an example of comparability with ancient systems, and they are slowly
moving the goal posts forward.

It also wraps some functions to provide consistent behaviour where the
standard does not require it, for example wrapping malloc so that their
wrapped version when passed a size of 0 will try to allocate a byte and
so return a non-NULL value if possible.

The documentation for gnulib also talks about the fact that it *can*
freely include the standard headers that are available in the oldest
implementation that is supports, so it is definitely *not* an example of
dealing with not being able to include the headers because they are too
broken.
 
Y

Yevgen Muntyan

CBFalconer said:
Yevgen Muntyan wrote:
... snip ...

If your mythical user includes the "#define _GNU_SOURCE" line he is
a known C idiot,

Or he reads documentation of his implementation and wants to
use nice convenient strndup() function without having to
reimplement it? Use in *legal* *documented* ways. Try
man 3 strndup if you have access to a linux machine.
Sure, great brave C.Falconer will just implement string functions
he likes to implement so much and just call idiots everybody
who doesn't do so. Or what? See, I just noticed you called
me an idiot (no, I didn't use strndup, I used this stupid
#define when needed to get lstat() declared in strict ansi mode,
which is buggy in gcc+glibc). Should I get insulted and run away
crying? Chuck said! Sure!

Yevgen
 
K

Keith Thompson

Flash Gordon said:
Suggesting that they are avoiding the standard headers because they
think some implementation has headers broken enough that they have to
be avoided does suggest they are incompetent. However, elsewhere you
have admitted that it is glibc and looking at the headers in some of
them they *do* include stdef.h and stdio.h, so that obviously is *not*
the reason.

<OT>
I think he said he's talking about glib, not glibc. glib and glibc
are two different things. glibc is the GNU implementation of the
standard C library. glib is "the low-level core library that forms
the basis of GTK+ and GNOME".
</OT>
 
Y

Yevgen Muntyan

Flash said:
Yevgen Muntyan wrote, On 16/03/07 16:12:

I did not comment on that part of the argument because I did not want to
trace it back.

Right... You commented on parts you liked, and you don't care about
the discussion in whole, where I say one thing and other hears what
he wants to hear. Just like here, you're saying I am claiming there
is a reason not to use standard headers. While I said like five times
that I do *not* know such a reason. Of course, from my unwillingness
to make baseless conclusions you make a conclusion that my opinion
is the contrary. And so on.

.....
The thing that got me was you appearing to be claiming that an
implementation with broken headers was a good reason to avoid including
them and therefore not having size_t available.

It was a hypothetical good reason for not using standard headers
in general, which naturally leads to avoiding #includ'ing stddef.h.
But yes, I do support the following: if an implementation has broken
header foobar.h and I write code for that platform, I will try to work
it around; and if not using foobar.h is a fix, I will avoid using
foobar.h. And *no*, I do not avoid using standard headers in *my*
code because of hypothetical problems.
The point of using the facilities provided by the standard headers is so
that you do not have to worry about obscure systems since the
implementer has done the worrying for you.

Indeed, that's why we should use standard headers. And? Was it
you agreed or disagreed with my words about making conclusion
without having enough ground?
So you are using things outside of standard C. Now what would be broken
if you included one of the standard headers?

If *I* did, nothing would break. You can prove there are no weird things
in stdio.h like that strndup on every system? You can prove silent
#includ'ing stdio.h will not break user code?
Yes, I've seen it. It does not seem to mention support for broken
implementations, although it does provide stuff for pre-C89
implementations.

Yes it does support broken C99 implementations. Now you can say
something about C90, that gnulib example is irrelevant since C90
is the important thing, perhaps because C90 is widely implemented
and so on. And we're back to Win64. Oh, totally forgot, it also
supports some broken C90 implementations.

....
No, to make the point.

Sorry, I misread what you said. What did you ask? What library and what
header? I know an implementation which breaks correct code, and it was
the original thing. I know a library which conforms to C90 and works
on all computers out there (even with C99 since no sane implementation
has small long) but Win64.
Actually, when it was found that the Pentium (I think it was) had a bug
like this there was a major shout about it and MS release a new version
of their compiler (their C implementation was effectively broken by it)
that worked around the processor bug thus leading to a non-broken
implementation. So yes, all the writers of software (or enough) shouted
and screamed about the C implementation now being broken and waited for
it to be fixed instead of working around the problem themselves.

I'm afraid processor bug is a little different from software bugs.
Broken string functions on some platforms come to mind. Glib has
some stuff to work that around.
I was not one to raise bug reports on the Pentium, but people *did* and
it got fixed but providers of implementations providing implementations
that worked despite the processor bug and Intel fixing the processor.

What I have done is told customers that given versions of libraries were
broken and that they had to upgrade. I've also told them that they have
to upgrade to newer version of complete OSs. My customers are orders of
magnitude larger than the company I work for.

Good for you, what can I say? Not all people are so lucky, and not all
bugs are processor bugs which are so serious that addition breaks.
I can do it. I know because I HAVE done it. Let's see if I can remember
it...

We told customers they had to upgrade to SCO 5.0.5 because the Java
implementations available for earlier versions were not good enough...

We later told them that they had to upgrade from SCO to Linux because
SCO various libraries we wanted to use were not available on SCO...

We also told another that they would have to upgrade from AIX 4.3 to
either Linux or an up to date version of AIX due to library problems...

We have also told customers when they have reported problems and we have
seen that their systems were out of date to "patch up to the latest
version and test again, if there is still a problem we will look at it
then." So they had to update before we would even look to see if the
problem was in out software or the library!

Again, great for you. Really great and I am glad you can workaround
problems by making them not exist in the first place. If you're saying
it's always possible and easy, you're wrong.
Any such implementation would be basically unusable so it would not
survive.

Such as what exactly? Are you saying implementation with a bug
in a standard header can't survive? I doubt it. Depends on the
bug, doesn't it? Or maybe you're saying there are no implementations
with buggy headers?
When building with Visual Studio in include their standard headers
without any problems. So what about MS? They are not an example of such
a broken system.

Um, Win64? Will it be boycotted for making small long type? Or does
it depend on the bug severity?
I claim that there has been no implementation since 1995 claiming
conformance to any version of the C standard that has been broken for as
long as a month such that including the standard headers in conforming
mode would break correct code. I further claim that even in
non-conforming mode if you avoid anything that clashes with documented
extensions it would still not break.

_GNU_SOURCE thing? No clashes. Or do you mean standard C code? Who
said there are problems with that? See, library (not the C library)
developers may care about non-standard user code.

....
I do claim it is true because I have some limited understanding of
commercial and open-source realities.

Especially open-source it seems.
The reality is that no one can be
bothered to deal with severely broken systems unless they are being paid
a lot of money specifically to do it. So any implementation broken badly
enough that including standard headers is not safe will simply not be used.

Perhaps. Or perhaps not. You seem to be talking about standard
programs which use only standard headers or at least use only
standard features from standard headers. You sure every implementation
has its implementation-specific extensions done in good nice
way so you can be sure #includ'ing a standard header behind
user back is safe if user uses those funny extensions?

....
Yes. If an implementation is so broken that including standard headers
is not safe then it is so broken that anything could be wrong including
the spelling of main.

See? Same thing. From "a header may break user code" you make conclusion
"a standard header may break standard code", though I didn't say that
and my example with _GNU_SOURCE isn't standard.
If you cannot write your own main function and have that as the entry
point for your program then by *definition* it is not a conforming
hosted implementation.

Who said I can't write my main() function? I can. Or I can ask
implementation to get me builtin translation unit with main()
which would call my FooBarMain().
The proof is the definition of a hosted implementation given by the C
standard. It states that the entry point to the program that *you* write
is main, so if the entry point to your code is anything other than main
it does not meet that definition.

And if entry point is indeed main()? Here, let me repeat:
That I can believe. A lot of people don't know how to use it properly as
a C compiler. My statement is still true.

I have no idea how to use it properly as a Foo or C++ compiler either.
Nice nit though. Your statement is probably true, I don't really
have doubts about it.

....
Actually, I believe that if you do:
#define _GNU_SOURCE
#include <foo-thelib.h>
#include <string.h>

void bar (void)
{
strndup ("33", 1);
}

It will all work perfectly unless foo-thelib.h invades the
implementation name space, in which case foo-thelib.h is broken. The
implementation provided headers are perfectly OK.

That's right, that's why I said "user is stupid". So, a third-party
library mandates that stupid things are user's problem. It's quite
sensible, and in fact it's an approach taken by many libraries (glib
too). Now, can you guarantee there are no totally-legitimate non-stupid
things like this _GNU_SOURCE thing which could break? Not necessarily
with standard C headers by the way. sys/stat.h is good too to make
developers wary of standard headers.

....
Freedom of speech. I've got the right to tell you that.

Yes, even though Earth is not round. Maybe "no problems with standard
headers" is just as correct as "Earth is round"? Works fine most of
the time, but not always.
Equally you have
the right to tell me that I am wrong. However, that is not what is
important here. What is important is what is true and what isn't, if you
don't think that then I think a technical group is the wrong place for you.

I think it's important not to make conclusions from absence of evidence
in technical groups. It's not a court. Exactly.
That's how it seemed.

Quote it. Please quote where I advocated using long instead of
size_t? I did try to make up some possible reasons for that,
and you simply said "no problems may exist with standard headers",
and I didn't agree with *this* claim. I advocated using long instead
of size_t?
Another good reason for providing what you believe are example. Then
people can explain why it was wrong or be convinced that there actually
is a good reason under some situation.

Interesting. Care to explain how I can provide an example of something
which I don't know whether it exists or not? I did say, like ten
times I *don't* know if there is a good reason. You can't get it,
can you? You seem to think either I say "yes" or "no", and "don't know"
qualifies as "yes". While your "don't know" implies "no". Oh well.
It exists to aid porting GNU, part of which *is* an implementation.
There are specific reasons why it still supports pre-C89 implementations
(actually, it is only the library they support as pre-C89). An
implementation no having been upgraded to C89 is not broken as such,
just old (or, rather, ancient), but supporting it requires wrapping
various standard library functions and dealing with not having standard
headers, or them not having been upgraded to match the C89 standard.

So it is *not* an example of working around broken implementations,

It is, if you think of C99 for a minute. stdbool.h and all that. But not
only that of course.
only
an example of comparability with ancient systems, and they are slowly
moving the goal posts forward.

It also wraps some functions to provide consistent behaviour where the
standard does not require it, for example wrapping malloc so that their
wrapped version when passed a size of 0 will try to allocate a byte and
so return a non-NULL value if possible.

Or fixes some broken string functions for the case when they are
broken in the implementation. You sure it does not work around any
bugs in implementations?
The documentation for gnulib also talks about the fact that it *can*
freely include the standard headers that are available in the oldest
implementation that is supports, so it is definitely *not* an example of
dealing with not being able to include the headers because they are too
broken.

Of course it's not, since gnulib is intended to be a complement to
any-C-library.
 
F

Flash Gordon

Yevgen Muntyan wrote, On 16/03/07 22:46:
Flash said:
Yevgen Muntyan wrote, On 16/03/07 18:49:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 15:26:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 06:22:
[snip]
Dear Mr Heathfield, I do understand that saying in public you're not
telling the truth is a bad offense. But when you're making totally
ridiculous statements to justify your rudeness, I simply can't
resist.

The last few posts in this thread by Richard and Eric do not seem
to be making ridiculous statements to me, only your posts seem to
be doing that.

Um, Mr Richard didn't quote me calling him a liar, did he? It wasn't
about last few posts in this thread. Or do you mean Mr Heathfield is
liar? Then, I didn't mean Eric words. I said "Mr Heathfield". What I
said to Mr Richard has nothing to do with what I said to Eric Sosman.

I've never noticed either Richard Heathfield or Eric lying. I've
seen them make mistakes, and I've certainly disagreed with Richard
in the past (I don't keep score, but he has probably been right more
often than me). However the way you have been attacking in this
thread I can certainly see how what you've said can be interpreted
as implying they are lying, in particular what you say above about
Eric's comment.

Um, I am attacking, huh? Okay.

Saying something like,
| Perhaps. I do understand that you have to earn right to be an asshole,
| like Mr Heathfield has.

Certainly sounds like attacking to me.

This indeed does. I didn't understand you mean "attacking Mr.
Heathfield". Well, he came accusing me of calling him a liar, and
did not present any evidence of that. Ask him when I called him a
liar. Maybe you'll understand why I feel this way about him. Or
perhaps not. Or perhaps you'll be presented an evidence of him being
an asshole.
Reviewing the thread, it looks like there are only a couple of
instances of such things, so it might in part be you catching me on
the wrong day or me finding you irritating for whatever reason.


Suggesting that they are avoiding the standard headers because they
think some implementation has headers broken enough that they have to
be avoided does suggest they are incompetent.

I did *not* say glib avoids using standard headers. It does not, in
fact. It does avoid string.h,

It does not. At least, not in the version installed on this machine.
markg@brenda:/usr/include/glib-2.0/gobject$ grep string.h *
gobjectnotifyqueue.c:#include said:
> but it doesn't avoid stddef.h. If you
think otherwise, please quote where I said glib uses unsigned long
instead of size_t because of headers thing.
Glib uses unsigned long there because of other reasons, which I
suspect are really "historic reasons". You and Eric easily jump
into "glib developers are incompetent". This is what I call bullshit,
or, politely, groundless, not honest and hostile.

You kept going on about knowing a library that did not use use size_t.
You also kept going on about how one reason for avoiding it could be to
avoid broken standard headers. If the two are unrelated then fine I
misread you.

However, there is still no reason to avoid the use of standard headers.

Some of the things in glib suggest trying to deal with pre-ANSI C, for
example defining NULL if it is not defined. Either that or it shows a
stupid (in my opinion) lack of trust in the standard libraries. The same
applies to the provision of an equivalent of the standard offsetof macro.

There is also invasion of the implementations name space with struct
_GSource etc.

So yes, there is certainly some grounds to say that the author(s) do not
know C properly.

Oh, and one comment I found particularly amusing. 'These are useful
because a "gint8" can be adjusted to be 1 byte (8 bits) on all
platforms.' Ignoring the terminology problem, if char is not 8 bits you
are stuffed in terms of finding an 8 bit type!
 
F

Flash Gordon

Keith Thompson wrote, On 16/03/07 23:33:
<OT>
I think he said he's talking about glib, not glibc. glib and glibc
are two different things. glibc is the GNU implementation of the
standard C library. glib is "the low-level core library that forms
the basis of GTK+ and GNOME".
</OT>

I know that, I intended to type glib, my saying glibc was a trypo. glib
*does* include stdef.h, stdio.h and string.h (maybe others) from within
its headers.
 
Y

Yevgen Muntyan

Flash said:
Yevgen Muntyan wrote, On 16/03/07 22:46:
Flash said:
Yevgen Muntyan wrote, On 16/03/07 18:49:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 15:26:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 06:22: [snip]
Hm, somehow I don't believe you're most offended by me calling you
a liar. For some reasons I think the worst thing is disagreement
with you even after you present all your killer
100%-correct-and-ignore-everything-else arguments. Did I just
call you a
liar again?
Sorry about that, I do understand I will be hurt by this more
than you.

Whether Richard and Eric feel offended or hurt does not change
whether it is an offensive thing to say.

So it's fine for Eric to insult other people by calling them
incompetent, but it was so bad from me to say an offensive thing?

The evidence you present suggests that they are incompetent.

Bullshit.

Suggesting that they are avoiding the standard headers because they
think some implementation has headers broken enough that they have to
be avoided does suggest they are incompetent.

I did *not* say glib avoids using standard headers. It does not, in
fact. It does avoid string.h,

It does not. At least, not in the version installed on this machine.
markg@brenda:/usr/include/glib-2.0/gobject$ grep string.h *
gobjectnotifyqueue.c:#include <string.h> /* memset */

Um, so you did not understand I was talking about standard headers
in *headers*? If you really thought I was talking about library
sources, I apologize, and I must admit all I said seemed like
hundred times more stupid than I thought it did. Of course I meant
headers. Why do you think I was talking about that _GNU_SOURCE thing?
Because some glib source file is using it? Just to be clear,

#include <glib.h>

won't make declaration of strlen() visible. But size_t will be
defined.
You kept going on about knowing a library that did not use use size_t.
You also kept going on about how one reason for avoiding it could be to
avoid broken standard headers. If the two are unrelated then fine I
misread you.

However, there is still no reason to avoid the use of standard headers.

Some of the things in glib suggest trying to deal with pre-ANSI C, for
example defining NULL if it is not defined. Either that or it shows a
stupid (in my opinion) lack of trust in the standard libraries. The same
applies to the provision of an equivalent of the standard offsetof macro.
There is also invasion of the implementations name space with struct
_GSource etc.

So yes, there is certainly some grounds to say that the author(s) do not
know C properly.

Yeah, sure. Especially the last thing, about underscore-prefixed
identifiers. "Some grounds", huh? Indeed, some grounds. Now can
you say it in plain text, "glib developers are incompetent"?
Mumbling "some ground" surely helps not to lose face and still
make yourself right. Please make the claim you seem to be defending.
Oh, and one comment I found particularly amusing. 'These are useful
because a "gint8" can be adjusted to be 1 byte (8 bits) on all
platforms.' Ignoring the terminology problem, if char is not 8 bits you
are stuffed in terms of finding an 8 bit type!

You surely know that char is not signed char, I have no doubts about
that. You think these folks use "gint" because they think int may not
be available? However bad wording is (can't talk about it, it's not
my language), it means that gint8 plays the role of int8_t, but
in human-understandable language and without mentioning platforms
where char is not 8 bit (and the library won't work).

Yevgen
 
Y

Yevgen Muntyan

Flash said:
Keith Thompson wrote, On 16/03/07 23:33:

I know that, I intended to type glib, my saying glibc was a trypo. glib
*does* include stdef.h, stdio.h and string.h (maybe others) from within
its headers.

Could you provide an example of string.h and stdio.h?

Yevgen
 
K

Keith Thompson

Yevgen Muntyan said:
Of course it's not, since gnulib is intended to be a complement to
any-C-library.

Gnulib? I thought you were talking about glib. Or are you talking
about both?

Just to make sure everyone is clear on this (and not necessarily to
imply that anyone isn't), "gnulib", "glib", and "glibc" are three
different things.

Gnulib is the GNU portability library,
<http://www.gnu.org/software/gnulib/>.

glib is "the low-level core library that forms the basis of GTK+ and
GNOME", <http://www.gtk.org/>.

glibc is the GNU implementation of the standard C library,
<http://www.gnu.org/software/libc/>.
 
Y

Yevgen Muntyan

Keith said:
Gnulib? I thought you were talking about glib. Or are you talking
about both?

Both. glib is the evil library, gnulib is an example of how people work
around C implementation bugs.
Just to make sure everyone is clear on this (and not necessarily to
imply that anyone isn't), "gnulib", "glib", and "glibc" are three
different things.

Gnulib is the GNU portability library,
<http://www.gnu.org/software/gnulib/>.

glib is "the low-level core library that forms the basis of GTK+ and
GNOME", <http://www.gtk.org/>.

glibc is the GNU implementation of the standard C library,
<http://www.gnu.org/software/libc/>.

Yes.
 
Y

Yevgen Muntyan

CBFalconer said:
Yevgen said:
Flash said:
Yevgen Muntyan wrote, On 16/03/07 22:46:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 18:49:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 15:26:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 06:22:
[snip]

This thread has received a well-deserved PLONK here.

I'm glad there will be less valuable comments by Chuck
about who's idiot and who isn't.
 
R

Richard Heathfield

Yevgen Muntyan said:

I didn't understand you mean "attacking Mr.
Heathfield". Well, he came accusing me of calling him a liar, and
did not present any evidence of that. Ask him when I called him a
liar.

"[...] you're either lying or you do as you usually do - posts where
every letter is correct but post as whole doesn't carry any useful
information." - Yevgen Muntyan.

Both charges are false, of course, but insofar as Mr Muntyan considers
either of them to be true, I currently see no value in providing
further responses to any of his questions about C.
 
Y

Yevgen Muntyan

Richard said:
Yevgen Muntyan said:

I didn't understand you mean "attacking Mr.
Heathfield". Well, he came accusing me of calling him a liar, and
did not present any evidence of that. Ask him when I called him a
liar.

"[...] you're either lying or you do as you usually do - posts where
every letter is correct but post as whole doesn't carry any useful
information." - Yevgen Muntyan.

Surely without context. Of course, you don't want to bring that in.
It's better just to complain about me calling you a liar. Oh
this terrible word "lie"! Mr. Heathfield is totally fine with insulting
others two times a day (twenty in good days), but now someone
has some doubts about Holy Reasons for insulting people or
posting to post a post with "Try to find a mistake here you can't".
Both charges are false, of course, but insofar as Mr Muntyan considers
either of them to be true,

You said I called you a liar. So, I believe you took both or the first
one as true. Well, to make it clear, in that context, if I recall
correctly, you lied to my best understanding. The second "charge"
was an exaggeration, you don't usually post those things. They are
just about half of your posts.
I currently see no value in providing
further responses to any of his questions about C.

You already said you are not going to reply at all.
It's sad to lose such a nice source of information as this newsgroup,
but perhaps it's better if I don't read pearls by nice fluffy Richard.
 
G

Guest

CBFalconer said:
The fact that size_t is defined in various headers is incidental.
The point is that the routines in <arbitrary.h> require size_t to
be defined, so that is done. Otherwise there would be awkward
dependencies between header files.

Not really. The standard library functions can declare malloc's
parameter, strlen's result, etc. as whatever type size_t is a typedef
for, or if that type differs for multiple configurations of the same
implementation, it can use a __size_t type.
 
F

Flash Gordon

Yevgen Muntyan wrote, On 17/03/07 01:20:
Flash said:
Yevgen Muntyan wrote, On 16/03/07 22:46:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 18:49:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 15:26:
Flash Gordon wrote:
Yevgen Muntyan wrote, On 16/03/07 06:22: [snip]
Hm, somehow I don't believe you're most offended by me calling you
a liar. For some reasons I think the worst thing is disagreement
with you even after you present all your killer
100%-correct-and-ignore-everything-else arguments. Did I just
call you a
liar again?
Sorry about that, I do understand I will be hurt by this more
than you.

Whether Richard and Eric feel offended or hurt does not change
whether it is an offensive thing to say.

So it's fine for Eric to insult other people by calling them
incompetent, but it was so bad from me to say an offensive thing?

The evidence you present suggests that they are incompetent.

Bullshit.

Suggesting that they are avoiding the standard headers because they
think some implementation has headers broken enough that they have
to be avoided does suggest they are incompetent.

I did *not* say glib avoids using standard headers. It does not, in
fact. It does avoid string.h,

It does not. At least, not in the version installed on this machine.
markg@brenda:/usr/include/glib-2.0/gobject$ grep string.h *
gobjectnotifyqueue.c:#include <string.h> /* memset */

Um, so you did not understand I was talking about standard headers
in *headers*?

It's not my fault if they put a .c file in the includes directory which
is specifically for include files hence the name include. Since they
include header guards (again in a way that invades the implementation
name space) there is a strong suggestion that they expect people to
include it. As does the fact that it is only providing static functions,
typedefs, and struct definitions. Therefore I believe it *is* a header
file, it just does not have the conventional name.
> If you really thought I was talking about library
sources, I apologize, and I must admit all I said seemed like
hundred times more stupid than I thought it did. Of course I meant
headers. Why do you think I was talking about that _GNU_SOURCE thing?
Because some glib source file is using it? Just to be clear,

#include <glib.h>

won't make declaration of strlen() visible. But size_t will be
defined.


Yeah, sure. Especially the last thing, about underscore-prefixed
identifiers. "Some grounds", huh? Indeed, some grounds. Now can
you say it in plain text, "glib developers are incompetent"?
Mumbling "some ground" surely helps not to lose face and still
make yourself right. Please make the claim you seem to be defending.

I require a lot more investigation or discussion with the developers to
state categorically that they are incompetent, but as I say the evidence
points to significant holes in their knowledge.
You surely know that char is not signed char,

Yes, I know that. However, no typedef will allow you to provide an 8 bit
type is one does not exist and if char is not 8 bits one does not exist.
If, as you suggest, there reason is due to variability in the signedness
of plain char then one would expect them to state this and possibly
actually use signed char, since otherwise using a common option on gcc
on linux platforms will stop the typedef doing what they want.

I.e. that comment is still highly amusing to me for the lack of
knowledge it shows.
> I have no doubts about
that. You think these folks use "gint" because they think int may not
be available?

No, they state a reason for that and it is a valid reason. Hence my not
saying it was a bad reason. Just because I criticise one thing does not
mean I am criticising everything.
> However bad wording is (can't talk about it, it's not
my language), it means that gint8 plays the role of int8_t, but

If so then it is a broken definition for Linux systems using gcc which
is one of the primary targets.
in human-understandable language and without mentioning platforms
where char is not 8 bit (and the library won't work).

There is nothing wrong with the library not working on systems where
char is not 8 bit, but the reason given for gchar is just plain stupid
and the definition does not serve what *you* guess its purpose is.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,262
Messages
2,571,059
Members
48,769
Latest member
Clifft

Latest Threads

Top