srrrse's avatar

srrrse

@without.boats

681 followers 52 following 367 posts

events have not yet disclosed to me all that i am


srrrse's avatar srrrse @without.boats
[ View ]

Any record of this online?

1 replies 0 reposts 0 likes


srrrse's avatar srrrse @without.boats
[ View ]

Hickey drastically underestimates the impact of static type systems on program correctness, especially those derived from categorical laws? You got that from r/Haskell, right? Yea I read that too. Were you gonna plagiarize the whole thing for us? Do you have any thoughts of your own on this matter?

5 replies 5 reposts 73 likes


srrrse's avatar srrrse @without.boats
[ View ]

Well as a matter of fact, I won’t, because Hickey drastically underestimates the impact of static-

1 replies 2 reposts 47 likes


srrrse's avatar srrrse @without.boats
[ View ]

and the UNIX philosophy. Thats gonna last until next year, then youre gonna be in here regurgitating Rich Hickey, talkin about, you know, the difference between ease and simplicity and immutability and time and designing systems from uncomplected components.

1 replies 2 reposts 53 likes


srrrse's avatar srrrse @without.boats
[ View ]

Of course thats your contention. Youre a 1st year programmer. You just got finished writin some REST backend, node.js probably. Youre gonna be convinced of that til next month you get to Rob Pike and then youre gonna be talkin about goroutines and message passing and how concurrency isnt parallelism

1 replies 36 reposts 127 likes


srrrse's avatar srrrse @without.boats
[ View ]

Evergreen

1 replies 1 reposts 13 likes


srrrse's avatar srrrse @without.boats
[ View ]

If you are going to create a new language that you hope someday people will actually use, you should create a language server before you create a compiler.

1 replies 0 reposts 16 likes


srrrse's avatar srrrse @without.boats
[ View ]

Yea giving channels a unique name, consistent the same way functions have unique names. Or maybe the IDE could just support jump to receiver and show all senders

0 replies 0 reposts 2 likes


srrrse's avatar srrrse @without.boats
[ View ]

Inventing a guy to be mad at only to realize that I too am a guy someone is inventing to be mad at - The Circular Ruins, Jorge Luis Borges

0 replies 6 reposts 20 likes


srrrse's avatar srrrse @without.boats
[ View ]

First question: because mem::swap and pals don’t have any bound. See: without.boats/blog/changin...
Second question: yes there are Move futures, I was being abbreviated

0 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

*somewhat novel

0 replies 0 reposts 5 likes


srrrse's avatar srrrse @without.boats
[ View ]

I thought this was an interesting, someone novel critique of message passing: you‘re not usually required to label the two ends of a channel anything related to one another, making it hard to find out where the messages go.

2 replies 0 reposts 22 likes


srrrse's avatar srrrse @without.boats
[ View ]

I mean a trait called Move that controls whether or not you can Move this type (after you’ve taken its address) the same way Copy controls whether or not you can copy it. Then futures just wouldn’t implement Move, and you wouldn’t need Pin at all.

2 replies 0 reposts 4 likes


srrrse's avatar srrrse @without.boats
[ View ]

I guess I should add: the weaknesses of core Rust are pretty much all in areas where Rust was breaking new ground.

1 replies 1 reposts 18 likes


srrrse's avatar srrrse @without.boats
[ View ]

The counterargument would be “just have green threads” but well I already explained why this didn’t work: without.boats/blog/why-asy...

1 replies 1 reposts 10 likes


srrrse's avatar srrrse @without.boats
[ View ]

Async trait methods required a heap of changes to the trait system to work, biggest one being GATs

1 replies 0 reposts 6 likes


srrrse's avatar srrrse @without.boats
[ View ]

You can’t have scoped async tasks the way you could have scoped threads because the team decided not to have Leak with 1 month to the 1.0

1 replies 0 reposts 9 likes


srrrse's avatar srrrse @without.boats
[ View ]

For example, Pin is entirely because wanting to use stackless coroutines for async revealed a contradiction between mutable references and self-referential types. It would be much better to have Move, but 1.0 had already shipped.

2 replies 0 reposts 14 likes


srrrse's avatar srrrse @without.boats
[ View ]

One thing I love about the dumb critiques of async Rust I am doomed to read eternally is that they often say “Rust is great except that stupid overcomplicated async.” This is completely wrong: the rough aspects of async Rust are revealing the weaknesses of core Rust.

2 replies 0 reposts 33 likes


srrrse's avatar srrrse @without.boats
[ View ]

I mean it says everything about their worldview that they think “bullying an AI shill” and “burning down a data center” are comparable political actions.

0 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

I love going on Reddit and explaining Rust’s semantics to someone only for them to reply with a rant about how my work on Rust was trash apparently oblivious to the fact it was my work they’re being an idiot about.

2 replies 0 reposts 14 likes


srrrse's avatar srrrse @without.boats
[ View ]

Mainly overestimating the cost of things that Rust makes explicit and underestimating the cost of things that Rust lets you do implicitly. Refcounting vs Copy, heap vs stack, etc

0 replies 0 reposts 5 likes


srrrse's avatar srrrse @without.boats
[ View ]

If you have a real heap, it escapes to it just fine. Values in the heap do not need to be ‘static!

1 replies 0 reposts 4 likes


srrrse's avatar srrrse @without.boats
[ View ]

