kogasa

joined 2 years ago
[–] kogasa@programming.dev 10 points 5 months ago (3 children)

Content of the image is unrelated to this post FYI

[–] kogasa@programming.dev -1 points 5 months ago (1 children)

Wayland support for multi-monitor configurations is better than X11. Whatever performance degradation you claim to experience is also a "you" thing, not a "Wayland" thing. There's an underlying issue with your setup.

[–] kogasa@programming.dev 5 points 5 months ago

Stokes' theorem tattoo would go hard

[–] kogasa@programming.dev 5 points 5 months ago (3 children)

$5

it's a potato

[–] kogasa@programming.dev 3 points 5 months ago

Time... travel?

[–] kogasa@programming.dev 4 points 5 months ago (2 children)

Uhh, yeah.

Maybe it's the 5G.

[–] kogasa@programming.dev 6 points 5 months ago (4 children)

Neat, I do have them. It's probably because most people have a lot of subtle freckles everywhere and any 3 dots forms a triangle or something.

[–] kogasa@programming.dev 13 points 5 months ago

Capitalizing on a highly marketable hype bubble because the technology is specifically designed to deceive people into thinking it's more capable than it is

[–] kogasa@programming.dev 1 points 5 months ago

What I described isn't necessarily functional. This is just a principle for ensuring objects represent clear and well-defined contracts. The idea is that to mutate something, you should own it; that means interfaces / public APIs, which can be called externally, should take immutable arguments. You can still mutate instance members internally because those are owned by the instance. If mutation is really necessary between two objects then it should be coordinated by an object owning them both.

[–] kogasa@programming.dev 2 points 5 months ago* (last edited 5 months ago) (2 children)

That's a footgun sure but at least you can avoid it once you're aware of the problem.

I never write function signatures with mutable interfaces. It's always IEnumerable, IReadOnlyCollection, or IReadOnlyList; otherwise, use a concrete type. The latter is typical for private/protected methods that are called with instance members of a concrete type rather than public interfaces. If you want to mutate an object, you should own it. Public methods are invoked with data not owned by the instance.

For example, a lot of extension methods in LINQ have a signature IEnumerable --> IEnumerable, and internally the first thing they do is call .ToList(). The interface makes minimal assumptions about the input data, then puts it into a concrete type you can manipulate efficiently. You can similarly define a method for IReadOnlyList and explicitly make it mutable via .ToList(), rather than use IList and check .IsReadOnly. Both ensure correctness but the former does it at the type level, at design time, instead of relying on runtime checks.

C# is old and full of oldness. But it's also an excellent language that can be written beautifully if you know how. And there's lots of great code to learn from in the open-source dotnet core runtime repo and related projects.

[–] kogasa@programming.dev 6 points 5 months ago

The hot dog says "served with fried potatoes" at least. If the burger doesn't come with fries that's criminal. How can you serve a burger without fries

[–] kogasa@programming.dev 8 points 5 months ago
view more: ‹ prev next ›