Crates.io | rspl |
lib.rs | rspl |
version | 0.1.2 |
source | src |
created_at | 2022-12-16 19:44:50.898599 |
updated_at | 2023-03-19 00:58:26.009988 |
description | A stream processor language. |
homepage | |
repository | https://github.com/shtsoft/rspl |
max_upload_size | |
id | 739113 |
size | 136,418 |
A powerful stream processor language with roots in functional programming (see Generalising Monads to Arrows) embedded in Rust and supplemented with adaptations of appreciated design patterns.
unsafe
-codeno_std
-optionFor documentation see Released API docs. In particular, you can find a design- and usage-description there.
One of rspl's earliest ancestor seems to be FUDGETS: a graphical user-interface in a lazy functional language and the accroding implementation.
Fudgets can be thought of as stream processors which process the stream both high- and low-level where the high-level processing is responsible for coordination with the environment and the low-level with the actual task.
The use of fudgets is also briefly discussed in Generalising Monads to Arrows.
So, as the origins of rspl date back quite some time it is not surprising that there is some theoretical work on it.
For example, Representations of Stream Processors Using Nested Fixed Points is a paper on the semantics of rspl-like stream processors while in Termination Checking Nested Inductive and Coinductive Types they serve as an example to understand termination checking of modern proof assistants.
But there is also a more recent practial work which is worth mentioning.
Quiver is a Haskell-library which seems very similar to rspl (and claims to generalize the apparently more famous but harder to understand pipes).
The main difference is that Quiver's language constructs for in- and output are totally symmetric, whereas rspl rather reflects the intuitive asymmetry of stream processing w.r.t. in- and output.
Last but not least, let us mention strymonas.
Although its take on stream processing differs from that of rspl, it is still interesting for rspl due to its property of stream fusion.
It would be nice to have an efficient composition combinator in rspl with the same property.
However, rspl's composition combinator does currently not live up to that.
rspl is not quite finished yet. There remain some important things to do:
Box
es and it is conceivable to store those boxes on 'mini-heaps' residing in stack frames (compare smallbox).
However, this approach needs further realizabilty analyses first.map
) will be considered.If you want to contribute: CONTRIBUTING.
For security-related issues see: SECURITY.