dwangocpp1-lt

20
C++ 初心者が C++11 parser を書いてみたはなし id:karupanerura

Transcript of dwangocpp1-lt

Page 1: dwangocpp1-lt

C++初心者がC++11で parserを書いてみたはなし

id:karupanerura

Page 2: dwangocpp1-lt

about me

• id:karupanerura

• github/twitter/…

• Perl/JavaScript/Java/C99/…

• emacs派 (自由なeditor)

• Mobile Factory, Inc.

• Social App Engineer

• Web/Android/HTML5/…

Page 3: dwangocpp1-lt

どのくらい初心者か• 8年くらいぶりにC++を書いた

• Cに毛が生えた程度のコードしか書いてなかった

• boostは触った事はあるけど忘れた

• templateを(C++では)使った事がない

• constexprを(存在は知っていたが)使った事がない

Page 4: dwangocpp1-lt

偽のC++プログラマ

Page 5: dwangocpp1-lt

なぜここにきているか• CでC++を書いたことはある

• ちゃんとC++勉強したい

• cocos2d-x 3.0 で良くなったらしいので触ってみたい

• XS(PerlのC bindingの実装用の独自言語)でC++が使える

• 勉強会に行くと最近の流行りとかが体系的に分かって良さそうだ

Page 6: dwangocpp1-lt

しかし、通常枠は補欠もたくさんいて入れそうにない

Page 7: dwangocpp1-lt

そうだ、LTをしよう

Page 8: dwangocpp1-lt

lisp1 parserC++11なんかだいぶ書きやすくなったらしいじゃん?

lisp parserくらいなら楽に書けるんじゃね?(雑)

Page 9: dwangocpp1-lt

便利だった機能

Page 10: dwangocpp1-lt

auto型推論サイコー!

Page 11: dwangocpp1-lt

auto• 「あー。やっぱここの型変えないとだめだわー。」

• みたいなときに、書き換える箇所が少なくなる。

• 型の名前がtemplateによってめっちゃ長くなってしまったときでも、「autoあるし、まあ、いいよ。仕方ないよね。」って思えて優しい気持ちになれる

• そもそも型名がめっちゃ長くなるようなコードは筋が悪い?

Page 12: dwangocpp1-lt

std::shared_ptr/std::unique_ptrGCサイコー!

Page 13: dwangocpp1-lt

smart pointer• ポインタ事故

• deleteのタイミングミスるとsegvして死ぬ

• deleteを忘れるとmemory leakして死ぬ

• shared_ptrを使うと参照をカウントして、参照している箇所が0になれば勝手に解放してくれる

• 安全にポインタが使える

Page 14: dwangocpp1-lt

smart pointer• うっかり多用し過ぎるとめっちゃ長くなる

• vector<shared_ptr<Foo<shared_ptr<Bar>>>>

• は????????? ってなる

• オブジェクトのライフサイクルをちゃんと考えて設計しないとこうなる

• 自戒

Page 15: dwangocpp1-lt

for(type var : array)foreachサイコー!

Page 16: dwangocpp1-lt

for(type var : array)

• Javaの拡張for文みたいなやつがついにC++に!!

• iteratorとかを使って素のc likeなforを書くより遥かにミスが少なくなってよい

• autoと組み合わせる事で動的型付け言語でループ書くのと大差無いくらいスッキリする

• 普通にループ回すだけなら使わない手はない

Page 17: dwangocpp1-lt

で、実装は?• github.com/karupanerura/cpp-mylisp

• に上げるつもりだったけど上げてない

• 中3女子の人のconstexprに関する発表と成果物に感銘を受けて「オブジェクト志向サイコー!」って感じで書いてたparserのコードを全て捨てたくなった

• というか、設計が雑過ぎて相互includeが出来てredefinition errorが出てモチベーションが枯れた

Page 18: dwangocpp1-lt

これから

• constexprを使ってリファクタリングしてみる

• 理解できたら、Sprout.Weed を使ってみる

• constexprサイコー!って言いたい

• BOOST_PPで頑張ってみる

• マクロの深淵を覗いてみる

Page 19: dwangocpp1-lt

参考書

• http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml

Page 20: dwangocpp1-lt

感想

• C++おくがふかい

• まじでおくがふかい

• 今日1日でだいぶとっかかりつかめた気がする

• 今日1日でコンパイル時処理にだいぶ染まった気がする