SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
GC in C++0x

  Aug. 8th 2010 / Reading session for GC book

  Yasutaka ATARASHI
  @yak_ex
Self introduction
 Name: Yasutaka ATARASHI
 Twitter ID: yak_ex
 Web: http://yak3.myhome.cx:8080/junks
  (written in Japanese)

 Main languages: C++ / Perl
 Currently, not coding in office
 Coding in programming competitions
  (TopCoder and Codeforces)
 Not familiar with GC
   Therefore, this slide may include errors :p
GC is widely spread
 Languages in Google Code Jam 2010 Qualifier

  1st   C++    4911 6th       Ruby        221
  2nd   Java   2762 7th       PHP         170
  3rd   Python 1459 8th       Perl        146
  4th   C       751 9th       Haskell     118
  5th   C#      648 10th      Pascal       95
GC is widely spread
 Languages in Google Code Jam 2010 Qualifier

  1st   C++    4911 6th       Ruby        221
  2nd   Java   2762 7th       PHP         170
  3rd   Python 1459 8th       Perl        146
  4th   C       751 9th       Haskell     118
  5th   C#      648 10th      Pascal       95
 Yellow means languages with GC
GC is widely spread
 Languages in Google Code Jam 2010 Qualifier

  1st   C++    4911 6th       Ruby        221
  2nd   Java   2762 7th       PHP         170
  3rd   Python 1459 8th       Perl        146
  4th   C       751 9th       Haskell     118
  5th   C#      648 10th      Pascal       95
 Yellow means languages with GC
 C++ is outlier: Widely used but without GC
GC is widely spread
 Languages in Google Code Jam 2010 Qualifier

  1st    C++    4911 6th        Ruby         221
  2nd    Java   2762 7th        PHP          170
  3rd    Python 1459 8th        Perl         146
  4th    C       751 9th        Haskell      118
  5th    C#      648 10th       Pascal        95
 Yellow means languages with GC
 C++ is outlier: Widely used but without GC
    However, C++ is the extreme multi-paradigm language.
     Finally, it has …
C++: The extreme multi-paradigm
language
 The next standard, aka C++0x, has

           Support for
       Garbage Collection
               and
Reachability-Based Leak Detection
C++: The extreme multi-paradigm
language
 The next standard, aka C++0x, has

  Minimal Support for
       Garbage Collection
               and
Reachability-Based Leak Detection
Minimal Support for GC (snip)
 Some concepts
   Traceable pointer object
   Safely-derived pointer (value)
 5 functions
   get_pointer_safety()
   (un)declare_no_pointers()
   (un)declare_reachable()
Some concepts (1)
 Traceable pointer object
   Pointer object, or
   Integer object whose size is enough to hold
     pointer, or
   A sequence of elements in an array of character
     type
     (Probably, strict aliasing rule restricts that they
     type is character type only)
  -> Object that implementation can recognize that it
     may have pointer value
  = Assuming the other area don’t have pointer value
Some concepts (2)
 Safely-derived pointer (value)
    The value returned by ::operator new (e.g. new T), or
    Operations on safely-derived pointer value, or
       Address taken on dereference (e.g. &*p)
       Well-defined pointer arithmetic (e.g. p+1)
       Well-defined pointer conversion
        (e.g. static_cast<void*>(p))
       reinterpret_cast between pointer and integer
        (e.g. reinterpret_cast<intptr_t>(p))
   -> Pointer value that implementation can trace that
       the area designated by the pointer is allocated
        by ::operator new and
       the pointer value is valid
Some concepts (3)
 Safely-derived pointer (value)
                             This is safely-derived pointer value

  T *p = new T;
  intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555
  a:
  T *q = reinterpret_cast<T*>(x ^ 0x555);
  T y = *q;

                       This is not safely-derived pointer value

                    This is NOT safely-derived pointer value, either!
                        The value is the same as p but determined
                        not by value but by process
Minimal Support for GC (snip)
 Some concepts
   Traceable pointer object
   Safely-derived pointer (value)
 5 functions
   get_pointer_safety()
   (un)declare_no_pointers()
   (un)declare_reachable()
