
A Perspective on C++ Standardization in 2018 - ingve
https://thephd.github.io/perspective-standardization-in-2018
======
lasagnaphil
The problem is that C++ is already too much bloated (in its complex rules and
the standard library) and some people (primarily gamedev) would want things
more to be removed, changed, and simplified rather than continuously added to
the pile. But the philosophy of C++ standards development was always about
adding new things while maintaining backward compatibility. So even if the
gamedev people ask the committee to change its philosophy and remove the
bloat, I feel that it would only result in tribal wars between developers and
not constructive change.

So right now there are two kinds of gamedev: the ones who would suck it up and
just use C++ (although not the modern one), or the ones who move to greener
pastures. I've heard some gamedev people are moving to Rust (although having
the potential to rival C++ in complexity, is nicer because of its fresher
base). And Jonathan Blow is currently creating Jai, so maybe that could be a
hope of light for gamedev people...

~~~
stinos
_So right now there are two kinds of gamedev: the ones who would suck it up
and just use C++ (although not the modern one)_

Why can't there be a third kind: the ones who suck it up and just use C++
including modern features? (honest question: I don't know anything at all
about 'gamedev')

~~~
lasagnaphil
Using modern C++ with STL in gamedev is quite difficult because it results in
atrocious compile times and slow debug build performance (For making a game,
iteration speed and debuggability can be pretty important.) Also if you want
to develop for consoles there are some limitations: most notably you are
forbidden to use exceptions, and the platform's compiler usually doesn't even
support the latest C++ standard...

That said, I think a third kind might also exist, although rare for AAA
studios and more common with mid-size/indie game developers...

~~~
Negitivefrags
The compiler for Xbox one is MSVC which supports modern c++ quite quickly, and
the compiler for PS4 is based on Clang which also supports modern c++ very
quickly.

Exceptions are supported and we use them for any non-gameplay code paths. That
is to say, you can and should use exceptions for all loading/initialisation
paths unless they are during actual gameplay.

This ends up feeling quite natural as that is mostly what exceptions are good
for, and honestly, they would practically never fire in a non-development
scenario because they are almost always some kind of error in data files.

------
merlincorey
A very thorough breakdown of the trials and tribulations of getting things
through the C++ Standardization Committee.

The article leaves us with the advice that if we care what goes into C++,
then, whether we like it or not, we'll need to get involved somehow.

This could mean joining things fully, or just communicating your needs to
existing members who are aligned with you in some fashion.

Sadly, I don't think we'll see much of an uptick in C++ Standards
participation in relation to C++ standards complaints.

------
otabdeveloper1

      > Use C++98
      > Complain it's too simple to be expressive.
      > Get C++17
      > Complain it's too expressive to be simple.
    

Sometimes I think the real goal behind these complaints is not learning
anything new or programming anything interesting.

~~~
mschuetz
Oh I absolutely love C++11, 14 and 17. It's just that there are always some
really dumb parts that are shipped together with the good parts. Like
mandatory begin and end iterators for list comprehension, iota, unreadable
syntax of C++20 ranges, etc.

------
chris_wot
What, precisely, are the warts that folks want to get rid of in C++ but
cannot?

~~~
Ace17
The preprocessor: Bjarne Stroustrup has been willing to get rid of it for a
long time. C++20 modules are a step in this direction. However - as pointed
out by John Lakos - you still need macros to build zero-cost logging
facilities.

~~~
frabert
I don't think that's necessarily true, using constexpr facilities you could
make a function do nothing according to a compile-time variable value

~~~
xamolxix
Is IO allowed in constexpr functions?

~~~
justbuchanan
I don't think so, but for zero-cost logging you just need the conditional for
your branch to be constexpr. If the branch is known not to be taken at compile
time, the compiler can just throw it away.

Something like:

    
    
      void MyDebugLog(text) {
        if (<constepxr check if logging enabled>) {
          // actually log...
        }
      }

------
Santosh83
To what extent is the creator of C++ involved with its Standardization process
these days?

~~~
hvs
He's the Evolution Working Group Chair.
[https://isocpp.org/wiki/faq/wg21#bjarne-
stroustrup](https://isocpp.org/wiki/faq/wg21#bjarne-stroustrup)

~~~
johannkokos
And Chair of Direction Group in 2018. [http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2018/p093...](http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2018/p0939r0.pdf)

