Several deprecated items were listed for removal in August, but it's
looking likely that 2.060 will come out in August, and I'd prefer not to
have them removed for 2.060 given how many items are already in the
changelog, and they're already deprecated, so it'll only affect people
compiling with -d either way. So, I'm changing the ddoc comments to say
September instead of August. They'll be removed in 2.061.
This enables the test suite to build with the -property switch enabled.
std.cpuid: vendor()/processor() have not been converted to properties in accordance to core.cpuid.
std.xml: Element.text() cannot be a property due to the optional parameter.
The List.put(ref List) overload previously didn't increment m_count for rhs.m_front itself, leading to an underflow of m_count when removing all the messages. I suppose this didn't surface so far because m_count isn't really relevant if no mailbox size limit is set.
Also, I renamed the private put() method to appendNode() to avoid confusion as it is not really an overload semantically.
Greatly simplified the code in places and tuned somewhat for performance as well. Normal send/receive is about 25% faster now, and prioritySend is 200 times faster (yes, 20,000%).
Added a unittest or two and verified that they still pass :-p
Fixed the occlusion detection for receive() so that functions returning a value (assumed to be bool) do not occlude following functions accepting the same parameter list.
Changed the handling of an OwnerTerminated message so that the OwnerTerminated exception will be thrown immediately on receipt instead of delaying the throw until a receive() is issued where the receive must block and wait for a new message to arrive. Since message arrival is indeterminate (ie. network latency and other factors affect how long it will take for a message to arrive), there was no provable difference between the existing guarantee and the much simpler guarantee that OwnerTerminated is not thrown until all messages have been received from the owner only. Although the early actor model didn't even require messages from a specific sender to arrive in order, experience has shown this guarantee to be too weak for practical use in many scenarios (it's equivalent to having a weak memory model in a SMP system). So std.concurrency will guarantee that all messages from a particular sender will arrive in order and thus the OwnerTerminated message will necessarily be the last message received from the receiver's owner, so when this message is encountered an OwnerTerminated exception will be thrown immediately.
Slightly changed the handling of LinkTerminated vs. OwnerTerminated messages so that an OwnerTerminated exception will always be thrown if the sender is the recipient's owner, regardless of any existing links between the processes. The link is broken if it exists though.