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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
250
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
170
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
210
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.5k
Bits AI を制するものは Datadog を制す / The player that controls Bits AI, controls Datadog
kaminashi
0
140
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
100
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
460
LanceDB入門
mocobeta
9
630
AIにブラウザを触らせて、E2EテストをPlaywrightで書く
koji_kawamura
0
170
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
590
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
850
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
410
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Building Applications with DynamoDB
mza
96
7.2k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
470
Unsuck your backbone
ammeep
672
58k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
430
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
260
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
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