Our great sponsors
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
spin
Spin is the open source developer tool for building and running serverless applications powered by WebAssembly.
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
Very cool, and the approach demonstrated might be of interest to a similar problem we have in Ambient (our WASM game runtime that has competing processes that may need to retry interactions.)
That being said - what’s the relation to Lunatic [0]? Are you still working on Lunatic? Is this a side project? Or is it something completely separate?
[0]: https://lunatic.solutions/
Another relevant language might be Vale (https://vale.dev), which is aiming for "perfect replayability": https://verdagon.dev/blog/perfect-replayability-prototyped
When I implemented a WASM compiler, the only source of float-based non-determinism I found was in the exact byte representation of NaN. Floating point math is deterministic. See https://webassembly.org/docs/faq/#why-is-there-no-fast-math-... and https://github.com/WebAssembly/design/blob/main/Nondetermini....
linky: https://github.com/fermyon/spin#readme (Apache 2; and while I don't see any CLA, interestingly they do require GPG signed commits: https://developer.fermyon.com/spin/contributing-spin#committ... )
Is the primary use-case to allow frontend code to recover from failed RPCs? Wouldn't it be simpler to retry the RPCs?
The last time I tried to do RPCs from TypeScript, I had difficulty finding a library with timeouts and usable error handling. So I wrote one:
https://github.com/mleonhard/systeminit-coding-assessment-sd...
It would be straightforward to add retries to that. If any of you want to do that, I will release the code with an MIT or Apache 2.0 license.
Is the primary use-case to allow frontend code to recover from failed RPCs? Wouldn't it be simpler to retry the RPCs?
The last time I tried to do RPCs from TypeScript, I had difficulty finding a library with timeouts and usable error handling. So I wrote one:
https://github.com/mleonhard/systeminit-coding-assessment-sd...
It would be straightforward to add retries to that. If any of you want to do that, I will release the code with an MIT or Apache 2.0 license.
The “restart from where it failed”-aspect was a big reason for why I made Mats3. It is message-based, async, transactional, staged stateless services, or message-oriented asynchronous RPC. Due to the transactionality, and the “state lives on the wire”, if a flow fails, it can be restarted from where it left off.
https://mats3.io