Hello,

This is my first post to this Rust community and I am happy to introduce myself and discuss what I love about this language, but first a little about myself.

I’m Alice, Fluffy to most, and she/her are my pronouns. I’m from the UK. I got a little boy who love like crazy. I’m Autistic, suffer from cPTSD and I also 🩷 Rust!!

Rust I feel appeals to Autistic people because of it’s focus on accuracy and correctness. It’s a common feeling people have about the language. But as the type of person I am I love it.

I began learning it in 2023, before this I was using C++. Rust showed me the importance of error’s as values and helped improve the quality of my code.

Currently I’m writing a game-engine as a hobby. The game-engine is a work in progress (WIP) and I have only just begun it’s development. Since the game-engine will natively support various platforms. To ensure consistency I’m writing all the platform specific code manually and building my own custom standard library for my engine, loosely based on the actual Rust standard library.

Right now I have the code in place to create/remove directories and to create, delete, write, read and set file pointer location. Convert UTF8 to UTF16 and output to the console in Unicode (Windows C API uses UTF16) and heap functions to get the process heap and create and delete memory dynamically.

Next will be the ‘config.json’ for which Serde will be used. Then the logger, and so on.

So it is a WIP but it’s fun and given my conditions allows me to do what I love, writing Rust code.

Thanks for reading!!