Function: get_pointer_safety()
 Returns pointer-safety of the
  implementation
                 Behavior does not depend on whether the
   relaxed:     value is safely-derived pointer, like as C++03
                  • relaxed and preferred are implementation-
   preferred:      defined
                      • In the case of “preferred”, there may be
                        leak detector
                      • In VC2010, relaxed is always returned
                        and the other functions has no-effect.
   strict:      Undefined behavior when dereferencing
                 or deallocating via not safely-derived pointer
                 value which declare_reachable(), as
                 described later, is not called for.
Strict pointer safety
 Safely-derived pointer (value)
                             This is safely-derived pointer value

  T *p = new T;
  intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555
  a:
  T *q = reinterpret_cast<T*>(x ^ 0x555);
  T y = *q;

                       This is not safely-derived pointer value

                    This is NOT safely-derived pointer value, either!
   Undefined
                        The value is the same as p but determined
   behavior
                        not by value but by process
Function:
(un)declare_no_pointers()
 void declare_no_pointers(char *p,
  size_t n);
 void undeclare_no_pointers(char *p,
  size_t n);
 Declares or undeclares that the
  specified area does not have pointer
  value
-> Enable to restrict scan area by GC
Function: (un)declare_reachable
 void declare_reachable(void *p);
   Declare that object designated by safely-
     derived pointer value p is reachable
  -> Excludes the object from target of GC
 template<class T>
  T* undeclare_reachable(T *p);
   Returns safely-derived pointer value which is the
     same value as p. The object designated by p
     must be reachable.
  -> The object becomes target of GC again
    (NOTE: The return value is safely-derived so that
     the object is not GC-ed while the value is alive)
Usage of (un)declare_reachable()
 Why needed?                    This is safely-derived pointer value

    T *p = new T;
    intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555
    a:
    T *q = reinterpret_cast<T*>(x ^ 0x555);
    T y = *q;

                           This is not safely-derived pointer value

                        This is NOT safely-derived pointer value, either!
      Undefined
                            The value is the same as p but determined
      behavior
                            not by value but by process
A GC at label a might reclaim the object designated by p   ???
Usage of (un)declare_reachable()
 Why needed?                    This is safely-derived pointer value

    T *p = new T;
    intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555
    a:
    T *q = reinterpret_cast<T*>(x ^ 0x555);
    T y = *q;

                           This is not safely-derived pointer value

                        This is NOT safely-derived pointer value, either!
      Undefined
                            The value is the same as p but determined
      behavior
                            not by value but by process
A GC at label a might reclaim the object designated by p   Optimization
                                                           issue
Usage of (un)declare_reachable()
 Why needed?
    T *p = new T;                                          p is not used
    intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555     afterwards
    a:
    T *q = reinterpret_cast<T*>(x ^ 0x555);
    T y = *q;

     NOTE: p, x, q can be assigned to the same register     x is not used
     -> the value p does not exist anywhere at the label a afterwards
     -> the object designated by p (and q) can be collected
     by GC!!
     -> *q causes undefined behavior

A GC at label a might reclaim the object designated by p   Optimization
                                                           issue
Usage of (un)declare_reachable()
       Correct code in C++0x
*p is
reachable     T *p = new T;
=             declare_reachable(p); // Call before disguising
Ignored       intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555
by GC         a:
              // T z = *reinterpret_cast<T*>(x ^ 0x555); // Legal
              // Call undeclare_reachable() after disguising
              T *q = undeclare_reachable(reinterpret_cast<T*>(x ^ 0x555));
              T y = *q;
NOTE
- The same value called for declare_reachable is dereferencable even though it is not safely-derived.
- Argument of undeclare_reachable is not needed to be safely-derived, and must be reachable.
- Regarding declare_reachable, the problem is disguising pointer
   Considering functions separated at the a:, the same discussion is applicable w/o optimization.
Summary
 C++0x has minimal support for GC
   Concept: Safely-derived pointer
    = Valid pointer value which is target of GC
   5 new functions
 C++03 behavior is conformant in relaxed
  safety
   Unlikely to release strict-safety implementation
    immediately
 Code disguising pointer value needs
  modification by using
  declare_reachable() / undeclare_reachable()
Reference
 N2670: Minimal Support for Garbage
  Collection and Reachability-Based Leak
  Detection (revised)
  http://www.open-
  std.org/jtc1/sc22/wg21/docs/papers/2008/
  n2670.htm
 Garbage Collection in the Next C++
  Standard
  http://www.hpl.hp.com/techreports/2009/H
  PL-2009-360.pdf

