Awesome! :)
This is the release that finally makes pure and nothrow usable! Also,
I'm very thrilled about the changes to the math stuff, in particular the
addition of std.mathspecial.
...for which the documentation seems to be missing, by the way.
-Lars

This is the release that finally makes pure and nothrow usable! Also,
I'm very thrilled about the changes to the math stuff, in particular the
addition of std.mathspecial.
...for which the documentation seems to be missing, by the way.

I see several little steps forward for D/DMD in this release :-)
For the next few releases I suggest to focus the efforts on the bug-fixing
efforts that may break future D2 code a little. It's _much_ better to break it
now that later.
Some comments:
- dmd2\windows\bin contains an almost empty .exe file.
- Issue 2751: wasn't it fixed in 2.027?
- Issue 3112: even associative array lookups and failed asserts... I didn't
know this.
- I have closed bug 5020. 4773 depends on it.
Regarding Issue 3554, this program, compiled with -w:
/// Return a random number in [0, 10)
void foo() {}
void main() {}
Prints:
test3.d(2): Warning: Ddoc: Stray ')'. This may cause incorrect Ddoc output. Use
$(RPAREN) instead for unpaired right parentheses.
But the generated HTML is correct. So is the warning necessary still?
Bye,
bearophile

Apologies for that. This is a major addition! Walter, I just updated the
changelog, would you mind updating the website? Thanks, and many thanks
to Steve who contributed the most complex container yet to std.container!
Andrei

Apologies for that. This is a major addition! Walter, I just updated the
changelog, would you mind updating the website? Thanks, and many thanks
to Steve who contributed the most complex container yet to std.container!

Apologies for that. This is a major addition! Walter, I just updated the
changelog, would you mind updating the website? Thanks, and many thanks
to Steve who contributed the most complex container yet to std.container!

I suggest to add a RedBlackTree example usage (a little program) in the docs.
Bye,
bearophile

Why are they calling it RedBlackTree? why not Set? C++ std::set is a
red-black tree as far as I know, but they named it set.
On Fri, Dec 24, 2010 at 1:25 AM, bearophile <bearophileHUGS lycos.com>wrote:

Andrei:

Apologies for that. This is a major addition! Walter, I just updated the
changelog, would you mind updating the website? Thanks, and many thanks
to Steve who contributed the most complex container yet to std.container!

I suggest to add a RedBlackTree example usage (a little program) in the
docs.
Bye,
bearophile

Why are they calling it RedBlackTree? why not Set? C++ std::set is a
red-black tree as far as I know, but they named it set.

std::set uses a red-black tree in most (all?) C++ standard library
implementations; so does std::map.
Neither "is a" red-black tree. They use red-black trees in their
implementations. They could very well be implemented as a simple binary
tree as well. The C++ standard spells out algorithmic complexities of
operations on standard containers, but not actual implementations.
Ali

On Fri, Dec 24, 2010 at 1:25 AM, bearophile

<bearophileHUGS lycos.com>wrote:

Andrei:

Apologies for that. This is a major addition! Walter, I just

updated the

changelog, would you mind updating the website? Thanks, and many thanks
to Steve who contributed the most complex container yet to

std.container!

I suggest to add a RedBlackTree example usage (a little program) in the
docs.
Bye,
bearophile

Why are they calling it RedBlackTree? why not Set? C++ std::set is a
red-black tree as far as I know, but they named it set.