Alice 🏳️‍⚧️

  • ex_06@slrpnk.net
    link
    fedilink
    arrow-up
    5
    arrow-down
    3
    ·
    23 hours ago

    I’ll never understand how the rust community loves TOML (like me) but also loves Rust syntax (totally not like me)

    I feel like they are opposite: rust syntax is full of symbols, toml is super minimal and square parentheses are just less “noisy” than curly ones…

    • Ephera@lemmy.ml
      link
      fedilink
      English
      arrow-up
      4
      ·
      16 hours ago

      Personally, I just think the amount (and use of) symbols needs to match the semantic complexity.
      With spoken language, a few dots and commas generally suffice.
      With programming languages, I do want to see scopes and whatnot, so I like having braces in place, for example. Something like Python largely turns to word soup in my brain.
      With a configuration language, the complexity is almost even simpler than a spoken language, so I really don’t need much in terms of symbols.

      JSON has a mismatch for use in configuration. The keys in a object don’t need to be quoted. The commas after each¹ line in an object really aren’t necessary when pretty-printed. And well, JSON not having comments also kind of disqualifies it.

      Having said that, not every symbol has to be my brain’s favorite thing. I don’t particularly care for having each line terminated with a semi-colon. But I do believe that Rust is able to generated such excellent error messages, because the semicolons make it very clear where the statement ends, so I don’t mind putting it down.

      ¹) Don’t add a comma after the last line, though, or you’ll go to JSON jail.

      • ex_06@slrpnk.net
        link
        fedilink
        English
        arrow-up
        1
        ·
        12 hours ago

        just to be clear, i talked about ‘‘symbols’’ and not syntax because i understand that the expressiveness is a feature not an opinion in rust

        but having {} as code blocks instead of keywords is a choice, right?

        also the old thing that on non us keyboard { is harder than [ or ( and that it was an old choice dictated by the keyboards used when making unix or c i guess

        i don’t mind syntax per se :)

      • sugar_in_your_tea@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        ·
        12 hours ago

        Something like Python largely turns to word soup in my brain.

        Really? I feel the opposite. I’d much rather have indentation enforced by the language than merely convention.

        That said, I prefer braces, mostly because it makes things like inline functions more reasonable (the lambda syntax sucks IMO), and my editor does a great job matching on braces.

        JSON has a mismatch for use in configuration. The keys in a object don’t need to be quoted.

        The stupidest thing IMO is that JSON came from JavaScript, but it loses the flexibility of JavaScript. The quotes thing is acceptable IMO since it allows for flexibility in keys (e.g. you can have a URL as a key), but these aren’t:

        • comments - why don’t just let implementations not propagate them?
        • trailing commas - should be optional or required, not forbidden
        • NaN and Infinity - valid floating point numbers, so why are they forbidden?

        I don’t particularly care for having each line terminated with a semi-colon

        I love that semicolons mean something in Rust. Since pretty much everything is an expression, you only need a semicolon to turn it into a statement. That’s really nice!

        I don’t think it has anything to do with error messages though, plenty of languages do that well without it.

        • Ephera@lemmy.ml
          link
          fedilink
          English
          arrow-up
          1
          ·
          11 hours ago

          Really? I feel the opposite. I’d much rather have indentation enforced by the language than merely convention.

          Well, I don’t have a problem with incorrect indentation. As in, the people I work with indent their code correctly, so I don’t need enforcement. If you do need enforcement, you can also throw an autoformatter onto a braced language and it’ll be able figure it out.

          But yeah, to me it’s rather that the additional visual cue of indentation + braces helps me a lot. I check the scope of things quite often. If I need to guestimate whether one line has a different indentation than another, that just takes longer and I’ll misread it more often.

          But well, in that vein, I also like braces, because I like to use explicit scopes. If I construct a more complex variable which needs intermediate variables, then I’ll isolate the construction process into a separate scope, so that folks reading the code know for certain that these variables will not be used further down. It’s kind of like the isolation of a function, except you don’t explicitly pass things in.

          The quotes thing is acceptable IMO since it allows for flexibility in keys (e.g. you can have a URL as a key)

          For serializing data, absolutely. But no one in their right mind would use a URL for the name of a configuration field. 🙃

          And I can kind of understand them disallowing comments, ever since I saw an XML file which had data encoded into comments. Not any XML file, but one of the most important XML formats in a larger company. Which, I guess, is why they were scared of adding more nodes, in case any applications wouldn’t be able to handle that.
          But yeah, that is again assuming JSON to be used for serializing data, not for configuration. The two use-case are just kind of at odds.

          I don’t think it has anything to do with error messages though, plenty of languages do that well without it.

          Well, I don’t think it’s impossible to solve it without semicolons, but I do think that it makes it harder. And if it’s harder, it will be solved later, which can result in a culture of people not caring for readable errors. And that is then really hard to undo.

          • sugar_in_your_tea@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            ·
            10 hours ago

            autoformatter

            My point was hypothetical. The goal is consistent formatting. Python enforces that at a language level, which eliminates a lot of issues from C style languages, like Apple’s infamous goto fail, which was a block scope issue:

            if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
                goto fail;
                goto fail;
            

            In Python, such ambiguity is impossible.

            I like to use explicit scopes

            As do I, largely because I can do things like if (condition) { fn(); } else { fn2(); } in one line without using a ternary. I especially like Rust’s blocks as expressions (let x = if condition { y } else { z }; ), but for other reasons. I hate ternaries, so maybe that’s why.

            But I find Python highly readable, which is why I was surprised.

            folks reading the code know for certain that these variables will not be used further down

            That’s a separate issue though. In Python, you don’t have block scope, but that’s not a syntax limitation, but a language choice.

            For serializing data, absolutely. But no one in their right mind would use a URL for the name of a configuration field.

            Which is why you use a data format for data and a config format for configs. JSON is fine for data, and not fine for configs.

            JSON doesn’t have comments because it’s a data format. But since it’s also used for configs (which it shouldn’t), it should support comments and trailing commas at minimum.

            Just use a config format for config, like TOML.

      • ex_06@slrpnk.net
        link
        fedilink
        arrow-up
        1
        ·
        23 hours ago

        Are you talking about rust or toml? Because if rust, just out of curiosity, would you still like it with keywords instead of symbols?

        • sugar_in_your_tea@sh.itjust.works
          link
          fedilink
          arrow-up
          2
          ·
          12 hours ago

          Rust has very few symbols, especially compared to pre-1.0 when they had ~ (box?) and @ (GC?).

          Symbols in modern Rust are pretty reasonable IMO, but maybe that’s just stockholm syndrome.

            • sugar_in_your_tea@sh.itjust.works
              link
              fedilink
              arrow-up
              1
              ·
              edit-2
              7 hours ago

              Idk, && and || are pretty universally common, so I highly doubt they trip anyone up.

              :: is a little odd, but at least it’s limited to imports. Having it be . makes it a little ambiguous when you see x.y as to whether x is a module or an instance. But it’s absolutely fine in other languages, so that’s not a hill I’m willing to die on.

              The turbofish is disgusting though. I prefer D’s template syntax: Type!A or Type!(A, B), though this conflicts with macros. If we have macros all use the same symbol (e.g. println#(...) instead of println!(...)), then we could use the ! instead of the turbofish. But that ship has sailed and it’s not clear if my bike shed is a better color.