270 likes | 404 Views
This presentation details the integration of CINT and Reflex to improve the management of reflection data structures in C++. It covers the motivation for merging, implementation steps, and the expected benefits like reduced memory footprint and dynamic data handling. The talk also outlines the status of ongoing developments, emphasizes the need for a backward-compatible API, and discusses the intricacies of maintaining the integrity of CINT while migrating to Reflex. Aimed at developers, it highlights practical insights into collaborative efforts and future prospects.
E N D
CINT & Reflex:New Reflection Data Structures Masa(haru) Goto • Agilent Philippe Canal • Fermilab/CD Stefan Roiser, Axel Naumann • PH/SFT
CINT Is The Prompt, Right? CINT is • Backend for all dictionary based interpreters • Execution engine (compiled and interpreted code) • Prerequisite for signal/slot • Prerequisite for I/O Reflection is • Part of CINT’s knowledge, used for all of above • Info on types and their members: name, type, access to values or call AA Review 2006
CINT And Reflection rootcint gccxml Auto-Load C++ Parser Generate Dictionary Reflection Data Interpreter Load Dictionary ROOT Compiled Function Call Uses ReflectionC++ API Dict Gen Data flow AA Review 2006
Comments From Last Review “ Common Linkdef.h interfacerootcint -cint, -reflex, -gccxml Unified Python interface: PyROOT Common Dictionary - unify dictionary clients for experiments using lcgdict/reflex, unify automatic generation of glue code (e.g. python bindings) [JJ Blaising, feedback talk 1.4.2005] AA Review 2006
Dictionary Options – You Choose! Reflex dictionary gccxml parser selection.xml genreflex.py ROOT Cintex Linkdef.h rootcint CINT parser CINT dictionary AA Review 2006
Dictionary Options – The Goal Reflex dictionary gccxml parser selection.xml genreflex.py ROOT Linkdef.h rootcint CINT parser AA Review 2006
“ Ordering, scheduling, priorities [Final Report 2005] Comments From Last Review (cont’ed) First version of Cint with Reflex reflection data base expected for end of year – not yet production grade! Production-grade version available mid 2007 Reasons for delay: • Moving functionality from CINT to Reflex • Keeping CINT API backward compatible • Merge process more involved than expected AA Review 2006
That’s It? Already? No. This talk’s menu offers following courses: • Motivation: why we (still) need the merge • Merge implementation details • Steps of the merge • Merge related development in Cint and Reflex • Status • Outlook AA Review 2006
Motivation For Cint-Reflex Merge C++ code replacing C structs • Smaller heap footprint: factor 3 in current CVS for CLHEP based example – expected to deteriorate • Dynamic data structures, no hard-wired limits • Easier to maintain • Refactoring, separation of functionality • Preparation for thread-safety AA Review 2006
C++ Code Vs. C structs Example Current Cint has global C structs struct G__tagtable { char* name[G__MAXSTRUCT]; … } G__struct; Reflex allows OO access to reflection data Reflex::Scope::GlobalScope(); Covers types, data members, function members, templates,… AA Review 2006
Merge Implementation - Context Why you care: reason for merge schedule • CINT mixes reflection and execution data, need to split carefully • CINT extremely complex: extensive use of globals, spread of functionality, side effects • CINT grown and debugged, don’t want to risk breaking parts that work • Changes need to be “invisible” to users AA Review 2006
Merge Implementation - Consequence • Small step changes • Always compare to working version with extensive test suite • Replace data structures first Major benefit will come only later: • replace functionality • remove code duplication • take advantage of OO data structures AA Review 2006
Steps Of Merge • Need duplication of scope info for both CINT and Reflex while merging (for contained types) • Scaffolding, wrappers, convenience functions for Reflex and CINT • Typedef database: G__newtype Reflex::Type • Globals: G__*tagnum Reflex::Scope • Structs: G__struct Reflex::Scope • Functions: G__ifunc Reflex::FunctionMember • Data members: G__vararry Reflex::DataMember AA Review 2006
Merge Tactics • New configure; make CINT build system to allow sensible multi-platform tests • CVS branch for merge, apply bug fixes from HEAD • All other major development for CINT stalled until merge is done • Update definition of CINT’s API. Will keep API backward compatible, use export statements to ensure no internal function is used by e.g. ROOT • Once done, make libCint.so and libCintNew.so binary compatible, to allow switch without rebuild:mv lib/libCintNew.so lib/libCint.so; root AA Review 2006
Development In CINT For Merge • New build system for standalone CINT/Reflex • API redefinition • Scaffolding to allow transition of data structures without large re-write of code • extern “C” wrappers for some functions and classes + the actual merge… AA Review 2006
Development In Reflex For Merge • Unloading of dictionary • Changes to Reflex::Builder interface • Late (on-demand) initialization of reflection data • Extended C++ support: using directives, hiding typedef struct A A, using declarations, friend • Name Lookup: major boost in Reflex functionality, and damn complex AA Review 2006
Development In Reflex (cont’ed) • Fast access of reflex objects’ properties, needed for CINT execution data • Reflex objects can create dictionary representation of themselves • Several convenience functions, e.g. discover the raw type (const char* char), the kind of fundamental type etc. AA Review 2006
Status - Where Are We Now? ! struct/class/…, function, data member reflectiondatabase On demand initialization of Reflex data Reflex support for using declarations, friend To Do Duplication of scopes for CINT and Reflex Scaffolding, wrappers, convenience functionality configure && make build system Update of definition of CINT API Typedef, globals reflection database Unloading of dictionary Reflex::Builder interface changes Reflex support for using directives, hiding typedef struct A A Fast access to Reflex objects’ properties ! ! : a lot of work ! Done! ! ! Name Lookup Reflex dictionary generator API On the way AA Review 2006
Outlook - Merge Merge related: • First version of CINT using Reflex by end of year • ROOT’s TClass, TMethod,… classes to be updated after Cint/Reflex merge, i.e. 2007 • Adaptation of PyROOT to use Reflex API • Other ROOT occurrences of CINT API calls to be replaced by Reflex API calls AA Review 2006
Outlook - CINT 2007: • Function stubs / call wrappers will be removed on selected platforms (GCC3,4; MSVC) • Just-in-time dictionary generator builds dictionary for all template instances needed, when needed 2008: • Reflex persistency - .root instead of .so ??? AA Review 2006
Outlook – Dictionary Reflex dictionary gccxml parser genreflex.py Linkdef.h / selection.xml ROOT rootcint CINT parser AA Review 2006
Outlook – Dictionary • Current Reflex dictionaries: • 2007: Remove function stubs on selected platforms • 2007: Generate template dictionaries on demand • 2008: Don’t “store” Reflex database as .cxx/.o (part of lib) but as .root file, generate member offset info on-the-fly: ROOT itself would shrink by ~25%! Improvement independent of selection.xml / Linkdef.h and gendict.py / rootcint 100% 33% ~1% AA Review 2006
Outlook 2008+: • Future: reconsider gccxml to Reflex path: gendict.py? C++? PyROOT based? • CINT thread safety More details in the coming months – early comments welcome! AA Review 2006
FIN AA Review 2006
My.h either / or XML parser (e.g. Xerces) XML parser (e.g. expat) gccxml genreflex.cpp genreflex2.py CINT parser My.xml PyReflex genreflex2 Just in time compiler libMy.so Symbol Lookup Builder API Stub comp. / Offset calc. Linkdef.h / selection.xml ? ROOT Reflex DS My_rflx.root Dictionary Generator genreflex.py meta hist math … Library My_rflx.cpp User API dlopen File Process Data Flow make PyROOT PyReflex CINT interpreter ROOT C/C++ Python >>> cint> libMyRflx.so XML Dictionaries – The Full Picture 200x AA Review 2006
Dictionary Heap Usage CINT, CLHEP example 2500k AA Review 2006
Dictionary Heap Usage Reflex, CLHEP example 700k AA Review 2006