Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Side by Side Diff: site/dev/contrib/c++11.md

Issue 1678673002: update C++11 doc (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 C++11 in Skia 1 C++11 in Skia
2 ============= 2 =============
3 3
4 Skia uses C++11. But as a library, we are technically limited by what our 4 Skia uses C++11. But as a library, we are technically limited by what our
5 clients support and what our build bots support. 5 clients support and what our build bots support.
6 6
7 Skia may also be limited by restrictions we choose put on ourselves. This 7 Skia may also be limited by restrictions we choose put on ourselves. This
8 document is not concerned with C++11 policy in Skia, only its technical 8 document is not concerned with C++11 policy in Skia, only its technical
9 feasibility. This is about what we can use, a superset of what we may use. 9 feasibility. This is about what we can use, a superset of what we may use.
10 10
11 The gist: 11 The gist:
12 12
13 - C++11 the language as supported by GCC 4.7 or later is probably usable. 13 - C++11 the language as supported by GCC 4.7 or later is pretty usable.
14 - The C++11 standard library can generally be used, with some teething.
14 - If you break a bot, that feature is not usable. 15 - If you break a bot, that feature is not usable.
15 - The C++11 standard library can't generally be used.
16 - Local statics are not thread safe. 16 - Local statics are not thread safe.
17 17
18 18
19 Clients 19 Clients
20 ------- 20 -------
21 21
22 The clients we pay most attention to are Chrome, Android, Mozilla, and a few 22 The clients we pay most attention to are Chrome, Android, Mozilla, and a few
23 internal Google projects. 23 internal Google projects.
24 24
25 Chrome builds with a recent Clang on Mac and Linux and with a recent MSVC on 25 Chrome builds with a recent Clang on Mac and Linux and with a recent MSVC on
26 Windows. These toolchains are new enough to not be the weak link to use any 26 Windows. These toolchains are new enough to not be the weak link to use any
27 C++11 language feature. But Chrome still supports Mac OS X 10.6, which does 27 C++11 language feature.
28 not ship with a C++11 standard library. So [Chrome has banned the use of the
29 C++11 standard library](http://chromium-cpp.appspot.com/). Some header-only
30 features are probably technically fine, but the Mac toolchain will prevent us
31 from even trying at compile time as long as we target 10.6 as our minimum API
32 level.
33 28
34 Chrome intentionally disables thread-safe initialization of static variables, 29 Chrome intentionally disables thread-safe initialization of static variables,
35 and MSVC doesn't support it at all, so we cannot rely on that. 30 so we cannot rely on that. Our bots disable this too, so keep an eye on TSAN.
36 31
37 Android builds with either a recent GCC or a recent Clang. They're generally 32 Android builds with either a somewhat aged GCC or a recent Clang. They're
38 not a weak link for C++11 language features. Android's C++ standard library 33 generally not a weak link for C++11 language features. Android's C++ standard
39 has always been a pain, but since we can't use it anyway (see Chrome), don't 34 library had historically been a pain, but seems to work fine these days.
40 worry about it.
41 35
42 Mozilla's current weak link is a minimum requirement of GCC 4.7. Most features 36 Mozilla's current weak link is a minimum requirement of GCC 4.7. Most features
43 marked in red on Mozilla's C++11 [feature 37 marked in red on Mozilla's C++11 [feature
44 matrix](https://developer.mozilla.org/en-US/docs/Using_CXX_in_Mozilla_code) are 38 matrix](https://developer.mozilla.org/en-US/docs/Using_CXX_in_Mozilla_code) are
45 marked that way because they arrived in GCC 4.8. Their minimum-supported Clang 39 marked that way because they arrived in GCC 4.8. Their minimum-supported Clang
46 and MSVC toolchains are great. They also appear to ban the C++ standard 40 and MSVC toolchains are pretty good, but MSVC 2013 will become the weak link soo n.
47 library.
48 41
49 Internal Google projects tend to support C++11 completely, including the 42 Internal Google projects tend to support C++11 completely, including the
50 full C++11 standard library. 43 full C++11 standard library.
51 44
52 45
53 Bots 46 Bots
54 ---- 47 ----
55 48
56 Most of our bots are pretty up-to-date: the Windows bots use MSVC 2013, the Mac 49 Most of our bots are pretty up-to-date: the Windows bots use MSVC 2013, the Mac
57 bots a recent Clang, and the Linux bots GCC 4.8 or a recent Clang. Our Android 50 bots a recent Clang, and the Linux bots GCC 4.8 or a recent Clang. Our Android
58 bots use a recent toolchain from Android (see above), and our Chrome bots use 51 bots use a recent toolchain from Android (see above), and our Chrome bots use
59 Chrome's toolchains (see above). I'm not exactly sure what our Chrome OS bots 52 Chrome's toolchains (see above). I'm not exactly sure what our Chrome OS bots
60 are using, but they've never been a problem. 53 are using. They're probably our weak link right now, though problems are rare.
61 54
62 I believe our bots' ability to use C++11 matches Mozilla's list nearly identical ly. 55 I believe our bots' ability to use C++11 matches Mozilla's list nearly identical ly.
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698