Re: Threading in new C++ standard
Szabolcs Ferenczi wrote:
On Apr 26, 9:48 am, "Bo Persson" <b...@gmb.dk> wrote:
Szabolcs Ferenczi wrote:
On Apr 25, 11:57 am, James Kanze <james.ka...@gmail.com> wrote:
...
No. Several people have pointed out several times where the
language addresses concurrency issues.
Oh yes, you are one of them who continously keep saying that C++0x
adresses concurrency issues at the language level but who fail to
put here just a single language element for it.
That's the beauty of C++. :-)
Really? I only hope not only that's the beauty of C++.
Seriously, the library is part of the language specification.
"Parallel programs are particularly prone to time-dependent errors,
which
either cannot be detected by program testing nor by run-time checks.
It is therefore very important that a high-level language designed
for this purpose should provide complete security against
time-dependent errors by means of a compile-time check."
C. A. R. Hoare, Towards a Theory of Parallel Programming (1971)
You cannot provide this kind of compiler support with any library-
based approach. This is one of the failure in Boehm's paper that he
completely ignored this issue and now the ignorant trendy fans take
his paper as a Bible.
It isn't a library based support, it is a library interface that
requires compiler support for the implementation. The standard
document describes the interface to the features, not the
implemenation.
Is that you problem?
An
implementation has to supply both a compiler (or an interpreter)
and a complete library implementation. It also has to assure that
it works according to spec.
An implementation is not identical with the language. Implementation
and language are two different although related issues. The
implementation may provide libraries though they never belong to the
language itself, even if many people erroneously think so.
The standard requires an implementation to supply some libraries.
These certainly belongs to the language.
Let's quote paragraph 1 of the standard document:
"This International Standard specifies requirements for
implementations of the C++ programming language. The first such
requirement is that they implement the language, and so this
International Standard also defined C++."
Is it a flaw that the standard doesn't explain exactly how this is
to be done?
Not only that. What is claimed about C++0x does not match with what
is provided. Language level multi-threading is claimed but library
level multi-threading is provided. It would be more honest to claim
the truth that C++0x provides no more than what is available now in
the average library-based approaches.
It is defined as a set of interfaces, library style. It certainly will
need some compiler support, just like the type_info class of the
library does.
You have noticed, haven't you, that
#include <mutex>
will let you use mutexes in C++0x, but it doesn't <mutex> to be a
file, it could be built into the compiler (in whole, or in part).
Generally, the C++ library defined an interface for the features, not
the implementation. The features, like std::vector, are allowed, but
not required, to be implemented as a library. The same goes for the
new threading primitives - they are allowed, but not required, to be
implemented in the compiler or in the library, or as a combination.
Someone mentioned that it is a committee who decides on it: So, if
the committee claims they are working on a beautiful super horse but
external observers can see an average camel coming out, well, that
is discordant. However, if the committee says they are designing a
camel, well, that is fair and honest.
The committee tries to define the common interface to a, possibly four
legged, animal that can carry your goods. It doesn't prescribe the
number of humps the animal must have. Perhaps even a small mule will
work, for embedded systems?
Bo Persson