Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

In Python the standard library is fairly easily traversed and understood and if there's a better way of doing something it's usually linked I think. In C++ we have.. this..

https://en.cppreference.com/w/cpp/algorithm/transform_reduce



Python's standard library includes many modules for specialised applications and yet it's surprisingly lacking in fundamental data structures and algorithms. Personally I think that's the wrong way round. Simple things like building dicts from different data structures or working with optional values that can be something or None just aren't there and you always seem to end up with some kind of utils.py full of hand-written functions to do these things that everyone writes again every time when they would have been either built into the syntax or a one-liner using the standard library in some other languages.

I agree that the C++ example is (one reason) why modern C++ has jumped the shark.


That example is not how C++ is used. It would not pass code review.


Why is code that wouldn't pass code review part of the language documentation?


Why are there falsehoods in Wikipedia?


Because it's written by random people who may or may not know the topic well. How does that apply?


I know supposedly "harder to learn" languages (i.e., functional languages), but my god does that example and C++ look impenetrable.


That is not idiomatic C++. The author is showing off esoterica.


It's not? This is literally the function that I found I should use when I wanted to fold over a list I had. What would you recommend I use?


The library function is fine, although the long name is unfortunate. The apparatus around applying it, in the example, is aggressively weird.


I agree that the example is crazy. But the function is not fine, it's a testament to how unhinged the C++ standards committee is. Its existence is proof that the problems of C++ are not just with its history, but that it is an ongoing snowball of incompetence and bad decisions.


It is hard to know what you are talking about. It applies linear operators to an input sequence, defaulting to + and x, or whatever you specify. It is like inner_product, but sequence order is not specified.

There is a "range" version in C++20 that in use looks more like in other languages. (It is technically C++23, but appears in libraries shipped with C++20.)


It seems like a small thing, but everything about it is just slightly wrong. That it's called `transform_reduce` and not just `reduce`. The fact that it was in C++17 alongside a function called `reduce` that's basically useless. Why was it not in C++14? Why was it not in C++11? Why was it not in C++03?

That in 2017 the C++ standard committee was still introducing misdesigned cruft like std::reduce to the language says everything you need to be about C++, it's a clusterfuck.


Thanks for the heads up. From the outside looking in, my perception of the difficulty of learning C++ is knowing what is idiomatic or not, with the understanding that that differs depending on who you work for and with.


It is the same as in other languages: you do the simplest thing that gets the job done. Loops, particularly C-style "for" loops, often do not count as simple, despite their familiarity: std:: algorithms leave less scope for error.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: