• Ephera@lemmy.ml
    link
    fedilink
    arrow-up
    10
    ·
    5 months ago

    Well, Python kind of does the reverse of a semicolon: If you want to continue a statement over multiple lines, then you have to \
    escape it.
    Python also then tries to avoid multi-line statements for that reason, but yeah, in most other languages this would be equally as annoying as semicolons are.

    There are some languages which use neither, for example Scala, but I can at least say that while I consider the people behind Scala and Rust equally competent and the languages more or less equally modern, Rust just completely blew it out of the water in terms of error messages despite being much younger. (Not because Scala is bad, Rust is just incredibly good there.)

    And yeah, I’m suspecting that Rust using semicolons makes the difference there.
    While Scala will pretty much have to guess where a statement with compile error ends, Rust just knows it ends at most at the next semicolon.

    I will also say my experience is opposite of yours. I have managed multiple times to try to access a variable in Python, which wasn’t in scope anymore, because the indentation wasn’t enough of a visual cue to me.
    And in any modern language, missing/missplaced semicolons or braces are a compile error, with clear error message where it’s missing. I genuinely don’t even know how you’d get a bug out of that.

    • mox@lemmy.sdf.org
      link
      fedilink
      arrow-up
      6
      ·
      5 months ago

      Well, Python kind of does the reverse of a semicolon: If you want to continue a statement over multiple lines, then you have to \ escape it.

      That’s not true. Being within parentheses, brackets, quotes, etc. is enough for the parser to know you’re continuing. In practice, I find that context is already present in most cases.

      For the other cases, occasionally surrounding an expression in parentheses is easy enough. Long conditionals probably deserve parentheses anyway, for clarity.

      • Ephera@lemmy.ml
        link
        fedilink
        arrow-up
        2
        ·
        5 months ago

        Well, it mostly being already correct is what I meant with Python avoiding multi-line statements.

        In JVM languages, Rust etc., it’s for example popular to use Fluent Interfaces. These also reduce visual clutter and the number of variables in scope (and/or the need for mutability).

        I did not know about enclosing them with parenthesis, but apparently that works, too, as this library shows: https://pypi.org/project/fluentpy/

    • sparkle@lemm.ee
      link
      fedilink
      Cymraeg
      arrow-up
      2
      ·
      edit-2
      5 months ago

      I am a Scala and Rust fan. I can corroborate what you said

      The part about no semicolons/curly braces I like in Scala is that I can write a function and it’ll look virtually indistinguishable from a regular ol variable. Functions become much less of a ritual and integrate more nicely with the rest of the code. Other than that though, Rust definitely wins out because of the curly braces & semicolons. I use curly braces in most situations in Scala where I’d normally use them in Rust, and I would use semicolons everywhere in Scala if it weren’t considered unidiomatic. Whitespace-significant syntax is just really annoying to deal with. Using Python or even maybe F# makes me want to die because I keep accidentally missing an indent somewhere or indenting too much somewhere else or using the wrong kind of whitespace and the entire program implodes. At least Scala and Kotlin keep it sane

      Also it’s just way harder to visually organize in whitespace based languages. You basically have to do a bunch of magic tricks to make the code look slightly different in a specific scenario than what the language wants you to. Rust allows you to actually visually organize your code easily while also having a strong style rules which you shouldn’t stray too far from (or else the compiler will yell at you).