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
hackers_champloo_2026_tidb
makocchi
0
160
夫婦で子育てするための育児標準化
codmoninc
PRO
0
340
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
How to Design Configuration for Rails Applications
willnet
1
780
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
870
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
110
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
250
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
Rust で関数型ドメインモデリング
takonda
0
140
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
180
Featured
See All Featured
Done Done
chrislema
187
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
My Coaching Mixtape
mlcsv
0
360
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
sira's awesome portfolio website redesign presentation
elsirapls
0
460
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
The Cult of Friendly URLs
andyhume
79
7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
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