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
AIコーディングAgentとの向き合い方
eycjur
0
270
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
20
11k
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
530
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
450
AWS発のAIエディタKiroを使ってみた
iriikeita
1
180
概念モデル→論理モデルで気をつけていること
sunnyone
1
110
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
390
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
590
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
270
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
3
200
個人軟體時代
ethanhuang13
0
320
Featured
See All Featured
Facilitating Awesome Meetings
lara
55
6.5k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Into the Great Unknown - MozCon
thekraken
40
2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
BBQ
matthewcrist
89
9.8k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Language of Interfaces
destraynor
161
25k
How STYLIGHT went responsive
nonsquared
100
5.8k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Optimizing for Happiness
mojombo
379
70k
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ͷੜ ▸
υΩϡϝϯτͷӾཡ
࠷ऴඪ ▸ $ Ͱͷ։ൃʹ͓͍͔ͯܽͤͳ͍ ύοέʔδϚωʔδϟ ▸ υΩϡϝϯτΛಡ·ͳͯ͘༻Ͱ͖Δײతͳ ΠϯλϑΣʔε ▸ ՄೳͰ͋ΕɼೖॻͰऔΓѻΘΕΔਫ४ͷ
҆ఆੑɾ৴པੑ