Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
C++のパッケージマネージャ「poac」を開発した話 / Poac is a package ...
Search
Ken Matsui
February 20, 2019
Technology
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C++のパッケージマネージャ「poac」を開発した話 / Poac is a package manager for C++
Ken Matsui
February 20, 2019
More Decks by Ken Matsui
See All by Ken Matsui
conanが使いづらいのでpoacを作っている話 / conan-to-poac
matken
2
890
Other Decks in Technology
See All in Technology
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
Kiro Crewをはじめよう
kizawa2020
1
160
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
Refining Active Record
shugo
0
150
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
190
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
Local CI × GitHub Actions
gogutan
2
190
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
940
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Docker and Python
trallard
47
4.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
WENDY [Excerpt]
tessaabrams
14
40k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Odyssey Design
rkendrick25
PRO
2
870
Navigating Weather and Climate Data
rabernat
0
560
Product Roadmaps are Hard
iamctodd
55
13k
Unsuck your backbone
ammeep
672
58k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Marketing to machines
jonoalderson
1
5.9k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Transcript
$ ͷύοέʔδϚωʔδϟ ʮQPBDʯΛ։ൃͨ͠ ·͚ͭΜ !NBULFO ໋ཱؗେֶใཧֶ෦̎ੜ
ύοέʔδϚωʔδϟͱ ϥΠϒϥϦͷஔόʔδϣϯཧɼґଘؔ ղܾͷࡶͳ࡞ۀΛϚωδϝϯτͯ͘͠ΕΔ
▸ /PEFKTͷOQNZBSO ▸ &MJYJSͷIFY ▸ $ ͷDPOBO ▸ 3VTUͷDBSHP ▸
)BTLFMMͷDBCBM ৭ʑͳύοέʔδϚωʔδϟ
$ ͷDPOBO͍ͮΒ͍
poac ▸ ΠϯλϑΣʔε͕ײత ▸ ཚཱͨ͠ྑ͍ࢿ࢈ΛవΊͯఏڙ ▸ ύοέʔδϚωʔδϟ݉ϏϧυγεςϜ ▸ GitHub: https://github.com/poacpm
Website: https://poac.io
None
QPBDͷ༝དྷᶃ Plus of Cͷpocͩͱඪ͕େྔʹऔΒΕ͍ͯͯා͔ͬͨ
ൃԻʹӨڹΛ༩͑ͳͦ͞͏ͳԻΛೖΕͯɼpoacʹͨ͠ QPBDͷ༝དྷᶃ
QPBDͷ༝དྷᶄ ίϚϯυͱͯ͠Կೖྗ͢ΔͷͰɼ ଧͪ͘͢ɼยख͚ͩʹෛ୲͕ภΒͳ͍ࣄΛॏࢹ ྲྀΕΔΑ͏ʹଧͭ͜ͱ͕Մೳ P, O ӈख A, C ࠨख
QPBDͷ༝དྷᶅ /p/࠷໌Δ͍ҹΛ༩͑Δ ग़యɿຊޠΦϊϚτϖͷجຊײ࣍ݩͱຊޠԻײૉͷجຊϨϕϧʹ͍ͭͯ (http://hdl.handle.net/10112/12311)
QPBDͷ༝དྷᶅ /p/࠷ॊΒ͔͍ҹΛ༩͑Δ ग़యɿຊޠΦϊϚτϖͷجຊײ࣍ݩͱຊޠԻײૉͷجຊϨϕϧʹ͍ͭͯ (http://hdl.handle.net/10112/12311)
QPBDͷϩΰ ੨ ਫ ւ ޫ ਂւ C++ͷҋ
QPBDͷϩΰ ޫ C++ͷҋ
ରԠ04 ▸ NBD04 TJFSSB ▸ -JOVY Y@ ▸
8JOEPXT 84-
༻ٕज़ 4FSWFS Frontend Elm firebase hos2ng $MJFOU C++ Backend TypeScript
firebase func2ons Upload API Golang App Engine
▸ JOTUBMM ύοέʔδΛΠϯετʔϧ ▸ VOJOTUBMM ύοέʔδΛΞϯΠϯετʔϧ ▸
TFBSDI ύοέʔδΛݕࡧ ▸ JOJU QPBDZNMϑΝΠϧΛੜ ▸ OFX ϓϩδΣΫτςϯϓϨʔτΛੜ ▸ QVCMJTI ࣗ࡞ύοέʔδΛެ։ ▸ UFTU ςετΛߦ͏ ▸ VQEBUF ύοέʔδΛΞοϓσʔτ ▸ CVJME Ϗϧυ͢Δ ▸ SVO Ϗϧυͱ࣮ߦΛߦ͏ αϒίϚϯυ Ұ෦
None
None
None
None
ΞʔΩςΫνϟ $ poac args... vector<string> Command I/O Builder Resolver components
Inference
*OGFSFODF template <typename S, typename OpTypeE, typename VS, typename=std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> auto
_apply(S&& func, const OpTypeE& cmd, VS&& arg) { return branch(std::move(func), cmd, std::move(arg)); } template <typename S, typename VS, typename=std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> std::string apply(S&& func, const S& cmd, VS&& arg) { namespace except = core::exception; if (auto itr = subcmd_map.find(cmd); itr != subcmd_map.end()) return _apply(std::move(func), itr->second, std::move(arg)); else if (itr = option_map.find(cmd); itr != option_map.end()) return _apply(std::move(func), itr->second, std::move(arg)); else throw except::invalid_first_arg("Invalid argument"); }
*OGFSFODF // Create function pointer table: { &func<0>, &func<1>, ...
} // Execute function: &func<idx>[idx]() template <size_t... Is, typename VS, typename = std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> static auto execute(std::index_sequence<Is...>, int idx, VS&& vs) { // Return ""(empty string) because match the type to the other two functions. return make_array({ +[](VS&& vs){ return (op_type_list_t::at_t<Is>()(std::move(vs)), ""); }... })[idx](std::move(vs)); } template <size_t... Is> static auto summary(std::index_sequence<Is...>, int idx) { return make_array({ +[]{ return op_type_list_t::at_t<Is>::summary(); }... })[idx](); } template <size_t... Is> static auto options(std::index_sequence<Is...>, int idx) { return make_array({ +[]{ return op_type_list_t::at_t<Is>::options(); }... })[idx](); }
($$ͷόά #if BOOST_COMP_GNUC template <typename T, typename VS, typename =
std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> static auto execute2(VS&& vs) { return (T()(std::move(vs)), ""); } template <typename T> static auto summary2() { return T::summary(); } template <typename T> static auto options2() { return T::options(); } template <size_t... Is, typename VS, typename = std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> static auto execute(std::index_sequence<Is...>, int idx, VS&& vs) { using func_t = decltype(&execute2<op_type_list_t::at_t<0>, VS>); static func_t func_table[] = { &execute2<op_type_list_t::at_t<Is>>... }; return func_table[idx](std::move(vs)); } template <size_t... Is> static auto summary(std::index_sequence<Is...>, int idx) { using func_t = decltype(&summary2<op_type_list_t::at_t<0>>); static func_t func_table[] = { &summary2<op_type_list_t::at_t<Is>>... }; return func_table[idx](); } template <size_t... Is> static auto options(std::index_sequence<Is...>, int idx) { using func_t = decltype(&options2<op_type_list_t::at_t<0>>); static func_t func_table[] = { &options2<op_type_list_t::at_t<Is>>... }; return func_table[idx](); } #else
ΞʔΩςΫνϟ $ poac args... vector<string> Inference Command I/O Builder Resolver
components
3FTPMWFS core semver SAT solver
compiler shell-command core #VJMEFS
*0 cli network file
ΞʔΩςΫνϟ $ poac args... vector<string> Inference Command I/O Resolver Builder
components
ΞʔΩςΫνϟ vect B Re com Client API
Client ΞʔΩςΫνϟ API
"1* #BTJD 6QMPBE (PMBOH 5ZQFTDSJQU
None
ࠓޙ͍ͬͯ͘͜ͱ ▸ ύοέʔδͷՃɾඋ ▸ υΩϡϝϯτͷ֦ॆ ▸ ϏϧυγεςϜվળ ▸ ͷվળ ▸
ιʔείʔυͷվળ ▸ ΤσΟλͷ֦ுػೳ։ൃ ▸ ϏϧυࡁΈύοέʔδͷΠϯετʔϧ ▸ άϩʔόϧΠϯετʔϧ ▸ EFW%FQFOEFODZɾUFTU%FQFOEFODZ ▸ EPDίϚϯυɾGNUίϚϯυ
poac ▸ ΠϯλϑΣʔε͕ײత ▸ ཚཱͨ͠ྑ͍ࢿ࢈ΛవΊͯఏڙ ▸ ύοέʔδϚωʔδϟ݉ϏϧυγεςϜ ▸ GitHub: https://github.com/poacpm
Website: https://poac.io