prydt
Joined 9 years ago
Joined 9 years ago
Something I'm curious about: How does a recovering node know that it is healthy enough to serve requests? Is there some anti-entropy protocol used between the tail and the recovering node?
[1] https://www.usenix.org/legacy/event/usenix09/tech/full_paper...
Is this still true today? I know that Facebook does [1], but I don't have references for any other places which use it.
[1] https://engineering.fb.com/2022/05/04/data-infrastructure/de...
- rendezvous hashing / consistent hashing
- Hybrid logical clocks
- "Don’t Settle for Eventual: Scalable Causal Consistency for Wide-Area Storage with COPS"
- "Scaling Replicated State Machines with Compartmentalization" (much more recent but really one of my favorite papers)
I'm really interested in programming language design and ergonomics. What niche PL features would you like to see have more adoption?
Can you elaborate what you mean?
Refinement types can be used as compile time checks for preconditions and postconditions, while this contract programming is inserting runtime checks.
Here's a good post on the type state pattern in Rust (we don't actually have refinement types in something like Rust but the type state pattern is somewhere closer to refinement types on this spectrum): https://cliffle.com/blog/rust-typestate/
The correct way to go about this would be to return the new balance and capture the return value in the first part of the out postcondition like:
```D double deposit(double amount) in (amount > 0, "Deposit amount must be positive") out (result; result == balance) { balance += amount; return balance; } ```
My mistake!
Hyperdrive @ Cloudflare
interested in distributed systems and programming language theory.