Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
210
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
220
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
640
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
230
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
3
350
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
240
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
2
2.8k
2026/09/10 Spring_Bootから_Jakarta_EE_MicroProfileへの移行
megascus
0
240
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
920
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
270
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
330
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
390
RailsConf 2023
tenderlove
30
1.5k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
My Coaching Mixtape
mlcsv
0
310
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Everyday Curiosity
cassininazir
0
310
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
HDC tutorial
michielstock
2
850
The Pragmatic Product Professional
lauravandoore
37
7.4k
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