This framework provides support to concurrent and distributed programming with (tuple) spaces in .NET. The framework could be found on GitHub.
The framework was originally designed and developed by Shane D. McLean in collaboration with Alberto Lluch Lafuente. The original framework could be found here.
This fork is a port of the application to support .NET Standard 2.0. With this port, the library could be used from all three popular .NET runtime: .NET Framework on Windows, and .NET Core and Mono on both Windows and *nix. Ultimately the goal is to have the library support an object space - an extension of the original tuple space idea.
The goal of the fork is to support object space, an extension on the original idea of tuple space. This fork is maintained by Tuan Tran and Daishiro Nishida as part of their project for Williams College's Distributed System course.
The library could be built on all three popular .NET platform as long as the version used follows .NET Standard 2.0. It is advised that you have the latest version of the framework installed. For *nix, you need to download and install either .NET Core 2.0 or above, or Mono 5.2 or above. On Windows, .NET Framework is installed by default. See the instruction for building on .NET Framework and Windows below. Note that you could still use .NET Core and Mono on Windows if you want to.
(if it is beneficial to you, I'm developing the library on .NET Core 2.0 on a Mac).
Make sure you have .NET Core version 2.0 or above. .NET Core could be downloaded from Microsoft
To build the project head to the root directory and run
dotnet restore
dotnet build
To run an example, do
dotnet run -p examples/{example name}/{example name}.csproj
For example dotnet run -p examples/Example1/Example1.csproj
Make sure you have Mono version 5.2 or above. Mono could be downloaded from the Mono project
To build the project head to the root directory and run
msbuild /t:restore
msbuild
To run an example, do
mono examples/{example name}/bin/{Debug/Release}/netcoreapp2.0/{example name}.dll
For example mono examples/Example1/bin/{Debug/Release}/netcoreapp2.0/Example1.dll
Alternatively you could use IDEs such as MonoDevelop, JetBrains Rider or Visual Studio, which should simplify the job of building and running. Just import the project into the IDEs, build and run using the menu bar or the solution sidebar. Make sure you have the latest version of the IDE and that it supports Mono 5.2/.NET Core 2.0 and above.
Given that .NET Framework is not optimized for development from the command line , the easiest way to build and run from .NET Framework would be to use Visual Studio. Download the latest version of Visual Studio, which should come with the latest .NET Framework. Simply import the solution to Visual Studio, build solution and run projects from the menu bar or solution sidebar.
Please message me if you find a way to build & run the library easily on .NET Framework.
As mentioned, Visual Studio (on Windows and Mac), MonoDevelop, and JetBrains Rider are good .NET IDEs and should simplify development. If you prefer using a text editor, Omnisharp provides plugins for a wide array of popular tools.
Follow these links for more information on .NET Standard and its implementations .NET Core, Mono, or .NET Framework.
Please go to dotSpace's wiki page for documentation on the API and dotSpace-examples' wiki page for information about the examples.
-
TreeSpace: Implementation of a tuple space optimized for lookups. Uses the TupleTree data structure.
-
TupleTree: A data structure which stores tuples in a tree.
-
IObjectSpaceSimple and IObjectSpace: Specify the interface for an ObjectSpace.
-
IObjectMessage: Base interface for all network message.
-
IObjectRepository and IObjectRepositorySimple: Specify the interface for a remote ObjectSpace Space repository.
The classes we added to the project can be found in these folders:
-
ObjectSpaceBase: An abstract class which supports the main operations for an ObjectSpace. We also provide base implementation of ObjectSpace agents for ease of use.
-
ObjectSpace Utilities: Includes classes that make up an entry in the base ObjectSpace
-
Base remote Object Message Classes: Base classes for distributed ObjectSpace, including base classes for network messages, a base Json encoder for network messages, and a base remote space repository.
-
SequentialObjectSpace: A sample FIFO implementation of ObjectSpace.
-
Remote ObjectSpace & Object Repository: Allows a user to access an ObjectSpaceSimple remotely, including implementations of a remote Object Space, remote Space Repository, a custom Json writer, an OperationMap to handle different types of message, and all network messages in ObjectSpace.
Other additions include classes and interfaces that mimic existing ones but are adapted for the implementation of an ObjectSpace.
-
ClickRate: A program which reads in impressions and clicks for advertisements, and computes the click-through rate for each ad.
-
ClickRateD: A distributed version of the ClickRate program.
-
Fork: A version of Example2 (dining philosophers problem) which uses ObjectSpace.
-
ProducerConsumer: An example of how subtyping and filtering may be used with ObjectSpace.
-
ProducerConsumerD: A distributed version of the ProducerConsumer program.