<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rust/src/libstd/sync/mpmc_bounded_queue.rs, branch 0.11.0</title>
<subtitle>https://github.com/rust-lang/rust
</subtitle>
<id>http://git.dreamy.place/mirrors/rust/atom?h=0.11.0</id>
<link rel='self' href='http://git.dreamy.place/mirrors/rust/atom?h=0.11.0'/>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/'/>
<updated>2014-06-11T17:00:43+00:00</updated>
<entry>
<title>sync: Move underneath libstd</title>
<updated>2014-06-11T17:00:43+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-06-07T18:13:26+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=b1c9ce9c6f0eb7d4a7df1aad6b6799f4b548181c'/>
<id>urn:sha1:b1c9ce9c6f0eb7d4a7df1aad6b6799f4b548181c</id>
<content type='text'>
This commit is the final step in the libstd facade, #13851. The purpose of this
commit is to move libsync underneath the standard library, behind the facade.
This will allow core primitives like channels, queues, and atomics to all live
in the same location.

There were a few notable changes and a few breaking changes as part of this
movement:

* The `Vec` and `String` types are reexported at the top level of libcollections
* The `unreachable!()` macro was copied to libcore
* The `std::rt::thread` module was moved to librustrt, but it is still
  reexported at the same location.
* The `std::comm` module was moved to libsync
* The `sync::comm` module was moved under `sync::comm`, and renamed to `duplex`.
  It is now a private module with types/functions being reexported under
  `sync::comm`. This is a breaking change for any existing users of duplex
  streams.
* All concurrent queues/deques were moved directly under libsync. They are also
  all marked with #![experimental] for now if they are public.
* The `task_pool` and `future` modules no longer live in libsync, but rather
  live under `std::sync`. They will forever live at this location, but they may
  move to libsync if the `std::task` module moves as well.

[breaking-change]
</content>
</entry>
<entry>
<title>std: Remove UnsafeArc</title>
<updated>2014-05-20T01:12:18+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-05-20T00:51:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=4c8a4d241a984fdc0b8a015dceca2a006f2b7146'/>
<id>urn:sha1:4c8a4d241a984fdc0b8a015dceca2a006f2b7146</id>
<content type='text'>
This type has been superseded by Arc&lt;Unsafe&lt;T&gt;&gt;. The UnsafeArc type is a relic
of an era that has long since past, and with the introduction of liballoc the
standard library is able to use the Arc smart pointer. With little need left for
UnsafeArc, it was removed.

All existing code using UnsafeArc should either be reevaluated to whether it can
use only Arc, or it should transition to Arc&lt;Unsafe&lt;T&gt;&gt;

[breaking-change]
</content>
</entry>
<entry>
<title>std: Rebuild mpmc queues on Unsafe/Arc</title>
<updated>2014-05-19T23:01:48+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-05-19T23:01:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=7db02e20f2140530a9402f7d7452b10cac6fdf7b'/>
<id>urn:sha1:7db02e20f2140530a9402f7d7452b10cac6fdf7b</id>
<content type='text'>
This removes usage of UnsafeArc and uses proper self mutability for concurrent
types.
</content>
</entry>
<entry>
<title>Test fixes and rebase conflicts</title>
<updated>2014-05-07T18:03:12+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-05-07T15:20:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=07caa224501817c93be3f5c57a013ed5db6c04e1'/>
<id>urn:sha1:07caa224501817c93be3f5c57a013ed5db6c04e1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>std,serialize: remove some internal uses of ~[].</title>
<updated>2014-04-10T22:21:58+00:00</updated>
<author>
<name>Huon Wilson</name>
<email>dbau.pp+github@gmail.com</email>
</author>
<published>2014-04-09T01:43:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=a65411e4f7b5df78e34dcaf8061d4641f4b56412'/>
<id>urn:sha1:a65411e4f7b5df78e34dcaf8061d4641f4b56412</id>
<content type='text'>
These are all private uses of ~[], so can easily &amp; non-controversially
be replaced with Vec.
</content>
</entry>
<entry>
<title>std: Switch field privacy as necessary</title>
<updated>2014-03-31T22:17:12+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-03-27T22:09:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=9a3d04ae7629f6f273643b3a14f106726842be6a'/>
<id>urn:sha1:9a3d04ae7629f6f273643b3a14f106726842be6a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Convert most code to new inner attribute syntax.</title>
<updated>2014-03-29T00:12:21+00:00</updated>
<author>
<name>Brian Anderson</name>
<email>banderson@mozilla.com</email>
</author>
<published>2014-03-22T01:05:05+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=451e8c1c6178750a4c1789f40749562164a980b7'/>
<id>urn:sha1:451e8c1c6178750a4c1789f40749562164a980b7</id>
<content type='text'>
Closes #2569
</content>
</entry>
<entry>
<title>rename std::vec -&gt; std::slice</title>
<updated>2014-03-20T05:30:27+00:00</updated>
<author>
<name>Daniel Micay</name>
<email>danielmicay@gmail.com</email>
</author>
<published>2014-03-08T23:11:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=ce620320a20baa1428e679c751b1b4a8d8556ca1'/>
<id>urn:sha1:ce620320a20baa1428e679c751b1b4a8d8556ca1</id>
<content type='text'>
Closes #12702
</content>
</entry>
<entry>
<title>std: Rename Chan/Port types and constructor</title>
<updated>2014-03-13T20:23:29+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-03-09T21:58:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=78580651131c9daacd7e5e4669af819cdd719f09'/>
<id>urn:sha1:78580651131c9daacd7e5e4669af819cdd719f09</id>
<content type='text'>
* Chan&lt;T&gt; =&gt; Sender&lt;T&gt;
* Port&lt;T&gt; =&gt; Receiver&lt;T&gt;
* Chan::new() =&gt; channel()
* constructor returns (Sender, Receiver) instead of (Receiver, Sender)
* local variables named `port` renamed to `rx`
* local variables named `chan` renamed to `tx`

Closes #11765
</content>
</entry>
<entry>
<title>Rewrite channels yet again for upgradeability</title>
<updated>2014-02-12T00:32:00+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2014-01-09T02:31:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=0a6b9219d180503254b55cfd14cdaf072fb35ac4'/>
<id>urn:sha1:0a6b9219d180503254b55cfd14cdaf072fb35ac4</id>
<content type='text'>
This, the Nth rewrite of channels, is not a rewrite of the core logic behind
channels, but rather their API usage. In the past, we had the distinction
between oneshot, stream, and shared channels, but the most recent rewrite
dropped oneshots in favor of streams and shared channels.

This distinction of stream vs shared has shown that it's not quite what we'd
like either, and this moves the `std::comm` module in the direction of "one
channel to rule them all". There now remains only one Chan and one Port.

This new channel is actually a hybrid oneshot/stream/shared channel under the
hood in order to optimize for the use cases in question. Additionally, this also
reduces the cognitive burden of having to choose between a Chan or a SharedChan
in an API.

My simple benchmarks show no reduction in efficiency over the existing channels
today, and a 3x improvement in the oneshot case. I sadly don't have a
pre-last-rewrite compiler to test out the old old oneshots, but I would imagine
that the performance is comparable, but slightly slower (due to atomic reference
counting).

This commit also brings the bonus bugfix to channels that the pending queue of
messages are all dropped when a Port disappears rather then when both the Port
and the Chan disappear.
</content>
</entry>
</feed>
