akkadotnet / akka.net

Canonical actor model implementation for .NET with local + distributed actors in C# and F#.
http://getakka.net
Other
4.69k stars 1.04k forks source link

Use System.Collections.Immutable? #93

Closed Aaronontheweb closed 10 years ago

Aaronontheweb commented 10 years ago

There's a number of places inside Akka where immutable and copy-on-write collections are used - the internal queues used for buffering network messages being one of them.

The BCL has an excellent set of Immutable collection implementations (System.Collections.Immutable) that I used in my own initial C# implementation of Akka - I'm cautious against bloating up Akka.NET with too many external dependencies, but I think there's merit to utilizing this one in particular.

Any objections to including it, at least in Akka.Remote? Other thoughts?

ghost commented 10 years ago

Is it open source? Is it cross-platform, tested on mono etc., with compatible license? If not, don't use it, since you aim to be cross-platform and canonical for .NET Akka.

jkonecki commented 10 years ago

Don't use it for performance reasons.

http://ayende.com/blog/164739/immutable-collections-performance

Aaronontheweb commented 10 years ago

@dsyme this is the collection I was considering http://www.nuget.org/packages/Microsoft.Bcl.Immutable/1.0.30

IIRC, it doesn't currently support Mono but I believe the team recently committed to adding full Mono support.

@jkonecki looks like the Twitterverse has arrived at the same conclusion: https://twitter.com/AkkaDotNET/status/448604466422763521

Aaronontheweb commented 10 years ago

For the purposes of the work I'm doing on issue #1, I'm going to forgo the use of any immutable collections for the time being.

We may determine at a later date that we need them in order to make the usual ordered messaging / immutability / thread-safe blah blah guarantees but for the time being I don't think it will be an issue until after we hit milestone 1

rogeralsing commented 10 years ago

Performance was one of the reasons I didn't use them to begin with in Akka.NET. Also do note, that inside actors, we can use any old non threadsafe collection.

Aaronontheweb commented 10 years ago

Closing this issue.