Skip to content

Releases: ledjon-behluli/OrleanSpaces

v1.0.1

02 Dec 21:26
8a4640f
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.0.0...v1.0.1

v1.0.0

10 Sep 15:55
d9211f8
Compare
Choose a tag to compare

What's Changed

  • Method and signature changes to the agent interface.
  • Sepparation of SpaceOptions into SpaceServerOptions and SpaceClientOptions.
  • Direct array passing to constructors of SpaceTuple and SpaceTemplate.
  • Space partitioning.
  • Configurable agent startup behavior.
  • OSA004 analyzer and code fixer.
  • Bug fixes

Full Changelog: 28-08-2023...v1.0.0

28-08-2023

28 Aug 08:42
99afa47
Compare
Choose a tag to compare

NuGet v0.3.2

This release fixes issue #3 (reported by @ledjon-behluli) via PR #4

22-07-2023

22 Jul 18:20
Compare
Choose a tag to compare

NuGet v0.3.1

This release fixes issue #1 (reported by @jaredthirsk) via PR #2

19-07-2023

19 Jul 09:17
11289a6
Compare
Choose a tag to compare

OrleanSpaces.Analyzers

NuGet v0.2.0

Features

  • OSA001 - Interface is intended for internal use only.
  • OSA002 - Avoid constructor instantiation having only null type, or no arguments.
  • OSA003 - One or more of the supplied argument types for SpaceTuple or SpaceTemplate is not supported.

OrleanSpaces

NuGet v0.3.0

This release a MAJOR release with many braking changes, but necessary to improve the quality, versatility and performance of this library.

Features

  • Specialized Tuples - In addition to the SpaceTuple & SpaceTemplate which are the generic type tuples that can be used when you want to store different kind of field types together. Now we have introduced specialized (thereby strongly-typed) tuples, templates and agents. The library comes with a plethora of tuples and corresponding templates for the most used .NET types: bool, byte, char, DateTime, DateTimeOffset, decimal, double, float, Guid, Int128, int, long, sbyte, short, TimeSpan, UInt128, uint, ulong, ushort.
  • Strongly-typed Agents - Due to the introduction of the specialized tuples.
  • Improved Matching Process - Tuple search is performed via matching of templates to corresponding tuples in the space. This process has been highly parallelized for specialized tuples by leveraging hardware acceleration, specifically vectorization techniques.
  • Space Replication - For every tuple space type and related changes to it, replication of its state is being performed constantly to all of the agent(s) that are responsible to interact with the corresponding tuple space type.
  • Tuple Locality - Due to space replication, each of the agents has access to a copy of the tuple space in-memory, therefor search like operations are much faster, and also due to the much improved matching process of specialized tuples, searching through the space is blazingly fast.
  • Host Agent Access - Previously the host of the tuple space did not have access to the space agent, therefor could not perform operations on the space. It was always the client that was performing these actions. Now both the host/server & client can perform actions on the tuple space(s).
  • Tuple Streaming - Via the agent(s), any tuple writes in the space can be streamed directly to the client code via a new API that exposes an IAsyncEnumerable<T> where T is any ISpaceTuple. With this, we now implement all major communication models:
    • Synchronous Request-Reply model.
    • Asynchronous Request-Reply model.
    • Streaming model.
    • Publish-Subscribe model.
  • Performance Improvements - Due to the introduction of the specialized model, space replication, a plethora of improvements has come, both in the form of faster code execution and significantly lower amount of heap allocations.
  • Upgrade to .NET 7 - The project now targets .NET 7 and also Orleans 7.
  • Documentation - Update all documentation to reflect the changes.

Breaking Changes

  • A LOT 🙇

12-02-2022

02 Dec 12:01
Compare
Choose a tag to compare

OrleanSpaces.Analyzers

NuGet v0.1.1

Features

  • OSA001 - Avoid instantiation of empty SpaceTuple by default constructor or expression.
  • OSA002 - Avoid constructor instantiation of SpaceTemplate having only SpaceUnit type arguments.
  • OSA003 - The supplied argument type is not supported.

OrleanSpaces

NuGet v0.2.0

Features

  • Avoiding generation of async state machines via async eliding on some of the methods of ISpaceAgent.

Breaking Changes

  • SpaceUnit.Null has been removed.

The idea of this property was to serve a static value of type SpaceUnit via a read-only reference, as opposed to new'ing the same value every time. The problem was that in actuality it is more performant to simply new a value as opposed to serving a reference to a pre-initialized value. The reason is that the size of the struct is 1, and when we return via ref, it's returning a reference to the static value (so an IntPtr) which is of size 4 (x86 processor architecture), and size 8 (x64 processor architecture). So its makes much more sense to simply new() it.

This benchmark instantiates SpaceUnits via constructor and reference:

Method iterations Mean Error StdDev Allocated
ByCtor 10 2.703 ns 2.970 ns 0.1628 ns -
ByRef 10 4.001 ns 3.050 ns 0.1672 ns -
ByCtor 100 30.762 ns 9.106 ns 0.4991 ns -
ByRef 100 31.984 ns 1.688 ns 0.0925 ns -
ByCtor 1000 240.258 ns 6.619 ns 0.3628 ns -
ByRef 1000 241.926 ns 5.238 ns 0.2871 ns -
ByCtor 10000 2,336.375 ns 63.654 ns 3.4891 ns -
ByRef 10000 2,338.577 ns 159.218 ns 8.7273 ns -
ByCtor 100000 23,197.835 ns 2,682.852 ns 147.0562 ns -
ByRef 100000 23,286.836 ns 1,961.542 ns 107.5187 ns -

This benchmark instantiates SpaceUnits via constructor and reference, but also inserts them into an array of SpaceUnits:

Method iterations Mean Error StdDev Gen0 Gen1 Gen2 Allocated
ByCtor 10 8.286 ns 6.513 ns 0.3570 ns 0.0096 - - 40 B
ByRef 10 14.880 ns 3.227 ns 0.1769 ns 0.0095 - - 40 B
ByCtor 100 63.681 ns 3.227 ns 0.1769 ns 0.0305 - - 128 B
ByRef 100 138.383 ns 21.043 ns 1.1534 ns 0.0305 - - 128 B
ByCtor 1000 521.173 ns 82.105 ns 4.5004 ns 0.2441 - - 1024 B
ByRef 1000 1,452.452 ns 101.014 ns 5.5369 ns 0.2441 - - 1024 B
ByCtor 10000 5,019.518 ns 154.834 ns 8.4870 ns 2.3880 - - 10024 B
ByRef 10000 15,180.695 ns 663.576 ns 36.3728 ns 2.3804 - - 10024 B
ByCtor 100000 163,885.567 ns 6,346.882 ns 347.8940 ns 31.1279 31.1279 31.1279 100035 B
ByRef 100000 176,574.064 ns 7,297.200 ns 399.9841 ns 31.0059 31.0059 31.0059 100035 B