• @Croquette@sh.itjust.works
      link
      fedilink
      55 months ago

      I just learned that in Python, it’s fucking terrible. Python is a fucking mess and my next script will be in a different language.

        • @Croquette@sh.itjust.works
          link
          fedilink
          15 months ago

          I prefer strongly typed languages. Using bytes isn’t intuitive.

          Transforming certain data types into other data types is often not straightforward.

          The identation is the worst though. Let me format the code however I want.

      • qaz
        link
        fedilink
        English
        45 months ago

        Perhaps TS is not a terrible language for shell scripts after all

    • @Rednax@lemmy.world
      link
      fedilink
      15 months ago

      Considering std::cout should only directly be used when you are too lazy to place breakpoints, I totally get the decision to auto-flush.

    • @mmddmm@lemm.ee
      link
      fedilink
      365 months ago

      It’s a very C++ thing that the language developers saw the clusterfuck that is stream flushing on the kernel and decided that the right course of action was to create another fucking layer of hidden inconsistent flushing.

    • unalivejoy
      link
      fedilink
      English
      205 months ago

      Just because the box says something is flushable doesn’t mean you should flush it.

    • Arghblarg
      link
      fedilink
      15 months ago

      Bedeviled NXP/ARM SDK stdlib. Hate it, we need \n\r there. Why!!! What a PITA.

    • @edinbruh@feddit.it
      link
      fedilink
      55 months ago

      Unix needed only \n because it had complex drivers that could replace \n with whatever sequence of special characters the printer needed. Also, while carriage return is useful, they saw little use for line feed

      On dos (which was intended for less powerful hardware than unix) you had to actually use the correct sequence which often but not always was \r\n (because teleprinters used that and because it’s the “most correct” one).

      Now that teleprinters don’t exist, and complex drivers are not an issue for windows, and everyone prefers to have a single \n, windows still uses \r\n, for backward compatibility.

    • branch
      link
      fedilink
      25 months ago

      I haven’t looked at the code but I always assumed that println was a call to print with a new line added to the original input.
      Something like this:

      void print(String text) { ... }
      void println(String text) { this.print(text + '\n'); }
      
      • @Scoopta@programming.dev
        link
        fedilink
        25 months ago

        That is pretty much what it does except it doesn’t hardcode \n but instead uses the proper line ending for the platform it’s running on.

        • branch
          link
          fedilink
          15 months ago

          I haven’t worked with java for a couple of months now, currently working in Delphi, so could not remember the how else to do new line except backslash n on top of my head. :-)

  • palordrolap
    link
    fedilink
    25 months ago

    If endl is a function call and/or macro that magically knows the right line ending for whatever ultimately stores or reads the output stream, then, ugly though it is, endl is the right thing to use.

    If a language or compiler automatically “do(es) the right thing” with \n as well, then check your local style guide. Is this your code? Do what you will. Is this for your company? Better to check what’s acceptable.

    If you want to guarantee a Unix line ending use \012 instead. Or \cJ if your language is sufficiently warped.

    • pelya
      link
      fedilink
      45 months ago

      Ah don’t worry, if you do fopen(file, "w") on Windows and forget to use "wb" flag, it will automatically replace all your \n with \r\n when you do fwrite, then you will try to debug for half a day your corrupted jpeg file, which totally never happened to me because I’m an experienced C++ developer who can never make such a novice mistake.

  • Rikudou_Sage
    link
    fedilink
    55 months ago

    In PHP it exists as well. I try to use PHP_EOL but when I’m lazy I simply do “\n”.

    • The Ramen Dutchman
      link
      fedilink
      15 months ago

      For me the answer is “Building backend applications with it instead of CLI applications, like Lerdorf intended.”

      But also "\n" because it’s easier and PHP_EOL is just an alias for "\n"; it’s not even platform-dependent.

      • Rikudou_Sage
        link
        fedilink
        25 months ago

        PHP_EOL depends on your host system, it’s \r\n on Windows.

        I don’t really want to use what Lerdorf intended, PHP <= 4 was horrible, 5.x was mainly getting slowly rid of nonsense and with 7.x PHP started its slow path of redemption and entered its modern era.

        While Lerdorf’s vision was great at that time for its intended use case, I wouldn’t want to build anything serious in it.

        • The Ramen Dutchman
          link
          fedilink
          15 months ago

          It actually outputs "\n" on a Windows system, but modern Windows to recognise that as enough of a newline, nowadays.

          I don’t really want to use what Lerdorf intended, PHP <= 4 was horrible

          Actually a great point!

  • pelya
    link
    fedilink
    30
    edit-2
    5 months ago

    printf is superior and more concise, and snprintf is practically the only C string manipulation function that is not painful to use.

    Try to print a 32-bit unsigned int as hexadecimal number of exactly 8 digits, using cout. You can do std::hex and std::setw(8) and std::setfill('0') and don’t forget to use std::dec afterwards, or you can just, you know, printf("%08x") like a sane person.

    Just don’t forget to use -Werror=format but that is the default option on many compilers today.

    C++23 now includes std::print which is exactly like printf but better, so the whole argument is over.

    • I went digging in cppref at the format library bc I thought c++20 or c++23 added something cool.

      Found std::print and was about to reply to this comment to share it bc I thought it was interesting. Then I read the last sentence.

      Darn you and your predicting my every move /j

  • r00ty
    link
    fedilink
    35 months ago

    Maybe c# has similar. There’s \r\n or \n like c++ and Environment.NewLine.

    Probably it’s similar in that Environment.NewLine takes into account the operating system in use and I wonder if endl in c++ does the same thing?

    • @vithigar@lemmy.ca
      link
      fedilink
      45 months ago

      C# also has verbatim strings, in which you can just put a literal newline.

      string foo = @"This string 
      has a line break!";
      
  • @Oinks@lemmy.blahaj.zone
    link
    fedilink
    English
    23
    edit-2
    5 months ago

    I am very sorry to remind everyone about the existence of Visual Basic, but it has:

    • VbCrLf
    • VbNewLine
    • ControlChars.CrLf
    • ControlChars.NewLine
    • Environment.NewLine
    • Chr(13) & Chr(10)

    And I know what you’re asking: Yes, of course all of them have subtly different behavior, and some of them only work in VB.NET and not in classic VB or VBA.

    The only thing you can rely on is that “\r\n” doesn’t work.