Weitere ähnliche Inhalte

Was ist angesagt?

C++ Function
C++ FunctionC++ Function
C++ Function
Hajar
 

Was ist angesagt? (14)

C++ Function
C++ FunctionC++ Function
C++ Function
 
C++ functions presentation by DHEERAJ KATARIA
C++ functions presentation by DHEERAJ KATARIAC++ functions presentation by DHEERAJ KATARIA
C++ functions presentation by DHEERAJ KATARIA
 
CS106 Lab 9 - 1D array
CS106 Lab 9 - 1D arrayCS106 Lab 9 - 1D array
CS106 Lab 9 - 1D array
 
C function
C functionC function
C function
 
Algorithmic Notations
Algorithmic NotationsAlgorithmic Notations
Algorithmic Notations
 
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
(chapter 5) A Concise and Practical Introduction to Programming Algorithms in...
 
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
Algorithm Class at KPHB (C, C++ Course Training Institute in KPHB, Kukatpally...
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Function overloading(C++)
Function overloading(C++)Function overloading(C++)
Function overloading(C++)
 
Functions struct&union
Functions struct&unionFunctions struct&union
Functions struct&union
 
Understanding Javascript Engine to Code Better
Understanding Javascript Engine to Code BetterUnderstanding Javascript Engine to Code Better
Understanding Javascript Engine to Code Better
 
20BCE1734.pdf
20BCE1734.pdf20BCE1734.pdf
20BCE1734.pdf
 
CPP Language Basics - Reference
CPP Language Basics - ReferenceCPP Language Basics - Reference
CPP Language Basics - Reference
 
lets play with "c"..!!! :):)
lets play with "c"..!!! :):)lets play with "c"..!!! :):)
lets play with "c"..!!! :):)
 

Andere mochten auch

Andere mochten auch (8)

C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Impossible
ImpossibleImpossible
Impossible
 
Tribocracy.com presentation
Tribocracy.com presentationTribocracy.com presentation
Tribocracy.com presentation
 
Brief introduction of Boost.ICL [PDF]
Brief introduction of Boost.ICL [PDF]Brief introduction of Boost.ICL [PDF]
Brief introduction of Boost.ICL [PDF]
 
kwamecorp open design
kwamecorp open design kwamecorp open design
kwamecorp open design
 
Kwamecorp at Droidcon Berlin 2013
Kwamecorp at Droidcon Berlin 2013Kwamecorp at Droidcon Berlin 2013
Kwamecorp at Droidcon Berlin 2013
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0x
 
Introduction to programming competition
Introduction to programming competitionIntroduction to programming competition
Introduction to programming competition
 

Ähnlich wie GC in C++0x [eng]

Crypto cs36 39
Crypto cs36 39Crypto cs36 39
Crypto cs36 39
sravanbabu
 

Ähnlich wie GC in C++0x [eng] (20)

Lecture 1
Lecture 1Lecture 1
Lecture 1
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
 
Crypto cs36 39
Crypto cs36 39Crypto cs36 39
Crypto cs36 39
 
46630497 fun-pointer-1
46630497 fun-pointer-146630497 fun-pointer-1
46630497 fun-pointer-1
 
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value Objects, Full Throttle (to be updated for spring TC39 meetings)Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
 
Lecture2.ppt
Lecture2.pptLecture2.ppt
Lecture2.ppt
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...
 
Code optimization
Code optimization Code optimization
Code optimization
 
Code optimization
Code optimization Code optimization
Code optimization
 
02 functions, variables, basic input and output of c++
02   functions, variables, basic input and output of c++02   functions, variables, basic input and output of c++
02 functions, variables, basic input and output of c++
 
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
 
C++ Language
C++ LanguageC++ Language
C++ Language
 
Lecture 3 c++
Lecture 3 c++Lecture 3 c++
Lecture 3 c++
 
Advanced Web Technology ass.pdf
Advanced Web Technology ass.pdfAdvanced Web Technology ass.pdf
Advanced Web Technology ass.pdf
 
Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4
 
Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020
 
Function in C program
Function in C programFunction in C program
Function in C program
 
