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

ϦϯΧΛ࢖ΘͣʹͲ͏΍ͬͯ ґଘϥΠϒϥϦΛϦϯΫ͍ͯ͠Δͷ͔ EMGDO͸104*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

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