Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
30. Linking: a Problem
#include “T.h”
. . .
res = Max(x-1,y+2.5);
. . .
#include “T.h”
. . .
res = Max(1.0,res);
. . .
template<typename T>
T Max ( T a, T b )
{
return a>b?a:b;
}File1.cpp
File2.cpp
T.h
• Both compilations produce
the same function-by-template
• Executable contains two copies
of Maxdouble (“code bloat”)
Object code
with
Maxdouble
Object code
with
Maxdouble
File1.obj
File2.obj
Executable
with two copies
of Maxdouble
App.exe
25/35
31. Smart Linking
#include "T.h"
. . .
res = Max(x-1,y+2.5);
. . .
#include "T.h"
. . .
res = Max(1.0,res);
. . .
template<typename T>
T Max ( T a, T b )
{
return a>b?a:b;
}
File1.cpp
File2.cpp
T.h
TTT with
Maxdouble
TTT with
Maxdouble
File1.ir
File2.ir
TTT
with the single
copy of Maxdouble
App.ir
TTT for
template T
T.irh
26/35