Хочу познакомить вас с библиотекой rspace
, которая предоставляет пространство кортежей для хранения данных для интерпретатора Rholang, языка для описания распределенных вычислений, основанного на pi-алгебре процессов.
rspace
— часть проекта RChain по созданию распределенной масштабируемой вычислительной платформы для смарт-контрактов.
Существующие сейчас реализации пространства кортежей опираются на механизм "ключ-значение", которые предусматривают две основные функции для взаимодействия с хранилищем: get, которая возвращает данные хранящиеся по определенному ключу, и put, которая помещает данные в хранилище по указанному ключу.
rspace
отходит от этой модели и предлагает новый подход к хранению и извлечению данных.
Главные отличия:
- В этой библиотеке данные соотносятся не с определенным ключом, а с каналом (channel). В
rspace
каналом может быть любой тип Scala, который может быть сериализован в или десериализован из байтового массиваArray[Byte]
. rspace
может хранить не только данные, но и продолжения (continuations), которые представляют действия, которые можно произвести над полученными данными. Вrspace
продолжением может быть любой тип Scala, который может быть сериализован в или десериализован из байтового массиваArray[Byte]
.- Продолжение соотносится со списком каналов и списком паттернов. Паттернами могут быть любые типы Scala, которые могут быть сериализованы в байтовый массив
Array[Byte]
или десериализованы из него. Пользователиrspace
могут создавать собственную функцию сопоставления, чтобы извлекать из хранилища данные по определенному паттерну. - Две основные функции для взаимодействия с хранилищем:
consume
, которая ищет в хранилище данные по предоставленному списку паттернов на предоставленном списке каналов, иproduce
, которая использует предоставленные данные и ищет для них подходящее продолжение в хранилище.
Страница библиотеки на GitHub.
Библиотека распространяется по лицензии Apache 2.0
Чтобы использовать rspace
в своем проекте, нужно в билде (build.sbt) указать следующее:
coop.rchain %% rspace % "0.1.1"
Если вам стало интересно, то тут можно найти полный туториал.