Exactly, which also won’t happen if you were to leak it on the heal

1 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

But types that can’t be forgotten wouldn’t really help here btw. Remember it’s the pointer you’re leaking, not the buffer. So the borrow ends via the leak and now you can mutate the buffer the kernel is supposed to be borrowing.

1 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

Yea so you could unlock a lot with types than can’t be leaked.

1 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

True about the difficulty of performing an ownership transfer without a heap. In Linux interfaces there tend to be dedicated ring buffers for these sorts of things, you don’t have this for embedded DMA?

1 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

*by io-uring I really mean “concurrent borrowing tasks;” if you use ownership instead of borrowing to model io-uring there’s no issue. I believe the same is true of DMA transfers.

1 replies 0 reposts 3 likes


srrrse's avatar srrrse @without.boats
[ View ]

To be clear there are three potential restrictions: Types which can’t be “forgotten” Types which can’t be “leaked” (or forgotten) Types which can’t be “dropped” (or leaked or forgotten) Each layer allows making more powerful guarantees. The second is needed for io-uring. Linear types are the third.

1 replies 0 reposts 3 likes


srrrse's avatar srrrse @without.boats
[ View ]

It definitely comes up. Probably mem::forget should not have been made safe just because leaks were safe. But personally I don’t see a lot of value in trying to make this distinction now; just go all the way and make types that can’t be leaked or forgotten.

1 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

Notes on ownership and substructural types without.boats/blog/ownersh...

2 replies 8 reposts 26 likes


srrrse's avatar srrrse @without.boats
[ View ]

There’s actually a really interesting dynamic at play here where Rust is usually so good that people just assume every decision in Rust was right and have learned certain beliefs from the compiler’s behavior (eg non-memcpy copies are slow). But Rust is sometimes wrong.

0 replies 0 reposts 18 likes


srrrse's avatar srrrse @without.boats
[ View ]

Haskell has both shared ownership and interior mutability, it just hides the mutability in C code behind the IO monad.

1 replies 0 reposts 1 likes


srrrse's avatar srrrse @without.boats
[ View ]

People don’t like when you say this, but I really believe a lot of the Rust internet community has silly cargo cult ideas about performance that aren’t based on experience or evidence. But the project has developed a culture of catering to baseless concerns.

2 replies 0 reposts 19 likes


srrrse's avatar srrrse @without.boats
[ View ]

Ocaml has both of these features

0 replies 0 reposts 0 likes


srrrse's avatar srrrse @without.boats
[ View ]

Rust would be such a more interesting language if it didn’t have interior mutability or shared ownership, but then it would still not have shipped because we don’t know how to write real programs without at least a bit of those things.

2 replies 0 reposts 13 likes


srrrse's avatar srrrse @without.boats
[ View ]

When I see a configuration language that advertises itself as “Turing complete” I feel like I am living in the fever dream of a madman

1 replies 1 reposts 7 likes


srrrse's avatar srrrse @without.boats
[ View ]

Of course. I’m just saying that being Turing incomplete is actually a positive feature. Turing completeness falls out of the other features people want languages to have, but is a negative consequence.

2 replies 0 reposts 3 likes


srrrse's avatar srrrse @without.boats
[ View ]

There’s really no reason it should be considered a positive feature that a programming language is Turing equivalent. If you could implement all of your desired programs without that, it would seem strictly better not to be.

3 replies 0 reposts 22 likes


srrrse's avatar srrrse @without.boats
[ View ]

They actually do pay for mediation. This person is actually great at their job but has no ability to fix structural problems in the way the project operates.

1 replies 0 reposts 5 likes


srrrse's avatar srrrse @without.boats
[ View ]

For this, which I completely stand by.

4 replies 1 reposts 43 likes


srrrse's avatar srrrse @without.boats
[ View ]

I am banned from the Rust async working group lol

1 replies 0 reposts 34 likes


srrrse's avatar srrrse @without.boats
[ View ]

Skill issue

1 replies 0 reposts 2 likes


srrrse's avatar srrrse @without.boats
[ View ]

Other people not understanding the things that are obvious to me personally may be one of the largest drags on global economic productivity.

1 replies 2 reposts 26 likes


srrrse's avatar srrrse @without.boats
[ View ]

i just want zoomers to know that computers were always the site of similar conflicts as now and viral millennial nostalgia for late 2000s web2.0 is cringe af

0 replies 0 reposts 12 likes


srrrse's avatar srrrse @without.boats
[ View ]

Similarly remarkable is how little anyone on earth understands about programming languages, even people who are paid to design them.

0 replies 1 reposts 11 likes


srrrse's avatar srrrse @without.boats
[ View ]

Thought I had a good type system to prevent deadlock for a week or two but then I realized that I was wrong

0 replies 0 reposts 9 likes


srrrse's avatar srrrse @without.boats
[ View ]

Sometimes it might be, too often it is just a poorly thought out mistake.

1 replies 0 reposts 0 likes


srrrse's avatar srrrse @without.boats
[ View ]

The universal sin of language designers is hubris. Everyone thinks they can just add a little coercion here or a fallback there. We all laugh at the most obviously flawed examples, but every single production language has some load bearing hacky choice like this causing huge problems somewhere.

1 replies 0 reposts 12 likes


srrrse's avatar srrrse @without.boats
[ View ]

excuse me

1 replies 0 reposts 8 likes