Hiperspace.Heap
2.5.13
Prefix Reserved
See the version list below for details.
dotnet add package Hiperspace.Heap --version 2.5.13
NuGet\Install-Package Hiperspace.Heap -Version 2.5.13
<PackageReference Include="Hiperspace.Heap" Version="2.5.13" />
<PackageVersion Include="Hiperspace.Heap" Version="2.5.13" />
<PackageReference Include="Hiperspace.Heap" />
paket add Hiperspace.Heap --version 2.5.13
#r "nuget: Hiperspace.Heap, 2.5.13"
#:package Hiperspace.Heap@2.5.13
#addin nuget:?package=Hiperspace.Heap&version=2.5.13
#tool nuget:?package=Hiperspace.Heap&version=2.5.13
Hiperspace.Heap
The Heap driver provides the simplest hiperspace, storing objects in the managed process heap,
it exists for testing purposes, but also for benchmark performance of other drivers.
The Heap driver uses more memory, and is slower than the Rocks driver.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Hiperspace (>= 2.5.13)
- Microsoft.Bcl.HashCode (>= 6.0.0)
- protobuf-net.Core (>= 3.2.56)
- System.Numerics.Tensors (>= 10.0.0)
-
net8.0
- Hiperspace (>= 2.5.13)
- Microsoft.Bcl.HashCode (>= 6.0.0)
- protobuf-net.Core (>= 3.2.56)
- System.Numerics.Tensors (>= 10.0.0)
-
net9.0
- Hiperspace (>= 2.5.13)
- Microsoft.Bcl.HashCode (>= 6.0.0)
- protobuf-net.Core (>= 3.2.56)
- System.Numerics.Tensors (>= 10.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.5.35 | 93 | 2/27/2026 |
| 2.5.33 | 98 | 2/14/2026 |
| 2.5.32 | 103 | 1/30/2026 |
| 2.5.29 | 108 | 1/17/2026 |
| 2.5.28 | 114 | 12/31/2025 |
| 2.5.26 | 196 | 12/21/2025 |
| 2.5.21 | 444 | 12/10/2025 |
| 2.5.18 | 685 | 12/3/2025 |
| 2.5.13 | 204 | 11/24/2025 |
| 2.5.8 | 187 | 11/15/2025 |
| 2.5.2 | 220 | 11/6/2025 |
| 2.5.0 | 215 | 10/20/2025 |
| 2.4.6 | 209 | 9/23/2025 |
| 2.4.4 | 298 | 8/7/2025 |
| 2.4.2 | 186 | 7/28/2025 |
| 2.4.0 | 220 | 7/10/2025 |
| 2.3.8 | 201 | 7/1/2025 |
| 2.3.7 | 213 | 6/18/2025 |
| 2.3.3 | 223 | 6/5/2025 |
| 2.2.2 | 230 | 5/5/2025 |
https://www.cepheis.com/hiperspace/20251124
## Overview
This release adds the `@AlternateIndex` property to explicitly create an index for views and ad hoc queries that do not *or cannot* be defined in the normal way of using an access path.
### Path Index
Normally indexes are created in `Hiperspace` by defining an extent that uses an attribute to retrieve a list of elements. The following hilang model defines a *Person* with a *Parent* and an extension *Children* that retrieves all *Person* that have a *Parrent* that refers to this *person*.
```
entity Person (Id : Guid) {Parent : Person} [Children : Person (Parent = this)];
```
The *Children* extent causes an index to be created on *Parent* so that access to *Children* is fast and does not require an scan or all *Person* elements
### Alternate Index
The following model defines two entities {*Product, Order*} that can be viewed as **nodes** in a **graph**. The segment *Item* defined the details of the *Order* with reference to the *Product* being ordered.
```
entity Product = Node(...) (Id : Guid);
entity Order = Node (...) (Id : Guid) [Items : Item];
segment Item = Edges (From = owner, To = Product, FromType = "Purchase", ToType ="Purchased")
(Line : Int32)
{
@AlternateIndex
Product : Product,
Quantity : Decimal
};
```
In a **UML** diagram, *Order* aggregates *Item*, and *Item* is associated with *Product*. In a **Graph** diagram *Order* and *Product* are both `Nodes` with two `Edge` between them for "Purchase" and "Purchased".
[image]Sites/hiperspace/sample/orderitem.png[/image]
*Product* cannot refer to *Item* because it is a `segment` of its owner (*in this case Order*), and cannot therefore define a *path* from *order* to *Item*. When viewed as a **graph** the Order->(Purchase)->Product `Edge` uses the *Item* key to find all edges, but the Product->(Purchased)->Order `Edge` needs an `@AlternateIndex` to avoid a scan of all *Items*.
-----
## Result<> enhancement
The Hiperspace [Result](https://github.com/channell/Hiperspace/blob/master/src/Hiperspace/Result.cs) type has been updated to include *Rust-Style* continuation monads that can optionally follow a `.Bind()` (*bind an element with hiperspace*) with:
* `.Then` chaining function
* `.Else` error handling function
```
write.Roles
.Bind(new Role
{
Name = role,
RoleName = role,
})
.Then(r =>
{
Log?.LogInformation($"Added missing role {r.Name}");
return Result.Ok(r);
})
.Else(r => Log?.LogError($"Failed to bind role {r.Value.Name} with status {r.Status} and reason {r.Reason}"));
```