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
840
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
LangChainでWebサイトの内容取得やGitHubソースコード取得
shukob
0
180
LangChainの現在とv0.3にむけて
os1ma
4
950
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
1
440
DroidKaigi 2024 - You will 💜 Becoming a fullstack developer with your Android skills
brah
0
110
Pythonで改めて考える「クラス(class)」の使いどころ
os1ma
11
2.7k
AndroidアプリのUIバリエーションをあの手この手で確認する / Check UI variations of Android apps by various means
tkmnzm
1
200
Why Prism?
kddnewton
4
1.7k
The Sequel to a Dream of Ruby Parser's Grammar
ydah
1
230
状態管理ライブラリZustandの導入から運用まで
k1tikurisu
3
470
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
1
700
Modern Angular with the NGRX Signal Store New Rules for Your Architecture @BASTA! 2024 in Mainz
manfredsteyer
PRO
0
190
React + TextAliveでカッコいいLyric Applicatioinを作ろう!!
tosuri13
0
410
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
124
18k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.6k
The Cult of Friendly URLs
andyhume
76
6k
Into the Great Unknown - MozCon
thekraken
29
1.4k
Building Applications with DynamoDB
mza
90
6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
227
52k
Web Components: a chance to create the future
zenorocha
309
42k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
GitHub's CSS Performance
jonrohan
1030
450k
The Illustrated Children's Guide to Kubernetes
chrisshort
47
48k
The Invisible Side of Design
smashingmag
296
50k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
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ͷੜ ▸
υΩϡϝϯτͷӾཡ
࠷ऴඪ ▸ $ Ͱͷ։ൃʹ͓͍͔ͯܽͤͳ͍ ύοέʔδϚωʔδϟ ▸ υΩϡϝϯτΛಡ·ͳͯ͘༻Ͱ͖Δײతͳ ΠϯλϑΣʔε ▸ ՄೳͰ͋ΕɼೖॻͰऔΓѻΘΕΔਫ४ͷ
҆ఆੑɾ৴པੑ