Andrei decided that the containers in Phobos will named after what they
actually
are instead of what they're used for. A prime example of this is a red-black
tree. It can be used as a set. Depending on the implementation (I haven't look
at the Phobos one yet), it can also be used as a map (it's used for both set
and
map in C++'s STL). But a set could be implemented in many different ways. A red-
black tree is only one of them. It could be implemented with a hash instead.
But
that would give it very different performance characteristics.
Phobos is taking the approach that a container is labeled for the data
structure
that it is rather than what it's used for. That way it's very clear what it's
performance characteristics are. If you want to use the term Set in your code,
then simply alias RedBlackTree to Set.
- Jonathan M Davis

Why are they calling it RedBlackTree? why not Set? C++ std::set is a
red-black tree as far as I know, but they named it set.

Andrei decided that the containers in Phobos will named after what

they actually

are instead of what they're used for. A prime example of this is a

red-black

tree. It can be used as a set. Depending on the implementation (I

haven't look

at the Phobos one yet), it can also be used as a map (it's used for

both set and

map in C++'s STL). But a set could be implemented in many different

ways. A red-

black tree is only one of them. It could be implemented with a hash

instead. But

that would give it very different performance characteristics.

Yes, having different performance characteristics, hash table does not
satisfy the requirements of the standard though: std::set is an ordered
container.
Table 99 in "23.2.4 Associative containers" of the standard lists the
requirements for associative containers. Here is a link to the draft:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf
I guess an implementation could maintain a hash table as well, for
better-than-required access.

Jonathan M Davis wrote:
> On Friday 24 December 2010 00:02:06 Caligo wrote:
>> Why are they calling it RedBlackTree? why not Set? C++ std::set is a
>> red-black tree as far as I know, but they named it set.
>=20
> Andrei decided that the containers in Phobos will named after what
=20
they actually
=20
> are instead of what they're used for. A prime example of this is a
=20
red-black
=20
> tree. It can be used as a set. Depending on the implementation (I
=20
haven't look
=20
> at the Phobos one yet), it can also be used as a map (it's used for
=20
both set and
=20
> map in C++'s STL). But a set could be implemented in many different
=20
ways. A red-
=20
> black tree is only one of them. It could be implemented with a hash
=20
instead. But
=20
> that would give it very different performance characteristics.
=20
Yes, having different performance characteristics, hash table does not
satisfy the requirements of the standard though: std::set is an ordered
container.
=20
Table 99 in "23.2.4 Associative containers" of the standard lists the
requirements for associative containers. Here is a link to the draft:
=20
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf
=20
I guess an implementation could maintain a hash table as well, for
better-than-required access.

Yes, the C++ standard has performance requirements that pretty much restric=
t=20
each container type to a particular implementation but leave it open to oth=
er=20
implementations if they can meet the performance requirements. However, set=
s in=20
general do not have to have any particular implementation. The same goes fo=
r=20
maps. In Java, you HashSet and TreeSet, both of which implement the Set=20
interface. So, if you use Set, you don't know what the implementation is.
Andrei chose to have Phobos select particular data structures for container=
s=20
rather than their concepts. So, you have a red-black tree and you can use i=
t for=20
whatever makes sense to use a red-black tree for. If that's a set, then it'=
s a=20
set. But each container is defined as a particular data structure rather th=
an=20
what it's going to be used for.
Whether that is the best decision is obviously debatable, since other langu=
ages=20
have taken other approaches. But that's what we're doing in D. Personally, =
I=20
think that it makes good sense. In particular, I do _not_ like Java's appro=
ach=20
where you have interfaces with implementations with very different performa=
nce=20
characteristics. With std.container, the performance characteristics will b=
e=20
clear.
=2D Jonathan M Davis

So what does one use in D if something like std::unordered_set is needed?
RedBlackTree is ordered as far as I can tell.
On Fri, Dec 24, 2010 at 6:08 PM, Jonathan M Davis <jmdavisProg gmx.com>wrote:

On Friday 24 December 2010 00:02:06 Caligo wrote:

Why are they calling it RedBlackTree? why not Set? C++ std::set is a
red-black tree as far as I know, but they named it set.

Andrei decided that the containers in Phobos will named after what they
actually
are instead of what they're used for. A prime example of this is a
red-black
tree. It can be used as a set. Depending on the implementation (I haven't
look
at the Phobos one yet), it can also be used as a map (it's used for both
set and
map in C++'s STL). But a set could be implemented in many different ways. A
red-
black tree is only one of them. It could be implemented with a hash
instead. But
that would give it very different performance characteristics.
Phobos is taking the approach that a container is labeled for the data
structure
that it is rather than what it's used for. That way it's very clear what
it's
performance characteristics are. If you want to use the term Set in your
code,
then simply alias RedBlackTree to Set.
- Jonathan M Davis

RedBlackTree is ordered as far as I can tell.
On Fri, Dec 24, 2010 at 6:08 PM, Jonathan M Davis <jmdavisProg gmx.com>wrote:

On Friday 24 December 2010 00:02:06 Caligo wrote:

Why are they calling it RedBlackTree? why not Set? C++ std::set is a
red-black tree as far as I know, but they named it set.

Andrei decided that the containers in Phobos will named after what they
actually
are instead of what they're used for. A prime example of this is a
red-black
tree. It can be used as a set. Depending on the implementation (I haven't
look
at the Phobos one yet), it can also be used as a map (it's used for both
set and
map in C++'s STL). But a set could be implemented in many different ways. A
red-
black tree is only one of them. It could be implemented with a hash
instead. But
that would give it very different performance characteristics.
Phobos is taking the approach that a container is labeled for the data
structure
that it is rather than what it's used for. That way it's very clear what
it's
performance characteristics are. If you want to use the term Set in your
code,
then simply alias RedBlackTree to Set.
- Jonathan M Davis