Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright 2014 The Chromium Authors. All rights reserved. | 3 Copyright 2014 The Chromium Authors. All rights reserved. |
| 4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
| 5 found in the LICENSE file. | 5 found in the LICENSE file. |
| 6 --> | 6 --> |
| 7 <html> | 7 <html> |
| 8 <head> | 8 <head> |
| 9 <meta charset="utf-8"> | 9 <meta charset="utf-8"> |
| 10 <title>C++11 use in Chromium</title> | 10 <title>C++11 use in Chromium</title> |
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 541 | 541 |
| 542 <tr> | 542 <tr> |
| 543 <td>UTF-8, UTF-16, UTF-32 String Literals</td> | 543 <td>UTF-8, UTF-16, UTF-32 String Literals</td> |
| 544 <td><code>u8"<i>string</i>", u"<i>string</i>", U"<i>str ing</i>"</code></td> | 544 <td><code>u8"<i>string</i>", u"<i>string</i>", U"<i>str ing</i>"</code></td> |
| 545 <td>Enforces UTF-8, UTF-16, UTF-32 encoding on all string literals</td> | 545 <td>Enforces UTF-8, UTF-16, UTF-32 encoding on all string literals</td> |
| 546 <td><a href="http://en.cppreference.com/w/cpp/language/string_literal"> | 546 <td><a href="http://en.cppreference.com/w/cpp/language/string_literal"> |
| 547 string literal</a></td> | 547 string literal</a></td> |
| 548 <td>Does not yet work in MSVS2013. Reevaluate once it does. <a href="https://gro ups.google.com/a/chromium.org/forum/#!topic/chromium-dev/gcoUbcjfsII">Discussion thread</a></td> | 548 <td>Does not yet work in MSVS2013. Reevaluate once it does. <a href="https://gro ups.google.com/a/chromium.org/forum/#!topic/chromium-dev/gcoUbcjfsII">Discussion thread</a></td> |
| 549 </tr> | 549 </tr> |
| 550 | 550 |
| 551 <tr> | |
| 552 <td>Ref-qualified Member Functions</td> | |
| 553 <td><code>class T {<br/> void f() & {}<br/> void f() && {} <br/>};<br/>t.f(); // first<br/>T().f(); // second<br/>std::move(t).f(); // sec ond</code></td> | |
| 554 <td>Allows class member functions to only bind to |this| as an rvalue or lvalue. </td> | |
| 555 <td><a href="http://en.cppreference.com/w/cpp/language/member_functions"> | |
| 556 Member functions</a></td> | |
| 557 <td>Banned in the google3 C++11 library style guide. Banned in Chromium except b y explicit approval.</td> | |
|
Nico
2016/01/07 22:40:36
Can you add a Discussion thread link here?
jbroman
2016/01/07 23:26:32
Done.
| |
| 558 </tr> | |
| 559 | |
| 551 </tbody> | 560 </tbody> |
| 552 </table> | 561 </table> |
| 553 | 562 |
| 554 <h3 id="blacklist_stdlib"><a name="library-blacklist"></a>C++11 Banned Library F eatures</h3> | 563 <h3 id="blacklist_stdlib"><a name="library-blacklist"></a>C++11 Banned Library F eatures</h3> |
| 555 | 564 |
| 556 <p>This section lists C++11 library features that are not allowed in the Chromiu m codebase.</p> | 565 <p>This section lists C++11 library features that are not allowed in the Chromiu m codebase.</p> |
| 557 | 566 |
| 558 <table id="blacklist_lib_list" class="unlined striped"> | 567 <table id="blacklist_lib_list" class="unlined striped"> |
| 559 <tbody> | 568 <tbody> |
| 560 | 569 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 584 | 593 |
| 585 <tr> | 594 <tr> |
| 586 <td>Thread Library</td> | 595 <td>Thread Library</td> |
| 587 <td><code><thread> support, including <future>, | 596 <td><code><thread> support, including <future>, |
| 588 <mutex>, <condition_variable></code></td> | 597 <mutex>, <condition_variable></code></td> |
| 589 <td>Provides a standard mulitthreading library using <code>std::thread</code> an d associates</td> | 598 <td>Provides a standard mulitthreading library using <code>std::thread</code> an d associates</td> |
| 590 <td><a href="http://en.cppreference.com/w/cpp/thread">Thread support library</a> </td> | 599 <td><a href="http://en.cppreference.com/w/cpp/thread">Thread support library</a> </td> |
| 591 <td>C++11 has all kinds of classes for threads, mutexes, etc. Since we already h ave good code for this in <code>base/</code>, we should keep using the base clas ses, at least at first. <code>base::Thread</code> is tightly coupled to <code>Me ssageLoop</code> which would make it hard to replace. We should investigate usin g standard mutexes, or unique_lock, etc. to replace our locking/synchronization classes.</td> | 600 <td>C++11 has all kinds of classes for threads, mutexes, etc. Since we already h ave good code for this in <code>base/</code>, we should keep using the base clas ses, at least at first. <code>base::Thread</code> is tightly coupled to <code>Me ssageLoop</code> which would make it hard to replace. We should investigate usin g standard mutexes, or unique_lock, etc. to replace our locking/synchronization classes.</td> |
| 592 </tr> | 601 </tr> |
| 593 | 602 |
| 603 <tr> | |
| 604 <td>Atomics</td> | |
| 605 <td><code>std::atomic</code> and others in <code><atomic></code></td> | |
| 606 <td>Fine-grained atomic types and operations</td> | |
| 607 <td><a href="http://en.cppreference.com/w/cpp/atomic"><atomic></a></td> | |
| 608 <td>Use in tcmalloc has caused <a href="http://crbug.com/572525">performance reg ressions</a>. Banned until we understand this better. <a href="https://groups.go ogle.com/a/chromium.org/d/topic/cxx/Ej3RAiaI44s/discussion">Discussion Thread</a ></td> | |
| 609 </tr> | |
| 610 | |
| 611 <tr> | |
| 612 <td>Shared Pointers</td> | |
| 613 <td><code>std::shared_ptr</code></td> | |
| 614 <td>Allows shared ownership of a pointer through reference counts</td> | |
| 615 <td><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr">std::shared_ptr </a></td> | |
| 616 <td> | |
| 617 Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. | |
| 618 <a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart _Pointers">Ownership and Smart Pointers</a> | |
|
Nico
2016/01/07 22:40:36
Here too
jbroman
2016/01/07 23:26:32
Done.
| |
| 619 </td> | |
| 620 </tr> | |
| 621 | |
| 594 </tbody> | 622 </tbody> |
| 595 </table> | 623 </table> |
| 596 | 624 |
| 597 | 625 |
| 598 <h3 id="blacklist_review"><a name="core-review"></a>C++11 Features To Be Discuss ed</h3> | 626 <h3 id="blacklist_review"><a name="core-review"></a>C++11 Features To Be Discuss ed</h3> |
| 599 | 627 |
| 600 <p>The following C++ language features are currently disallowed. | 628 <p>The following C++ language features are currently disallowed. |
| 601 See the top of this page on how to propose moving a feature from this list | 629 See the top of this page on how to propose moving a feature from this list |
| 602 into the allowed or banned sections. Note that not all of these features | 630 into the allowed or banned sections. Note that not all of these features |
| 603 work in all our compilers yet.</p> | 631 work in all our compilers yet.</p> |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 637 | 665 |
| 638 <tr> | 666 <tr> |
| 639 <td>Inline Namespaces</td> | 667 <td>Inline Namespaces</td> |
| 640 <td><code>inline</code></td> | 668 <td><code>inline</code></td> |
| 641 <td>Allows better versioning of namespaces</td> | 669 <td>Allows better versioning of namespaces</td> |
| 642 <td><a href="http://en.cppreference.com/w/cpp/language/namespace">Namespaces</a> </td> | 670 <td><a href="http://en.cppreference.com/w/cpp/language/namespace">Namespaces</a> </td> |
| 643 <td>Unclear how it will work with components</td> | 671 <td>Unclear how it will work with components</td> |
| 644 </tr> | 672 </tr> |
| 645 | 673 |
| 646 <tr> | 674 <tr> |
| 647 <td>Ref-qualified Member Functions</td> | |
| 648 <td><code>class T {<br/> void f() & {}<br/> void f() && {} <br/>};<br/>t.f(); // first<br/>T().f(); // second<br/>std::move(t).f(); // sec ond</code></td> | |
| 649 <td>Allows class member functions to only bind to |this| as an rvalue or lvalue. </td> | |
| 650 <td><a href="http://en.cppreference.com/w/cpp/language/member_functions"> | |
| 651 Member functions</a></td> | |
| 652 <td>Banned in the google3 C++11 library style guide, but being considered for us e in bind/callback in google3 and the standard library.</td> | |
| 653 </tr> | |
| 654 | |
| 655 <tr> | |
| 656 <td>Union Class Members</td> | 675 <td>Union Class Members</td> |
| 657 <td><code>union <i>name</i> { <i>class</i> <i>var</i>}</code></td> | 676 <td><code>union <i>name</i> { <i>class</i> <i>var</i>}</code></td> |
| 658 <td>Allows class type members</td> | 677 <td>Allows class type members</td> |
| 659 <td><a href="http://en.cppreference.com/w/cpp/language/union"> | 678 <td><a href="http://en.cppreference.com/w/cpp/language/union"> |
| 660 Union declarations</a></td> | 679 Union declarations</a></td> |
| 661 <td></td> | 680 <td></td> |
| 662 </tr> | 681 </tr> |
| 663 | 682 |
| 664 <tr> | 683 <tr> |
| 665 <td>User-Defined Literals</td> | 684 <td>User-Defined Literals</td> |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 717 <tr> | 736 <tr> |
| 718 <td>Allocator Traits</td> | 737 <td>Allocator Traits</td> |
| 719 <td><code>std::allocator_traits</code></td> | 738 <td><code>std::allocator_traits</code></td> |
| 720 <td>Provides an interface for accessing custom allocators</td> | 739 <td>Provides an interface for accessing custom allocators</td> |
| 721 <td><a href="http://en.cppreference.com/w/cpp/memory/allocator_traits"> | 740 <td><a href="http://en.cppreference.com/w/cpp/memory/allocator_traits"> |
| 722 std::allocator_traits</a></td> | 741 std::allocator_traits</a></td> |
| 723 <td>Usage should be rare.</td> | 742 <td>Usage should be rare.</td> |
| 724 </tr> | 743 </tr> |
| 725 | 744 |
| 726 <tr> | 745 <tr> |
| 727 <td>Atomics</td> | |
| 728 <td><code>std::atomic</code> and others in <code><atomic></code></td> | |
| 729 <td>Fine-grained atomic types and operations</td> | |
| 730 <td><a href="http://en.cppreference.com/w/cpp/atomic"><atomic></a></td> | |
| 731 <td></td> | |
| 732 </tr> | |
| 733 | |
| 734 <tr> | |
| 735 <td>Bind Operations</td> | 746 <td>Bind Operations</td> |
| 736 <td><code>std::bind(<i>function</i>, <i>args</i>, ...)</code></td> | 747 <td><code>std::bind(<i>function</i>, <i>args</i>, ...)</code></td> |
| 737 <td>Declares a function object bound to certain arguments</td> | 748 <td>Declares a function object bound to certain arguments</td> |
| 738 <td>TODO: documentation link</td> | 749 <td>TODO: documentation link</td> |
| 739 <td></td> | 750 <td></td> |
| 740 </tr> | 751 </tr> |
| 741 | 752 |
| 742 <tr> | 753 <tr> |
| 743 <td>C Floating-Point Environment</td> | 754 <td>C Floating-Point Environment</td> |
| 744 <td><code><cfenv></code>, <code><fenv.h></code></td> | 755 <td><code><cfenv></code>, <code><fenv.h></code></td> |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 916 <td><code>std::reference_wrapper</code> and | 927 <td><code>std::reference_wrapper</code> and |
| 917 <code>std::ref()</code>, <code>std::cref()</code></td> | 928 <code>std::ref()</code>, <code>std::cref()</code></td> |
| 918 <td>Allows you to wrap a reference within a standard | 929 <td>Allows you to wrap a reference within a standard |
| 919 object (and use those within containers)</td> | 930 object (and use those within containers)</td> |
| 920 <td><a href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum= 217"> | 931 <td><a href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum= 217"> |
| 921 Reference Wrappers</a></td> | 932 Reference Wrappers</a></td> |
| 922 <td></td> | 933 <td></td> |
| 923 </tr> | 934 </tr> |
| 924 | 935 |
| 925 <tr> | 936 <tr> |
| 926 <td>Shared Pointers</td> | |
| 927 <td><code>std::shared_ptr</code></td> | |
| 928 <td>Allows shared ownership of a pointer through reference counts</td> | |
| 929 <td><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr">std::shared_ptr </a></td> | |
| 930 <td><a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Sma rt_Pointers"> | |
| 931 Ownership and Smart Pointers</a></td> | |
| 932 </tr> | |
| 933 | |
| 934 <tr> | |
| 935 <td>Soft Program Exits</td> | 937 <td>Soft Program Exits</td> |
| 936 <td><code>std::at_quick_exit()</code> | 938 <td><code>std::at_quick_exit()</code> |
| 937 and <code>std::quick_exit()</code></td> | 939 and <code>std::quick_exit()</code></td> |
| 938 <td>Allows registration of functions to be called upon exit, | 940 <td>Allows registration of functions to be called upon exit, |
| 939 allowing cleaner program exit than <code>abort()</code> or | 941 allowing cleaner program exit than <code>abort()</code> or |
| 940 <code>exit</code></td> | 942 <code>exit</code></td> |
| 941 <td><a href="http://en.cppreference.com/w/cpp/utility/program/quick_exit"> | 943 <td><a href="http://en.cppreference.com/w/cpp/utility/program/quick_exit"> |
| 942 std:quick_exit</a></td> | 944 std:quick_exit</a></td> |
| 943 <td></td> | 945 <td></td> |
| 944 </tr> | 946 </tr> |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1089 C++ Style Guide</a>. However, may be useful for | 1091 C++ Style Guide</a>. However, may be useful for |
| 1090 consuming non-ASCII data.</td> | 1092 consuming non-ASCII data.</td> |
| 1091 </tr> | 1093 </tr> |
| 1092 | 1094 |
| 1093 </tbody> | 1095 </tbody> |
| 1094 </table> | 1096 </table> |
| 1095 | 1097 |
| 1096 </div> | 1098 </div> |
| 1097 </body> | 1099 </body> |
| 1098 </html> | 1100 </html> |
| OLD | NEW |