dwangocpp1-lt
-
Upload
karupanerura-xmp -
Category
Technology
-
view
734 -
download
0
Transcript of dwangocpp1-lt
C++初心者がC++11で parserを書いてみたはなし
id:karupanerura
about me
• id:karupanerura
• github/twitter/…
• Perl/JavaScript/Java/C99/…
• emacs派 (自由なeditor)
• Mobile Factory, Inc.
• Social App Engineer
• Web/Android/HTML5/…
どのくらい初心者か• 8年くらいぶりにC++を書いた
• Cに毛が生えた程度のコードしか書いてなかった
• boostは触った事はあるけど忘れた
• templateを(C++では)使った事がない
• constexprを(存在は知っていたが)使った事がない
偽のC++プログラマ
なぜここにきているか• CでC++を書いたことはある
• ちゃんとC++勉強したい
• cocos2d-x 3.0 で良くなったらしいので触ってみたい
• XS(PerlのC bindingの実装用の独自言語)でC++が使える
• 勉強会に行くと最近の流行りとかが体系的に分かって良さそうだ
しかし、通常枠は補欠もたくさんいて入れそうにない
そうだ、LTをしよう
lisp1 parserC++11なんかだいぶ書きやすくなったらしいじゃん?
lisp parserくらいなら楽に書けるんじゃね?(雑)
便利だった機能
auto型推論サイコー!
auto• 「あー。やっぱここの型変えないとだめだわー。」
• みたいなときに、書き換える箇所が少なくなる。
• 型の名前がtemplateによってめっちゃ長くなってしまったときでも、「autoあるし、まあ、いいよ。仕方ないよね。」って思えて優しい気持ちになれる
• そもそも型名がめっちゃ長くなるようなコードは筋が悪い?
std::shared_ptr/std::unique_ptrGCサイコー!
smart pointer• ポインタ事故
• deleteのタイミングミスるとsegvして死ぬ
• deleteを忘れるとmemory leakして死ぬ
• shared_ptrを使うと参照をカウントして、参照している箇所が0になれば勝手に解放してくれる
• 安全にポインタが使える
smart pointer• うっかり多用し過ぎるとめっちゃ長くなる
• vector<shared_ptr<Foo<shared_ptr<Bar>>>>
• は????????? ってなる
• オブジェクトのライフサイクルをちゃんと考えて設計しないとこうなる
• 自戒
for(type var : array)foreachサイコー!
for(type var : array)
• Javaの拡張for文みたいなやつがついにC++に!!
• iteratorとかを使って素のc likeなforを書くより遥かにミスが少なくなってよい
• autoと組み合わせる事で動的型付け言語でループ書くのと大差無いくらいスッキリする
• 普通にループ回すだけなら使わない手はない
で、実装は?• github.com/karupanerura/cpp-mylisp
• に上げるつもりだったけど上げてない
• 中3女子の人のconstexprに関する発表と成果物に感銘を受けて「オブジェクト志向サイコー!」って感じで書いてたparserのコードを全て捨てたくなった
• というか、設計が雑過ぎて相互includeが出来てredefinition errorが出てモチベーションが枯れた
これから
• constexprを使ってリファクタリングしてみる
• 理解できたら、Sprout.Weed を使ってみる
• constexprサイコー!って言いたい
• BOOST_PPで頑張ってみる
• マクロの深淵を覗いてみる
参考書
• http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml
感想
• C++おくがふかい
• まじでおくがふかい
• 今日1日でだいぶとっかかりつかめた気がする
• 今日1日でコンパイル時処理にだいぶ染まった気がする