Intro To C++ - Class #17: Pointers!, Objects Talking To Each Other
Intro To C++ - Class #17: Pointers!, Objects Talking To Each OtherIntro To C++ - Class #17: Pointers!, Objects Talking To Each Other
Intro To C++ - Class #17: Pointers!, Objects Talking To Each Other
 
openMP loop parallelization
openMP loop parallelizationopenMP loop parallelization
openMP loop parallelization
 

Mehr von yak1ex (6)

C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Introduction to programming competition [revised][PDF]
Introduction to programming competition [revised][PDF]Introduction to programming competition [revised][PDF]
Introduction to programming competition [revised][PDF]
 
Introduction to programming competition [revised]
Introduction to programming competition [revised]Introduction to programming competition [revised]
Introduction to programming competition [revised]
 
Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
 

Kürzlich hochgeladen

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

GC in C++0x [eng]

  • 1. GC in C++0x Aug. 8th 2010 / Reading session for GC book Yasutaka ATARASHI @yak_ex
  • 2. Self introduction  Name: Yasutaka ATARASHI  Twitter ID: yak_ex  Web: http://yak3.myhome.cx:8080/junks (written in Japanese)  Main languages: C++ / Perl  Currently, not coding in office  Coding in programming competitions (TopCoder and Codeforces)  Not familiar with GC  Therefore, this slide may include errors :p
  • 3. GC is widely spread  Languages in Google Code Jam 2010 Qualifier 1st C++ 4911 6th Ruby 221 2nd Java 2762 7th PHP 170 3rd Python 1459 8th Perl 146 4th C 751 9th Haskell 118 5th C# 648 10th Pascal 95
  • 4. GC is widely spread  Languages in Google Code Jam 2010 Qualifier 1st C++ 4911 6th Ruby 221 2nd Java 2762 7th PHP 170 3rd Python 1459 8th Perl 146 4th C 751 9th Haskell 118 5th C# 648 10th Pascal 95  Yellow means languages with GC
  • 5. GC is widely spread  Languages in Google Code Jam 2010 Qualifier 1st C++ 4911 6th Ruby 221 2nd Java 2762 7th PHP 170 3rd Python 1459 8th Perl 146 4th C 751 9th Haskell 118 5th C# 648 10th Pascal 95  Yellow means languages with GC  C++ is outlier: Widely used but without GC
  • 6. GC is widely spread  Languages in Google Code Jam 2010 Qualifier 1st C++ 4911 6th Ruby 221 2nd Java 2762 7th PHP 170 3rd Python 1459 8th Perl 146 4th C 751 9th Haskell 118 5th C# 648 10th Pascal 95  Yellow means languages with GC  C++ is outlier: Widely used but without GC  However, C++ is the extreme multi-paradigm language. Finally, it has …
  • 7. C++: The extreme multi-paradigm language  The next standard, aka C++0x, has Support for Garbage Collection and Reachability-Based Leak Detection
  • 8. C++: The extreme multi-paradigm language  The next standard, aka C++0x, has Minimal Support for Garbage Collection and Reachability-Based Leak Detection
  • 9. Minimal Support for GC (snip)  Some concepts  Traceable pointer object  Safely-derived pointer (value)  5 functions  get_pointer_safety()  (un)declare_no_pointers()  (un)declare_reachable()
  • 10. Some concepts (1)  Traceable pointer object  Pointer object, or  Integer object whose size is enough to hold pointer, or  A sequence of elements in an array of character type (Probably, strict aliasing rule restricts that they type is character type only) -> Object that implementation can recognize that it may have pointer value = Assuming the other area don’t have pointer value
  • 11. Some concepts (2)  Safely-derived pointer (value)  The value returned by ::operator new (e.g. new T), or  Operations on safely-derived pointer value, or  Address taken on dereference (e.g. &*p)  Well-defined pointer arithmetic (e.g. p+1)  Well-defined pointer conversion (e.g. static_cast<void*>(p))  reinterpret_cast between pointer and integer (e.g. reinterpret_cast<intptr_t>(p)) -> Pointer value that implementation can trace that  the area designated by the pointer is allocated by ::operator new and  the pointer value is valid
  • 12. Some concepts (3)  Safely-derived pointer (value) This is safely-derived pointer value T *p = new T; intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555 a: T *q = reinterpret_cast<T*>(x ^ 0x555); T y = *q; This is not safely-derived pointer value This is NOT safely-derived pointer value, either! The value is the same as p but determined not by value but by process
  • 13. Minimal Support for GC (snip)  Some concepts  Traceable pointer object  Safely-derived pointer (value)  5 functions  get_pointer_safety()  (un)declare_no_pointers()  (un)declare_reachable()
  • 14. Function: get_pointer_safety()  Returns pointer-safety of the implementation Behavior does not depend on whether the  relaxed: value is safely-derived pointer, like as C++03 • relaxed and preferred are implementation-  preferred: defined • In the case of “preferred”, there may be leak detector • In VC2010, relaxed is always returned and the other functions has no-effect.  strict: Undefined behavior when dereferencing or deallocating via not safely-derived pointer value which declare_reachable(), as described later, is not called for.
  • 15. Strict pointer safety  Safely-derived pointer (value) This is safely-derived pointer value T *p = new T; intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555 a: T *q = reinterpret_cast<T*>(x ^ 0x555); T y = *q; This is not safely-derived pointer value This is NOT safely-derived pointer value, either! Undefined The value is the same as p but determined behavior not by value but by process
  • 16. Function: (un)declare_no_pointers()  void declare_no_pointers(char *p, size_t n);  void undeclare_no_pointers(char *p, size_t n);  Declares or undeclares that the specified area does not have pointer value -> Enable to restrict scan area by GC
  • 17. Function: (un)declare_reachable  void declare_reachable(void *p);  Declare that object designated by safely- derived pointer value p is reachable -> Excludes the object from target of GC  template<class T> T* undeclare_reachable(T *p);  Returns safely-derived pointer value which is the same value as p. The object designated by p must be reachable. -> The object becomes target of GC again (NOTE: The return value is safely-derived so that the object is not GC-ed while the value is alive)
  • 18. Usage of (un)declare_reachable()  Why needed? This is safely-derived pointer value T *p = new T; intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555 a: T *q = reinterpret_cast<T*>(x ^ 0x555); T y = *q; This is not safely-derived pointer value This is NOT safely-derived pointer value, either! Undefined The value is the same as p but determined behavior not by value but by process A GC at label a might reclaim the object designated by p ???
  • 19. Usage of (un)declare_reachable()  Why needed? This is safely-derived pointer value T *p = new T; intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555 a: T *q = reinterpret_cast<T*>(x ^ 0x555); T y = *q; This is not safely-derived pointer value This is NOT safely-derived pointer value, either! Undefined The value is the same as p but determined behavior not by value but by process A GC at label a might reclaim the object designated by p Optimization issue
  • 20. Usage of (un)declare_reachable()  Why needed? T *p = new T; p is not used intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555 afterwards a: T *q = reinterpret_cast<T*>(x ^ 0x555); T y = *q; NOTE: p, x, q can be assigned to the same register x is not used -> the value p does not exist anywhere at the label a afterwards -> the object designated by p (and q) can be collected by GC!! -> *q causes undefined behavior A GC at label a might reclaim the object designated by p Optimization issue
  • 21. Usage of (un)declare_reachable()  Correct code in C++0x *p is reachable T *p = new T; = declare_reachable(p); // Call before disguising Ignored intptr_t x = reinterpret_cast<intptr_t>(p) ^ 0x555 by GC a: // T z = *reinterpret_cast<T*>(x ^ 0x555); // Legal // Call undeclare_reachable() after disguising T *q = undeclare_reachable(reinterpret_cast<T*>(x ^ 0x555)); T y = *q; NOTE - The same value called for declare_reachable is dereferencable even though it is not safely-derived. - Argument of undeclare_reachable is not needed to be safely-derived, and must be reachable. - Regarding declare_reachable, the problem is disguising pointer Considering functions separated at the a:, the same discussion is applicable w/o optimization.
  • 22. Summary  C++0x has minimal support for GC  Concept: Safely-derived pointer = Valid pointer value which is target of GC  5 new functions  C++03 behavior is conformant in relaxed safety  Unlikely to release strict-safety implementation immediately  Code disguising pointer value needs modification by using declare_reachable() / undeclare_reachable()
  • 23. Reference  N2670: Minimal Support for Garbage Collection and Reachability-Based Leak Detection (revised) http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2008/ n2670.htm  Garbage Collection in the Next C++ Standard http://www.hpl.hp.com/techreports/2009/H PL-2009-360.pdf