cppfront icon indicating copy to clipboard operation
cppfront copied to clipboard

[SUGGESTION] move away from `std::cout <<`

Open h-vetinari opened this issue 3 years ago • 1 comments

There's been a lot of work in C++20/C++23 around text handling, and formatting/printing in particular. From the goals laid out in the readme, the "feels like a new language" should IMO definitely apply to one of the cruftiest (again IMO) corners in common syntax (so common it's in the splash example...) - the overloaded bitshift and std:cout.

In other words, I think a better advertisement for cpp2 could be (using P2093; also matches import std; default):

main: () -> int = {
    print("Hello, {}!", "world");
}

rather than

main: () -> int = {
    std::cout << "hello world!";
}

In the broader scope, this would also need some decent string manipulation APIs (concatenation, slicing, etc.), which C++ is lacking quite a bit. Xref also #45

h-vetinari avatar Oct 22 '22 11:10 h-vetinari

I think part of the reason that this particular example was used is that it is the "classic" hello world from C++98, and shows that you can easily convert it to Cpp2, and also that compiling with import std; is faster than #include <iostreams> for the same program. So it's a good "conversion" story. I agree that your version is a good "next generation" example.

gregmarr avatar Oct 24 '22 15:10 gregmarr

Yes, I absolutely do love C++23 print and I considered showing it.

But:

  • none of the vendors implement it yet... here is a Godbolt link for std::print Hello world using "trunk/latest" for Gcc, Clang, and MSVC... as of today not one of them compiles it, though I hope this link should gradually show them supporting this in the future)
  • a major point of using the usual cout << "Hello"; example is to bold-underline-italic-double-underscore that this is C++, you can use the whole standard library and operator overloading etc.

I'm definitely watching it though, and when it's shipping I can start showing it. Also, as soon as the C++ vendors do implement it, it will work seamlessly in Cpp2 via cppfront. :)

Thanks!

hsutter avatar Nov 26 '22 02:11 hsutter