![Page 1: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/1.jpg)
Firstname LastnameCERN PH-SFT
CH-1211 Geneva 23sftweb.cern.ch
root.cern.ch
Cling – Past, Present and FutureCling – Past, Present and Future
V. Vassilev, P. Canal, A. Naumann, P. RussoV. Vassilev, P. Canal, A. Naumann, P. Russo
CERN, PH-SFT & FermiLabCERN, PH-SFT & FermiLab
![Page 2: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/2.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Role of C++ Interpreter in ROOT
o Load/Store C++ objectsoRuntime Dynamism
• TFile::Open(“http://...”)• gDirectory->Get(“hist”)• python runReco.py
o Fast Prototyping
2
Limited C++ language support for reflection and type introspection.
ROOT
CINT
Reflection
TPluginManager
IO
...
PyR
OO
T
Type Info
TClass
![Page 3: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/3.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
LLVM Toolchain As an Alternative
o LLVM Core “The LLVM Project is a collection of modular and reusable compiler and toolchain technologies...”
• More than 120 active contributorsApple, ARM, Google, Qualcomm, QuIC, NVidia, AMD and more
• ~250 commits/weekoClang
“The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler.“
• More than 100 active contributorsApple, ARM, AMD and more
• ~150 commits/week
3
![Page 4: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/4.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
In The Meanwhile: LLVM
4
LLVM and Clang “The LLVM Project is a collection of modular and reusable compiler and
toolchain technologies...”
![Page 5: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/5.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Cling's Dual Personality
oAn interpreter – looks like an interpreter and behaves like an interpreterCling follows the read-evaluate-print-loop (repl) concept.
oMore than interpreter – built on top of compiler libraries (Clang and LLVM)Contains interpreter parts and compiler parts. More of an interactive compiler or an interactive compiler interface for clang.
5
No need to compile Cling/ROOT with Clang/LLVM or having clang installed on the OS
![Page 6: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/6.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Cling Is Better Than CINT
o Full C++ support incl. C++11o Stable and informative intermediate representations of the
sourceoBeing developed with the vision to be used in multithreaded
environment (an interpreter object per thread)
6
![Page 7: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/7.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Full C++ Support
o Templates and STL are not an issue
7
![Page 8: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/8.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Full C++ Support
oNatural path to the new standards C++11/C++*
8
![Page 9: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/9.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Full C++ Support
oNatural path to the new standards C++11/C++*
9
![Page 10: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/10.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Full C++ Support
o Boost is not a dream
10
![Page 11: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/11.jpg)
![Page 12: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/12.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Diagnostics
oColumn numbers and caret diagnosticsCaretDiagnostics.C:4:13: warning: '.*' specified field precision is missing a matching 'int' argumentprintf("%.*d"); ~~^~
oRange highlightingRangeHighlight.C:14:39: error: invalid operands to binary expression ('int' and 'A')return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X); ~~~~~~~~~~~~ ^ ~~~~~~
12
![Page 13: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/13.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Diagnostics
13
o Pointer vs Referencesinput_line_410:2:6: error: member reference type 'TNamed' is not a pointernRef->GetName();~~~~^
input_line_413:2:7: error: member reference type 'TNamed *' is a pointer; maybe you meant to use '->’?nPtr1.GetName();~~~~^ ->
o Fix-it hintsFixItHints.C:7:27: warning: use of GNU old-style field designator extensionstruct point origin = { x: 0.0, y: 0.0 }; ^~ .x = FixItHints.C:12:3: error: use of undeclared identifier 'floot'; did you mean 'float’? floot p; ^~~~ float
![Page 14: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/14.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Diagnostics
o AmbiguitiesAmbiguities.C:20:30: error: return type of virtual function 'Clone' is not covariant with the return type of the function it overrides (ambiguous conversion from derived class 'TeachingAssistant' to base class 'Person': class TeachingAssistant -> class Student -> class Person class TeachingAssistant -> class Teacher -> class Person)virtual TeachingAssistant* Clone() const; ^Ambiguities.C:7:19: note: overridden virtual function is herevirtual Person* Clone() const; ^
o Templatesinput_line_401:2:2:error: use of class template LorentzVector requires template arguments LorentzVector v; ^Math/GenVector/LorentzVectorfwd.h:28:39: note: template is declared here template<class CoordSystem> class LorentzVector; ~~~~~~~~~~~~~~~~~~~~~~~~ ^
14
Personvirtual void
Clone()
Personvirtual void
Clone()
TeachingAssistantvirtual void Clone()TeachingAssistantvirtual void Clone()
StudentStudent TeacherTeacher
![Page 15: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/15.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Diagnostics
15
o Macro expansionsMacroExpansionInformation.C:14:7: error: invalid operands to binary expression ('int' and 'A’) X = MAX(X, *SomeA); ^~~~~~~~~~~~~~MacroExpansionInformation.C:5:24: note: expanded from macro 'MAX’#define MAX(A, B) ((A) > (B) ? (A) : (B)) ~~~ ^ ~~~
o Template instantiationsinput_line_395:2:18: error: no matching constructor for initialization of 'PtEtaPhiEVector' (aka 'LorentzVector<PtEtaPhiE4D<double> >’)PtEtaPhiEVector v2( "v1.Rho()", v1.Eta(), v1.Phi(), v1.E() ); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~Math/GenVector/LorentzVector.h:77:8: note: candidate constructor not viable: no known conversion from 'const char [9]' to 'const Scalar’ (aka 'const double') for 1st argumentLorentzVector(const Scalar & a,^Math/GenVector/LorentzVector.h:88:17: note: candidate constructor template not viable: requires single argument 'v', but 4 arguments were provided explicit LorentzVector(const LorentzVector<Coords> & v ) : ^
![Page 16: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/16.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 201316
![Page 17: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/17.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Data Flow
17
Machine Code (x86, Alpha, ...)
①
⑦
Compilation Engine (clang)
Compilation Engine (clang)
Transformation Engine
Transformation Engine
⑤②③④⑥ClingCling
⑧①, ② –Text③, ④, ⑤, ⑥ – Abstract Syntax Tree⑦ - LLVM Bit Code⑧ -Target Machine Code
LLVM Execution
Engine
LLVM Execution
Engine
![Page 18: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/18.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Compilation Engine
18
Clang ParserClang Parser
Clang Code Generator
Clang Code Generator
LLVM Execution
Engine
LLVM Execution
Engine
Transformation Engine
Transformation Engine
ClingCling
![Page 19: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/19.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Transformation Engine
o TransactionCling represents the incremental input as a set of AST nodes.
o Transaction TransformersCling enables each transaction to be further customized by other clients by implementing a transaction transformer.
o Interpreter CallbacksImplements callbacks for the “interesting” events.
19
ClingCling Transformation Engine
Transformation Engine
Transaction
TransactionTransaction
![Page 20: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/20.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 201320
LLVM EE-s have complete target info Thus calling into compiled libraries is not an issue.
No boundary interpreted/compiled world Possible to derive from compiled classes, proper calculation of offsets and so on.
Machine Code (x86, Alpha, ...)
Compiled libs(.so)
��
LLILLI LLVMJIT
LLVMJIT MCJITMCJIT
Execution Engine
![Page 21: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/21.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Challenges
o Incompatible concepts like compilation and interpretationMany tasks that are trivial for an interpreter become a nightmare for a compiler.
oMake C++ usable at the promptIncorporate the experience we have with CINT. First step: adopt the successful usability extensions from CINT.
21
![Page 22: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/22.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Extending C++ Language
22
[root]$ sin(12);void wrapper() { sin(12);}
[root]$ [root]$
int i = 12;sin(i);
void wrapper1() { int i = 12;}
void wrapper2() { sin(i);} ?
![Page 23: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/23.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Extending C++ Language
23
[root]$ [root]$
void wrapper1() { int i = 12; printf("%d\n",i);}
void wrapper2() { printf("%f\n", sin(i));}
int i = 12;
int i = 12; printf("%d\n",i);printf("%f\n",sin(i));
oWrap the inputo Look for declarationso Extract the declarations one level up, as global declarations
![Page 24: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/24.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Streaming Execution Results
24
[root]$ [root]$
int i = 12(int) 12sin(i)(double) -5.365729e-01
[root]$
[root]$
std::string s = “Hello”(std::string) @0x7fff65ae783cc_str: “Hello”enum e { e1 = 12, e2 = 13, e3 = 13}; e1(enum e) (e::e1) : (int) 12
[root]$ HelloWorld(void (void)) Function @0x108880030 at /tmp/HelloWorld.h:2:void HelloWorld() { printf("HelloWorld!\n");}
![Page 25: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/25.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Error Recovery
o Filled input-by-input (aka Transaction)o Incorrect inputs must be discarded as a whole
25
![Page 26: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/26.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Implicit auto keyword
26
i = 5; f = new TNamed(“a”, ”b”)
![Page 27: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/27.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Late Binding
27
if (cond) {
TFile* F = 0;
if (is_day_of_month_even())
F = TFile::Open("even.root");
else
F = TFile::Open("odd.root");
hist->Draw();
}
hist->Draw();
![Page 28: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/28.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Late Binding
28
if (cond) {
TFile* F = 0;
if (is_day_of_month_even())
F = TFile::Open("even.root");
else
F = TFile::Open("odd.root");
gCling->EvaluateT<void>("hist->Draw()", ...);
}
hist->Draw();
![Page 29: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/29.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Code Unloading
29
[root]$ [root]$ [root]$ [root]$ [root]$ [root]$ [root]$ [root]$
.L Calculator.hCalculator calc;calc.Add(3, 1)(int) 2 //WTF!?*.L Calculator.hCalculator calc;calc.Add(3, 1)(int) 4 //
// Calculator.hclass Calculator { int Add(int a, int b) { return a + b; }...};
// Calculator.hclass Calculator { int Add(int a, int b) { return a - b; }...};
* What's That Function
![Page 30: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/30.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Future Plans
oMigrate to MCJIT• Object file emitted to memory• Runtime dynamic linker
oWindows 64 Supporto Tools
• Automatic Differentiation
30
![Page 31: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/31.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
o See Tomas Gahr’s demo later at the workshop
Thank you!
31
![Page 32: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/32.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Backup slides
32
![Page 33: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/33.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Pre-Compiled Headers/Modules
Carefully crafted data structures designed to improve translator's performance:oReduce lexical, syntax and semantic analysisoLoaded “lazily” on demand
33
![Page 34: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/34.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
Pre-Compiled Headers/Modules
Design advantages:oLoading is significantly faster than re-parsingoMinimize the cost of readingoRead times don't depend on sizeoCost of generating isn't large
34
![Page 35: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/35.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 201335
PCH PCM
![Page 36: Firstname Lastname CERN PH-SFT CH-1211 Geneva 23 sftweb.cern.ch root.cern.ch Cling – Past, Present and Future V. Vassilev, P. Canal, A. Naumann, P. Russo](https://reader036.vdocuments.site/reader036/viewer/2022062409/5697bf6f1a28abf838c7d324/html5/thumbnails/36.jpg)
sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14
March 2013
PCH vs PCM
oWhere we should get it from? Who knows more about types than the translator?
36
CINT
Reflection
Type Info
Not very descriptive
GCCXML
Reflex