News for hackers. Stuff that matters.
Re:You Can Throw() Anything in JavaScript – and Other Async/... by laurencerowe on Friday April 08, 2022 @10:14AM (#30957007)
I think Rust avoids this issue because it limits you to a single mutable reference. So even if each thread constructed its own payee and payer, their underlying balances would still reference the same shared state so only one thread at a time would be allowed a mutable reference to payee and payer balances.
Re:You Can Throw() Anything in JavaScript – and Other Async/... by anonymoushn on Friday April 08, 2022 @11:15AM (#30958180)
It doesn't limit you to a single in-memory representation of each entry in a remote database.
Re:You Can Throw() Anything in JavaScript – and Other Async/... by laurencerowe on Friday April 08, 2022 @01:02PM (#30959681)
> It doesn't limit you to a single in-memory representation of each entry in a remote database.

If you have a remote database then you likely have multiple processes at play. For safety in those cases you need to rely on transactional safety at the database level or if transactions are not available then you may want to use a tool like TLA+ to check your distributed algorithm.

Re:You Can Throw() Anything in JavaScript – and Other Async/... by anonymoushn on Saturday April 09, 2022 @03:04AM (#30965818)
The example clearly has that though, otherwise it would not need

  yield from server.update_balances([payer, payee])
Re:You Can Throw() Anything in JavaScript – and Other Async/... by laurencerowe on Friday April 08, 2022 @12:31PM (#30959224)
(The above comment was changed. When I replied it was talking about different threads reading from a database.)

In that case you’d be relying on the database rather than the programming language to manage shared state. (The article is more about how to safely manage shared state within a process.)

Re:You Can Throw() Anything in JavaScript – and Other Async/... by IshKebab on Friday April 08, 2022 @12:33PM (#30959255)
You could probably do it for a key value store, but I think it would take a custom database to do it for a relational database.