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
Fluid Templating in TYPO3 14
s2b
0
130
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.2k
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
730
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
Data-Centric Kaggle
isax1015
2
780
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.2k
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
210
The browser strikes back
jonoalderson
0
380
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Code Reviewing Like a Champion
maltzj
527
40k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
120
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
50
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Ethics towards AI in product and experience design
skipperchong
2
190
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ͷੜ ▸
υΩϡϝϯτͷӾཡ
࠷ऴඪ ▸ $ Ͱͷ։ൃʹ͓͍͔ͯܽͤͳ͍ ύοέʔδϚωʔδϟ ▸ υΩϡϝϯτΛಡ·ͳͯ͘༻Ͱ͖Δײతͳ ΠϯλϑΣʔε ▸ ՄೳͰ͋ΕɼೖॻͰऔΓѻΘΕΔਫ४ͷ
҆ఆੑɾ৴པੑ