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
conanが使いづらいのでpoacを作っている話 / conan-to-poac
Search
Ken Matsui
August 26, 2018
Programming
2
870
conanが使いづらいのでpoacを作っている話 / conan-to-poac
Learn Languages 2018 in ODC でのプレゼン資料です
Ken Matsui
August 26, 2018
Tweet
Share
More Decks by Ken Matsui
See All by Ken Matsui
C++のパッケージマネージャ「poac」を開発した話 / Poac is a package manager for C++
matken
0
1.6k
Other Decks in Programming
See All in Programming
モテるデスク環境
mozumasu
3
1.4k
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
120
contribution to astral-sh/uv
shunsock
0
580
Introduce Hono CLI
yusukebe
6
3.3k
ノーコードからの脱出 -地獄のデスロード- / Escape from Base44
keisuke69
0
350
Module Proxyのマニアックな話 / Niche Topics in Module Proxy
kuro_kurorrr
0
1.3k
AIのバカさ加減に怒る前にやっておくこと
blueeventhorizon
0
140
GC25 Recap: The Code You Reviewed is Not the Code You Built / #newt_gophercon_tour
mazrean
0
140
オンデバイスAIとXcode
ryodeveloper
0
380
CSC509 Lecture 09
javiergs
PRO
0
280
釣り地図SNSにおける有料機能の実装
nokonoko1203
0
200
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
250
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
A better future with KSS
kneath
239
18k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Documentation Writing (for coders)
carmenintech
76
5.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Rails Girls Zürich Keynote
gr2m
95
14k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Transcript
DPOBO͕͍ʹ͍͘ͷͰQPBDΛ࡞ͬͨ NBULFO
DPOBO͕͍ʹ͍͘ͷͰQPBDΛ࡞ͬͨ NBULFO ࡞͍ͬͯΔ
ࣗݾհ ▸ দҪɹ݈ʢ,FO.BUTVJʣ ▸ ໋ཱؗେֶใཧֶ෦̎ੜ ▸ ະ౿ΫϦΤʔλ ▸ $ &MJYJS
&MN
▸ /PEFKTͷOQNZBSO ▸ &MJYJSͷIFY ▸ $ ͷDPOBO ▸ 3VTUͷDBSHP ▸
)BTLFMMͷDBCBM ৭ʑͳύοέʔδϚωʔδϟ
$ ͷDPOBO͍ͮΒ͍
ύοέʔδͷࢦఆ͕Θ͔ΓͮΒ͍ DPOBOpMFUYU <SFRVJSFT> )FMMP!NFNTIBSEUFTUJOH ύοέʔδ໊ όʔδϣϯ Ϣʔβ໊ νϟϯωϧ!?
ύοέʔδͷݕࡧํ๏͕Θ͔ΓͮΒ͍ url= h)ps:/ /api.bintray.com/conan/conan/conan-transit conan remote add conan-transit $url conan
search "Hello" -r=conan-transit
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
Ͳ͜Λݕࡧ͢ΕΑ͍ͷ͔Θ͔ΓͮΒ͍
ϓϩδΣΫτ໊ poac
ϓϩδΣΫτ໊ͷ༝དྷᶃ Plus of Cͷpocͩͱඪ͕େྔʹऔΒΕ͍ͯͯා͔ͬͨ
ϓϩδΣΫτ໊ͷ༝དྷᶃ ൃԻʹӨڹΛ༩͑ͳͦ͞͏ͳԻΛೖΕͯɼpoacʹͨ͠
ϓϩδΣΫτ໊ͷ༝དྷᶄ ίϚϯυͱͯ͠Կೖྗ͢ΔͷͰɼ ଧͪ͘͢ɼยख͚ͩʹෛ୲͕ภΒͳ͍ࣄΛॏࢹ ྲྀΕΔΑ͏ʹଧͭ͜ͱ͕Մೳ P, O ӈख A, C ࠨख
ϓϩδΣΫτ໊ͷ༝དྷᶅ /p/࠷໌Δ͍ҹΛ༩͑Δ ग़యɿຊޠΦϊϚτϖͷجຊײ࣍ݩͱຊޠԻײૉͷجຊϨϕϧʹ͍ͭͯ (http://hdl.handle.net/10112/12311)
ϓϩδΣΫτ໊ͷ༝དྷᶅ /p/࠷ॊΒ͔͍ҹΛ༩͑Δ ग़యɿຊޠΦϊϚτϖͷجຊײ࣍ݩͱຊޠԻײૉͷجຊϨϕϧʹ͍ͭͯ (http://hdl.handle.net/10112/12311)
ެ։ GitHub: https://github.com/poacpm Website: https://poac.pm (pm = package manager)
શମͷ֓ཁ Elm Frontend Elixir Backend 4FSWFS Kubernetes AWS EC2 $MJFOU
C++
ΫϥΠΞϯταΠυ main.cpp inference.hpp install.hpp exception [ subcmd or option?, arg2,
arg3 ] subcmd or option? -> install [ arg2, arg3 ] $ poac install arg2 arg3
ΫϥΠΞϯταΠυͷਪաఔ 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"); }
ΫϥΠΞϯταΠυͷਪաఔ // 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](); }
αϒίϚϯυ ▸ JOTUBMM ύοέʔδΛΠϯετʔϧ ▸ VOJOTUBMM
ύοέʔδΛΞϯΠϯετʔϧ ▸ TFBSDI ύοέʔδΛݕࡧ ▸ JOJU QPBDZNMϑΝΠϧΛੜ ▸ OFX ϓϩδΣΫτςϯϓϨʔτΛੜ ▸ QVCMJTI ࣗ࡞ύοέʔδΛެ։ ▸ MPHJO ϩάΠϯ͢Δ ▸ SPPU QPBDͷΠϯετʔϧઌύεΛදࣔ ▸ DBDIF DBDIFͷૢ࡞Λߦ͏ ▸ VQEBUF ύοέʔδΛΞοϓσʔτ ▸ EPD υΩϡϝϯτΛੜ ▸ CVJME Ϗϧυ͢Δ ▸ SVO Ϗϧυͱ࣮ߦΛߦ͏ ͕࣌ؒ ͋Ε ࣮༧ఆ
αϒίϚϯυ ▸ ύοέʔδͷΠϯετʔϧઌΛϓϩδΣΫτ͚ͩʹہॴԽͰ͖Δʢ ڥΛԚ͞ͳ͍ʣɼ͘͠άϩʔόϧԽͰ͖Δ ▸ $ ͷͷૉΒ͍͠ࢿ࢈ΛҰͭͷج൫ͰవΊ্͛Δ͜ͱ͕Ͱ͖Δ ▸ ΧϨϯτσΟϨΫτϦʹґଘؔΛవΊΔͱɼΠϯΫϧʔυαʔνύ εͳͲΛࢦఆ͢Δඞཁ͕͋Δ͕ɼͦΕΒΛϥοϐϯάͯ͠Ϣʔβ͕ҙ
ࣝ͢Δ͜ͱͳ͘ɼϏϧυ࣮ߦͳͲΛϚωδϝϯτͯ͘͠ΕΔ ▸ DBDIFΛར༻͢Δ͜ͱͰɼߴͳΠϯετʔϧɾϏϧυ͕Ͱ͖Δ ▸ υΩϡϝϯτͷੜΛߦͳͬͯ͘ΕΔ
αʔόʔαΠυ Website্ͰͰ͖Δ͜ͱɾ࣮ݱ͢Δ͜ͱ ▸ (JU)VCΞΧϯτΛ༻ͯ͠ΞΧϯτ࡞ ͱϩάΠϯ ▸ ύοέʔδͷݕࡧɾμϯϩʔυ ▸ $-*༻ͷ"DDFTTUPLFOͷੜ ▸
υΩϡϝϯτͷӾཡ
࠷ऴඪ ▸ $ Ͱͷ։ൃʹ͓͍͔ͯܽͤͳ͍ ύοέʔδϚωʔδϟ ▸ υΩϡϝϯτΛಡ·ͳͯ͘༻Ͱ͖Δײతͳ ΠϯλϑΣʔε ▸ ՄೳͰ͋ΕɼೖॻͰऔΓѻΘΕΔਫ४ͷ
҆ఆੑɾ৴པੑ