• 0 Posts
  • 1.09K Comments
Joined 2 years ago
cake
Cake day: June 22nd, 2023

help-circle

  • I recognise that different languages have different styles, strengths and idioms. One of my pain points is when people write every language as if it’s naughties java. Enough with the enterprise OoP crap.

    I’ve also learnt languages like Haskell to expand and challenge the way I think about software problems. I learnt a lot doing it. That doesn’t stop a lot of Haskell code looking like line noise to me because it over-uses symbols and it being close to impenetrable in a lot of cases when you read somebody else’s code.

    I think the aesthetics of Rust are the wrong side of the line. Not as bad as something like Haskell (or Perl), but still objectionable. Some things seem to be different even though there’s pre-existing notation. Things seem to be dense, magical, and for the compilers benefit over the readers (as an outsider).

    I’ve been learning Zig recently and the only notational aspect I struggled with was the pointer/slice notation as there’s 5 or 6 similar forms that mean fairly different things. It has other new concepts and idioms to learn, but on the whole it’s notation is fairly traditional. That has made reading code a lot more approachable (…which is a good thing because the documentation for some aspects sucks).




  • I think that’s a great set of criticisms.

    None of these are sins of Rust, …

    They might not be strictly language issues, but if they are symptomatic of idiomatic rust then they are “sins of rust”. Something about the language promotes writing it using these kinds of idioms.

    Just like French speakers don’t pronounce 80% of the written syllables because it’s impractical to speak fast with all of them…language features (or lack of them) drive how the language is used.

    (BTW the implicit return behaviour on a missing semicolon sounds like Chekhov’s footgun)












  • The problem is PRs / CI tooling. They treat a repo as an independent project, but…:

    • A change needs to be able to span multiple repos
    • …or you need a way of expressing dependencies between changes in multiple repos
    • …and you need to be able to block changes to dependencies that should be non-breaking but aren’t.

    Zuul CI solved a lot of these kind of problems for the Openstack project but I’ve personally found it a bitch to setup. Lots of good ideas in it though.