Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
libdcompile Naomasa Matsubayashi
Slide 2
Slide 2 text
@fadis_ ࠷ۙͷ"ࣾ $ 7JN (FOUPP มଶΛࣝผ͢Δཁૉ
Slide 3
Slide 3 text
int main() {! float a = 5.0f;! std::vector< boost::filesystem::path > f;! f.push_back( "hoge.cpp" );! f.push_back( "fuga.cpp" );! dcompile::dynamic_compiler dc;! dc.getLoader().enableSystemPath();! if( !dc.getLoader().load( "jpeg" ) )! throw Ouch();! dc.getHeaderPath().enableSystemPath();! dcompile::module lib = dc( f.begin(), f.end() );! boost::optional< dcompile::function > foo =! lib.getFunction( "foo" );! if( foo )! (*foo)( &a );! else! throw Ouch();! std::cout << a << " outside" << std::endl;! }
Slide 4
Slide 4 text
$ʹແͯ͘൵͍͠ͷ FWBM
Slide 5
Slide 5 text
FWBMͱ 1FSMͷ߹ FWBMQSJOUa)FMMP 8PSMEaOa ͔͜͜Β ͜͜·Ͱ จࣈྻ จࣈྻͰ༩͑ΒΕͨίʔυΛ࣮ߦ͢Δ
Slide 6
Slide 6 text
FWBMͱ จࣈྻͰ༩͑ΒΕͨίʔυΛ࣮ߦ͢Δ @45%*/ FWBM@ ਖ਼͍͠ DBUIPHFQM @45%*/ FWBM@ FDIPQSJOU)FMMP 8PSMEaOcQFSMIPHFQM )FMMP 8PSME
Slide 7
Slide 7 text
FWBMͱ DBUIPHFQM @45%*/ FWBM@ FDIPQSJOU)FMMP 8PSMEaOcQFSMIPHFQM )FMMP 8PSME ॲཧ༰͕QSJOUʹܾ·ͬͨͷ࣮ߦ࣌ ࣮ߦ࣌ʹίʔυΛղऍͯ͠ Ϛγϯޠʹམͱ͢खஈ͕ඞཁ
Slide 8
Slide 8 text
FWBMͱ ࣮ߦ࣌ʹίʔυΛղऍͯ͠ Ϛγϯޠʹམͱ͢खஈ͕ඞཁ 1FSM 0, 3VCZ 0, 1ZUIPO 0, +BWB4DSJQU 0, $ PS[ $ PS[ % ίϯύΠϧ࣌ͷΈ +BWB PS[ $ 0, )BTLFMM 0, ίϯύΠϥ͕ϥΠϒϥʹؚ·Ε͍ͯΔ
Slide 9
Slide 9 text
ϥΠϒϥϦʹͳͬͯΔ$ίϯύΠϥ --7.DMBOH ͜ΕΛ͑$ͰFWBMͰ͖Δͣ
Slide 10
Slide 10 text
MJCEDPNQJMF IUUQTHJUIVCDPN'BEJTMJCEDPNQJMF
Slide 11
Slide 11 text
Ϛγϯޠ Ϛγϯޠͷੜ DMBOH --7. VTFS $ #$ $ #$ ߏจղੳ #$*3 ϦϯΫ
Slide 12
Slide 12 text
--7.ಡΈࠐΜͩ#$ͷѻ͍Λ छྨ͔ΒબΔ ίϯύΠϧ Ϛγϯޠʹมͯ݁͠ՌΛ ϑΝΠϧʹॻ͖ग़͢ ΠϯλϓϦλ ߦͮͭಡΈࠐΜͰ࣮ߦ +*5ίϯύΠϧ ඞཁ࠷খݶͷ෦͚ͩΛ ίϯύΠϧ͠ͳ͕Β࣮ߦ ௨ৗ$ͷίʔυΛίϯύΠϧ͢Δ߹ ʮίϯύΠϧʯ͕༻͍ΒΕΔ
Slide 13
Slide 13 text
FWBMΛ͢Δ߹ίϯύΠϧΛ͖͢Ͱͳ͍ --7.ʹ&-'ͱ͔1&ͱ͔Λѻ͑ΔϦϯΧ͕ͳ͍ 3FRVJSFNFOU(/6CJOVUJMT ͱ͔ͯͳ͍͠ ίϯύΠϧҎ֎ͷํ๏Ͱ࣮ߦ͢Δͱ ෆࢥٞͳྗʹΑΓԿࣄແ࣮͘ߦग़དྷΔ
Slide 14
Slide 14 text
ϦϯΧΛΘͣʹͲ͏ͬͯ ґଘϥΠϒϥϦΛϦϯΫ͍ͯ͠Δͷ͔ --7.ΠϯλϓϦλ+*5Ͱ࣮ߦ͢Δࡍ ಉҰ#$தʹݟ͔ͭΒͳ͍γϯϘϧΛ EMGDOͰ୳ͦ͏ͱ͢Δ άϩʔόϧม JOUB ίϯύΠϧ࣌ίϯύΠϧ JODMVEFJPTUFSBN FYUFSOJOUB JOUNBJO \ TUEDPVUB TUEFOEM ^ ࣮ߦ࣌ίϯύΠϧ ݟ͑Δʂ
Slide 15
Slide 15 text
--7.ΠϯλϓϦλ+*5Ͱ࣮ߦ͢Δࡍ ಉҰ--7.*3தʹݟ͔ͭΒͳ͍γϯϘϧΛ EMGDOͰ୳ͦ͏ͱ͢Δ ϦϯΧΛΘͣʹͲ͏ͬͯ ґଘϥΠϒϥϦΛϦϯΫ͍ͯ͠Δͷ͔ EMGDOͰݟ͔ͭΔͷ ݩʑόΠφϦதʹ͋ͬ ͨγϯϘϧ 35%-@(-0#"-Ͱ ϩʔυͨ͠γϯϘϧ ͋Β͔͡ΊඞཁͳϥΠϒϥϦΛEMPQFOͯ͋͠Δͱ ࣮ߦ࣌ʹίϯύΠϧ͞ΕΔίʔυͷத͔Β ͦͷϥΠϒϥϦͷ͕ؔԿͱͳ͘ݺΔ
Slide 16
Slide 16 text
ϦϯΧΛΘͣʹͲ͏ͬͯ ґଘϥΠϒϥϦΛϦϯΫ͍ͯ͠Δͷ͔ EMGDO104*9ݻ༗ --7.ʹ γεςϜͷμΠφϛοΫϩʔυΛநԽͨ͠ ͕ؔ༻ҙ͞Ε͍ͯΔ ͨͩ͠ϩʔυ͚ͩ MMWNTZT%ZOBNJD-JCSBSZ-PBE-JCSBSZ1FSNBOFOUMZ
Slide 17
Slide 17 text
ϦϯΧΛΘͣʹͲ͏ͬͯ ґଘϥΠϒϥϦΛϦϯΫ͍ͯ͠Δͷ͔ JODMVEFKQFHMJCI JOUNBJO \ TUSVDUKQFH@DPNQSFTT@TUSVDUDJOGP KQFH@DSFBUF@DPNQSFTT DJOGP ^ MJCKQFH͕ཁΔ ࣮ߦ։࢝ MJCKQFHΛ μΠφϛοΫϩʔυ ࠨ্ͷίʔυΛ +*5ίϯύΠϧ ͜ͷ࣌ͰEMGDO͔Βݟ͑Δͱ͜Ζʹ MJCKQFHͷγϯϘϧ͕͋ΔͷͰ Կࣄແ͔͔ͬͨͷΑ͏ʹ࣮ߦग़དྷΔ
Slide 18
Slide 18 text
int main() {! float a = 5.0f;! std::vector< boost::filesystem::path > f;! f.push_back( "hoge.cpp" );! f.push_back( "fuga.cpp" );! dcompile::dynamic_compiler dc;! dc.getLoader().enableSystemPath();! if( !dc.getLoader().load( "jpeg" ) )! throw Ouch();! dc.getHeaderPath().enableSystemPath();! dcompile::module lib = dc( f.begin(), f.end() );! boost::optional< dcompile::function > foo =! lib.getFunction( "foo" );! if( foo )! (*foo)( &a );! else! throw Ouch();! std::cout << a << " outside" << std::endl;! } f.push_back( "hoge.cpp" );! f.push_back( "fuga.cpp" ); dcompile::dynamic_compiler dc; dc.getLoader().enableSystemPath();! if(! !dc.getLoader().load( "jpeg" ) )! throw Ouch(); dc.getHeaderPath()! .enableSystemPath(); dcompile::module lib =! dc( f.begin(), f.end() ); boost::optional foo = lib.getFunction( "foo" ); (*foo)( &a );
Slide 19
Slide 19 text
#include ! extern "C" void moo( float *a );! extern "C" void foo( float *a ) {! struct jpeg_compress_struct cinfo;! jpeg_create_compress( &cinfo );! moo( a );! } #include ! extern "C"! void moo( float *a ) {! std::cout << *a << " inslide" << std::endl;! std::cout << "Hello, world!" << std::endl;! *a += 0.1f;! } IPHFDQQ GVHBDQQ
Slide 20
Slide 20 text
ಉҰϓϩηε ϗετίʔυ MJCKQFH NBJO qPBUB IPHFDQQ GPP GVHBDQQ NPP ॲཧͷྲྀΕ JOTMJEF )FMMP XPSME PVUTJEF ͳΜ͔ ૿͑ͯΔ
Slide 21
Slide 21 text
%ͳΜͱ͔͞Μ͕࡞ͬͨ #0045@11ͩΒ͚ͷίʔυ தͳΜͱ͔͞Μ͕࡞ͬͨ DPOTUFYQSͩΒ͚ͷίʔυ ࣮ߦ࣌ʹ࣮ߦग़དྷΔʂ ͍͢͝ʂ ࠷ॳ͔Β࣮ߦ࣌ʹॲཧ͢ΔΑ͏ʹॻ͚ʂ
Slide 22
Slide 22 text
DMBOHͷา͖ํ DMBOHͷιʔεʹؔ͢Δ࠷ݶͷυΩϡϝϯτ ͦΕEPYZHFO DMBOHͷιʔεʹؔ͢ΔৄࡉͳυΩϡϝϯτ ͦΕιʔε Θ͔Βͳ͍͜ͱιʔεʹฉ͚
Slide 23
Slide 23 text
DMBOHͷา͖ํ --7.ͱDMBOHͷࠓ͕Θ͔Δ ߪಡແྉ HJUDMPOFIUUQMMWNPSHHJUMMWNHJU DEMMWNUPPMT HJUDMPOFIUUQMMWNPSHHJUDMBOHHJU ࠓ͙͢DMPOF
Slide 24
Slide 24 text
DMBOHͷา͖ํ ͰɺͲ͔͜ΒಡΊྑ͍ͷ NBJO͔ؔΒͩΖKL 0XOJOH1US$PNQJMBUJPO$ 5IF%SJWFS#VJME$PNQJMBUJPO BSHW JOU3FT DPOTU$PNNBOE'BJMJOH$PNNBOE JG $HFU 3FT5IF%SJWFS&YFDVUF$PNQJMBUJPO $ 'BJMJOH$PNNBOE --7.@4063$&@%*3 UPPMTDMBOHUPPMTESJWFSESJWFSDQQ DMBOHίϚϯυͷNBJOؔͷࡏॲ ߦ͋ͨΓ͔ΒNBJO
Slide 25
Slide 25 text
DMBOHͷา͖ํ JOU3FT$&YFDVUF+PC $HFU+PCT 'BJMJOH$PNNBOE --7.@4063$&@%*3 UPPMTDMBOHMJC%SJWFS%SJWFSDQQ ߦ͋ͨΓ͔Β&YFDVUF$PNQJMBUJPO --7.@4063$&@%*3 UPPMTDMBOHMJC%SJWFS$PNQJMBUJPODQQ ߦ͋ͨΓ͔Β&YVFDVUF+PC MMWNTZT1SPHSBN&YFDVUF"OE8BJU 1SPH "SHW FOW 3FEJSFDUT TFDPOET5P8BJU NFNPSZ-JNJU &SSPS ॲཧͷஈ֊ຖʹׂͯ͠DMBOHΛݺͼ͢
Slide 26
Slide 26 text
DMBOHͷา͖ํ JG BSHWTJ[F 4USJOH3FG BSHW<> TUBSUTXJUI DD \ 4USJOH3FG5PPMBSHW<> ! JG 5PPM SFUVSODD@NBJO BSHWEBUB BSHWEBUB BSHWTJ[F BSHW<> WPJE JOUQUS@U (FU&YFDVUBCMF1BUI JG 5PPMBT SFUVSODDBT@NBJO BSHWEBUB BSHWEBUB BSHWTJ[F BSHW<> WPJE JOUQUS@U (FU&YFDVUBCMF1BUI ! 3FKFDUVOLOPXOUPPMT MMWNFSST FSSPSVOLOPXOJOUFHSBUFEUPPM5PPMaO SFUVSO ^ --7.@4063$&@%*3 UPPMTDMBOHUPPMTESJWFSESJWFSDQQ ߦ͋ͨΓ͔ΒNBJO
Slide 27
Slide 27 text
DMBOHͷา͖ํ MMWN*OJUJBMJ[F"MM5BSHFUT MMWN*OJUJBMJ[F"MM5BSHFU.$T MMWN*OJUJBMJ[F"MM"TN1SJOUFST MMWN*OJUJBMJ[F"MM"TN1BSTFST --7.@4063$&@%*3 UPPMTDMBOHUPPMTESJWFSDD@NBJODQQ ߦ͋ͨΓ͔ΒDD@NBJO MMWNͷ͍͍ՃݮͳॳظԽ 4VDDFTT&YFDVUF$PNQJMFS*OWPDBUJPO $MBOHHFU --7.@4063$&@%*3 UPPMTDMBOHMJC'SPOUFOE5PPM&YFDVUF$PNQJMFS*OWPDBUJPODQQ bool clang::ExecuteCompilerInvocation(CompilerInstance *Clang) { ߦ͋ͨΓ͔Β&YFDVUF$PNQJMFS*OWPDBUJPO
Slide 28
Slide 28 text
DMBOHͷา͖ํ ॏཁΫϥε$PNQJMFS*OTUBODF $PNQJMFS*OTUBOD 'JMF.BOBHFS 4PVSDF.BOBHFS %JBHOPTUJDT "DUJPO 5BSHFU0QUJPO
Slide 29
Slide 29 text
DMBOHͷา͖ํ ॏཁΫϥε$PNQJMFS*OTUBODF Success = Clang->ExecuteAction(*Act); --7.@4063$&@%*3 UPPMTDMBOHMJC'SPOUFOE5PPM&YFDVUF$PNQJMFS*OWPDBUJPODQQ ߦ͋ͨΓ͔Β&YFDVUF$PNQJMFS*OWPDBUJPO OwningPtr Act(CreateFrontendAction(*Clang)); "DUJPOΛ$PNQJMFS*OTUBODFʹͯ͠ &YFDVUF"DUJPO͢Δ $PNQJMFS*OTUBODF͕ύʔαΛݺͼग़͠ ߏจղੳͷ݁Ռݟ͔ͭͬͨཁૉʹԠͯ͡ "DUJPOͷରԠ͢Δϝϯό͕ؔݺΕΔ
Slide 30
Slide 30 text
DMBOHͷา͖ํ ࠷ॳ͔Β༻ҙ͞Ε͍ͯΔΞΫγϣϯ &NJU"TTFNCMZ"DUJPO &NJU#$"DUJPO &NJU--7."DUJPO &NJU--7.0OMZ"DUJPO &NJU$PEF(FO0OMZ"DUJPO &NJU0CK"DUJPO 0CK·Ͱ͍࣋ͬͯͬͯ͠·͏ͱ ϦϯΫग़དྷͳͯ͘٧Ή
Slide 31
Slide 31 text
--7.ͷา͖ํ ෳͷ--7.Ϟδϡʔϧ CDͱ͔͍ͭͯΔͭ Λ ͭͷ--7.Ϟδϡʔϧʹ·ͱΊΔ --7.-JOLFSʹ͞ΕͨϞδϡʔϧ --7.-JOLFS͕ղ์͢Δ --7.-JOLFS͕࡞ͬͨϞδϡʔϧ ໌ࣔతʹࢦఆ͠ͳ͍ͱ--7.-JOLFS͕ղ์͢Δ #$ #$ #$ ϦϯΫ
Slide 32
Slide 32 text
--7.ͷา͖ํ ग़དྷ্͕ͬͨϞδϡʔϧ Ͳ͏࣮ͬͯߦ͢Ε͍͍ͷ ιʔεʹฉ͚ʂ --7.@4063$&@%*3 UPPMTMMJMMJDQQ ߦ͋ͨΓ͔ΒNBJO *OJUJBMJ[F/BUJWF5BSHFU *OJUJBMJ[F/BUJWF5BSHFU"TN1SJOUFS ωΠςΟϒλʔήοτͷॳظԽ
Slide 33
Slide 33 text
--7.ͷา͖ํ ϞδϡʔϧΛ&OHJOF#VJMEFSʹ͠ λʔήοτΛࢦఆͯ͠ ΠϯλϓϦλ࣮ߦ͔+*5ίϯύΠϧ͔બͼ &YFDVUJPO&OHJOFΛੜ͢Δ &OHJOF#VJMEFSCVJMEFS .PE CVJMEFSTFU."SDI ."SDI CVJMEFSTFU.$16 .$16 CVJMEFSTFU."UUST ."UUST CVJMEFSTFU6TF.$+*5 USVF &&CVJMEFSDSFBUF
Slide 34
Slide 34 text
--7.ͷา͖ํ &&SVO4UBUJD$POTUSVDUPST%FTUSVDUPST GBMTF ϞδϡʔϧͷίϯετϥΫλΛ࣮ߦ JOU3FTVMU&&SVO'VODUJPO"T.BJO &OUSZ'O *OQVU"SHW FOWQ ࢦఆͨؔ͠ΛNBJOؔͱݟͳ࣮ͯ͠ߦ ࣗͰҾΛਖ਼͘͠ઃఆ͢Ε NBJOؔͱܕͷҧ͏͔ؔΒ࣮ߦ͢Δ͜ͱՄೳ (FOFSJD7BMVF3FTVMUFOHJOFSVO'VODUJPO &OUSZ'O "SHT &&SVO4UBUJD$POTUSVDUPST%FTUSVDUPST USVF ϞδϡʔϧͷσετϥΫλΛ࣮ߦ
Slide 35
Slide 35 text
MJCDMBOHʹ͍ͭͯ DMBOHͷϥΠϒϥϦͬͯࠓྲྀߦͷMJCDMBOH ͕͍ͪ·͢ DMBOHͷϥΠϒϥϦ܉ஂ MJCDMBOH"3$.JHSBUF MJCDMBOH"45B MJCDMBOH"OBMZTJTB MJCDMBOH#BTJDB MJCDMBOH$PEF(FOB MJCDMBOH%SJWFSB MJCDMBOHTP DMBOHͷϥΠϒϥϦΛ $ݴޠΠϯλʔϑΣʔεͰ ϥοϓͨ͠ͷ
Slide 36
Slide 36 text
MJCDMBOHʹ͍ͭͯ MJCDMBOH͞Μ ߏจղੳΛߦ͏ͱ͜Ζ·Ͱ͔͠ϥοϓ͍ͯ͠ͳ͍ MJCDMBOHͰݡ͍γϯλοΫεͱ͔͋ͬͯ MJCDMBOHͰίϯύΠϧͱ͔ฉ͔ͳ͍ͷͦͷͨΊ $FSϥούΛհ͞ͳͯ͘ શͯͷϥΠϒϥϦΛར༻Ͱ͖Δ MJCDMBOHͱ͔͍ΒΜ͔ͬͨΜʂ $FSʹݶΔ
Slide 37
Slide 37 text
ϦϯΫ͖͢ϥΠϒϥϦ 2DMBOHͱ--7.ͷϥΠϒϥϦࢁ͋Γ·͕͢ɺ ࣗͷίʔυΛಈ͔ͨ͢Ίʹඞཁͳͷ ͲΕͱͲΕͰ͠ΐ͏ ͲͷγϯϘϧ͕ͲͷϥΠϒϥϦʹؚ·Ε͍ͯΔ͔ Ͳ͜ʹॻ͔Ε͍ͯͳ͍ "શ෦ϦϯΫ͔ͯ͠Βͭͮͭ֎ͯ͠Έͯɺ ϦϯΫΤϥʔ͕ग़ΔϠπͬͯΔʂ
Slide 38
Slide 38 text
ϦϯΫ͖͢ϥΠϒϥϦ MJCDMBOH"3$.JHSBUF MJCDMBOH"45B MJCDMBOH"OBMZTJTB MJCDMBOH#BTJDB MJCDMBOH$PEF(FOB MJCDMBOH%SJWFSB MJCDMBOH&EJUB MJCDMBOH'SPOU&OEB MJCDMBOH'SPOU&OE5PPM MJCDMBOH*OEFYB MJCDMBOH-FYB MJCDMBOH1BSTFB MJCDMBOH3FXSJUFB MJCDMBOH4FNBB MJCDMBOH4FSJBMJ[BUJPO MJC--7."TN1BSTFSB MJC--7."TN1SJOUFSB MJC--7.#JU3FBEFSB MJC--7.&YFDVUJPO&OHJOF MJC--7.+*5B MJC--7..$+*5B MJC--7.$PEF(FOB MJC--7.JQPB MJC--7.$PSFB MJC--7.-JOLFSB MJC--7.*OTUSVNFOUBUJPOB MJCEDPNQJMFͷ߹
Slide 39
Slide 39 text
ݱ࣌Ͱͷ՝ ࣮ߦ࣌ίϯύΠϧ͞Εͨίʔυͷؔݺͼग़࣌͠ ҾͷੵΈํ͕ಾ ݱঢ়όΠτҎԼͷQPEܕ͔ͤ͠ͳ͍ ϓϦϓϩηοαεςʔδͷΈ࣮ߦ͕Ͱ͖ͳ͍ ݱࡏ࣮࡞ۀத --7.ͷόʔδϣϯ্͕͕Δͨͼʹ ΠϯλʔϑΣʔε͕มΘΔ
Slide 40
Slide 40 text
݁ $Ͱ࣮ߦ࣌ίϯύΠϧ Ͱ͖Δ
Slide 41
Slide 41 text
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