• TunaCowboy@lemmy.world
    link
    fedilink
    arrow-up
    197
    arrow-down
    1
    ·
    edit-2
    1 month ago

    What if I prefer this?

    #define CURLYOPENRIGHTCLOSEDLEFTBRACKET {
    #define CURLYOPENLEFTCLOSEDRIGHTBRACKET }
    #define CURVYOPENRIGHTCLOSEDLEFTBRACKET (
    #define CURVYOPENLEFTCLOSEDRIGHTBRACKET )
    #define PERIODWITHPERIODONTOP :
    #define COMMAWITHPERIODONTOP ;
    
    int main CURVYOPENRIGHTCLOSEDLEFTBRACKET CURVYOPENLEFTCLOSEDRIGHTBRACKET CURLYOPENRIGHTCLOSEDLEFTBRACKET
      if CURVYOPENRIGHTCLOSEDLEFTBRACKET 1 CURVYOPENLEFTCLOSEDRIGHTBRACKET CURLYOPENRIGHTCLOSEDLEFTBRACKET
        asm volatile CURVYOPENRIGHTCLOSEDLEFTBRACKET
          "mov $1, %%rax\n"
          "mov $1, %%rdi\n"
          "lea message(%%rip), %%rsi\n"
          "mov $4, %%edx\n"
          "syscall\n"
          PERIODWITHPERIODONTOP
          PERIODWITHPERIODONTOP
          PERIODWITHPERIODONTOP "%rax", "%rdi", "%rsi", "%rdx"
        CURVYOPENLEFTCLOSEDRIGHTBRACKET COMMAWITHPERIODONTOP
      CURLYOPENLEFTCLOSEDRIGHTBRACKET
      return 0 COMMAWITHPERIODONTOP
    CURLYOPENLEFTCLOSEDRIGHTBRACKET
    
    asm CURVYOPENRIGHTCLOSEDLEFTBRACKET ".section .data\n"
      "message: .ascii \"wut\\n\"\n"
      ".section .text\n" CURVYOPENLEFTCLOSEDRIGHTBRACKET COMMAWITHPERIODONTOP
    
  • mox@lemmy.sdf.org
    link
    fedilink
    arrow-up
    62
    arrow-down
    2
    ·
    edit-2
    1 month ago

    Growing up with C made me assume semicolons and braces were needed to avoid subtle bugs, but experience with more recent languages showed me that it’s possible to reliably parse the same semantic cues that humans use: indentation, parentheses, and other such context. (Perhaps this was less viable when C was invented, due to more constrained hardware.)

    I was skeptical at first, but in practice, I have never encountered a bug caused by this approach in Python, Nim, or any other language implementing it consistently, over the course of a decade or two using them. Meanwhile, I have seen more than a few bugs caused by brace and semicolon mistakes.

    So nowadays (outside of niche & domain-specific languages) I see braces and semicolons as little more than annoying noise and fuel for religious arguments.

    • leftzero@lemmynsfw.com
      link
      fedilink
      arrow-up
      11
      ·
      1 month ago

      As someone used to working in c# (and before that Java, C++, Visual Basic, and Pascal) I haven’t seen any brace or semicolon related errors since the days of Borland IDEs (any remotely self respecting IDE will highlight them and refuse to compile, these days), but working with Kotlin has shown me that I, at least, read code with semicolons slightly faster than code without.

      There’s a reason we use punctuation when writing, and the same applies to code.

      • ChickenLadyLovesLife@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        ·
        1 month ago

        Borland IDEs

        Ugh, you just gave me Turbo Basic flashbacks. My favorite thing was that variable names could be as long as you liked and mixed case, but the compiler only used the first two letters and case insensitive at that. So “BatShitCrazy” and “BALLPARKESTIMATE” actually referenced the same variable.

    • magic_lobster_party@kbin.run
      link
      fedilink
      arrow-up
      34
      ·
      1 month ago

      In Java it’s quite difficult to forget semicolon and still have a syntactically correct program.

      I think braces are incredibly important. With Python it can be confusing which indentation is correct when copying code between files. Different indentations can easily be still syntactically correct, but the outcome is vastly different. It’s often I have to double and triple check to verify I copied the code with correct indentation.

      • mox@lemmy.sdf.org
        link
        fedilink
        arrow-up
        5
        arrow-down
        1
        ·
        edit-2
        1 month ago

        It’s often I have to double and triple check to verify I copied the code with correct indentation.

        I vaguely remember facing that issue once or twice in the past, but certainly not often. It was because the pasted code was too long for its starting point to be easily found in my editor, even if I scrolled up a bit.

        If this happens to you often, I wonder: perhaps the code you maintain should be broken into smaller functions?

        If I was in that situation again, I think I would simply place a bookmark before pasting and then jump back to the bookmark to indent/dedent the pasted block appropriately.

        Edit: Come to think of it, I would have to check and correct it regardless of the language and braces, since confusingly indented code is unwelcome in my commits.

      • mkwt@lemmy.world
        link
        fedilink
        arrow-up
        12
        ·
        1 month ago

        When Fortran was created, each line was a separate punched card. The syntax made sense for that medium.

        C was setup from the start for use on teletypes with fancy line editors like ed.

      • mox@lemmy.sdf.org
        link
        fedilink
        arrow-up
        3
        ·
        edit-2
        1 month ago

        Haha… Yes, I’ve found yaml to be problematic in this area, too. Probably because it lacks the context cues and modularity of a programming language.

    • Ephera@lemmy.ml
      link
      fedilink
      arrow-up
      11
      ·
      1 month 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
        ·
        1 month 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
          ·
          1 month 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
        1 month 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).

    • GBU_28@lemm.ee
      link
      fedilink
      English
      arrow-up
      5
      ·
      edit-2
      1 month ago

      Plus any decent editor catches when lines are unreachable or in violation due to misformatting.

      If not that, which seems unlikely, your unit tests would

  • magic_lobster_party@kbin.run
    link
    fedilink
    arrow-up
    15
    arrow-down
    1
    ·
    edit-2
    1 month ago

    I’m more concerned about that poor stack with all those recursions.

    It’s also O(n^2) O(n!). I’m not sure what they’re trying to do, but I’m sure it can be done in O(n) (or at least polynomial).

    Reject.

  • VeganPizza69 Ⓥ@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    1 month ago

    why stop at curly brackets? Do all of them: parentheses, square brackets, angle brackets, and curly brackets. Also, strings should be liberated. Move all non-escaped quote characters to the end of the line too.

    • Caveman@lemmy.world
      link
      fedilink
      arrow-up
      11
      ·
      1 month ago

      Who’s going to write the extension so that they are all hidden and automatically inserted?

    • bss03@infosec.pub
      link
      fedilink
      arrow-up
      4
      ·
      1 month ago

      Might check out the Haskell layout rules.

      Basically, when you leave out the ‘{’ then Haskell uses your intendation to insert ‘;}’ on later lines between the leading whitespace and the first token.

      There some really old Haskell code out there that lines up the ‘{;}’ characters on the left under block-introduction keywords.

      • barsoap@lemm.ee
        link
        fedilink
        arrow-up
        4
        ·
        1 month ago

        It’s not just old Haskell code that’s how you write Haskell if you want explicit braces. Well, mostly generate, but it’s still the idiomatic formatting (and when you generate you always generate braces because it’s easy to get layout subtly wrong when generating).

        Haskell also does the whole

        data Foo = Bar
                 | Baz
                 | Quux
        
        foo = [ Bar
              , Baz
              , Quux
              ]
        

        thing, makes sense to apply it to braces especially as they’re seen only very rarely. Single-line, yes, but not multi-line.

    • VonReposti@feddit.dk
      link
      fedilink
      arrow-up
      12
      ·
      edit-2
      1 month ago

      I think you’ll like Ruby. It has mostly done away with braces and code blocks end with end, e.g.

      def create
        unless admin redirect_to new_session_path and return
        
        @product = Product.new product_params
      
        if @product.save
          flash[:success] = "New product has been created!"
          redirect_to edit_product_path(@product) and return
        else
          flash[:error] = "Something went wrong!
          render :new
        end
      end
      

      This is working code that I simplified a bit from an old project of mine.

      • barsoap@lemm.ee
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        1 month ago

        That’s just Algol instead of B. Most languages use the one or the other, then there’s sexpr-based languages (lisp, scheme), lua (technically Algol but not needing semicolons while also not needing newlines so it’s definitely special), and layout syntax (Haskell, or, if you want a bad implementation, python).

      • Caveman@lemmy.world
        link
        fedilink
        arrow-up
        11
        ·
        1 month ago

        Ruby syntax is nice although I prefer python way of enforcing indentation instead of adding "end"s. Personally I just want a statically typed language with enforced indent as syntax.

        • VonReposti@feddit.dk
          link
          fedilink
          arrow-up
          7
          ·
          1 month ago

          Funny, the forced indentation is what I hate about Python. If you think a missing semicolon can be hard to catch, don’t ever think about a missing whitespace :p

          The end keyword really isn’t a big deal for me. I find it to be a good way to easily spot the end of a method. But if you wouldn’t like it I’d still find it a good compromise to avoid syntax issues due to whitespace.

          • hglman@lemmy.ml
            link
            fedilink
            English
            arrow-up
            6
            arrow-down
            1
            ·
            1 month ago

            i can count on one hand how many times ive had white space issues in 15 years of using python. its just not an issue

            • 0ops@lemm.ee
              link
              fedilink
              arrow-up
              3
              ·
              1 month ago

              Same and agreed, especially if you keep your functions small and focused as you should. 3-5 indents is nbd to keep track of, and if you need more than that… No you don’t, refactor.

              I’ve had way more hangups with brackets then indentation, personally, not that either is a super frequent issue, but I’m indenting anyway, so brackets are redundant and just another thing I have to keep track of