SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
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 parser
C++11なんかだいぶ書きやすくなったらしいじゃん?
lisp parserくらいなら楽に書けるんじゃね?(雑)
便利だった機能
auto
型推論サイコー!
auto
• 「あー。やっぱここの型変えないとだめだわー。」
• みたいなときに、書き換える箇所が少なくなる。
• 型の名前がtemplateによってめっちゃ長くなってしまっ
たときでも、「autoあるし、まあ、いいよ。仕方ないよ
ね。」って思えて優しい気持ちになれる
• そもそも型名がめっちゃ長くなるようなコードは筋が
悪い?
std::shared_ptr/std::unique_ptr
GCサイコー!
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日でコンパイル時処理にだいぶ染まった気がする

Más contenido relacionado

Destacado (9)

Why we use mruby with Perl5?
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
 
engineer-life
engineer-lifeengineer-life
engineer-life
 
Aniki has come
Aniki has comeAniki has come
Aniki has come
 
The Crystal language *recently* update
The Crystal language *recently* updateThe Crystal language *recently* update
The Crystal language *recently* update
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
 
KOWAZA for mackerel
KOWAZA for mackerelKOWAZA for mackerel
KOWAZA for mackerel
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
 
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
 

Similar a dwangocpp1-lt

constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
 
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなことC++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
Toshihiko Ando
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
 

Similar a dwangocpp1-lt (20)

C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使うRustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
C++の復習
C++の復習C++の復習
C++の復習
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなことC++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Emscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョンEmscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョン
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
 
プログラムの読み方
プログラムの読み方プログラムの読み方
プログラムの読み方
 
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみたPHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
5分でわかるGoのポインタ
5分でわかるGoのポインタ5分でわかるGoのポインタ
5分でわかるGoのポインタ
 

Más de karupanerura

モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
karupanerura
 
Yapc asia-2012-lt-thon
Yapc asia-2012-lt-thonYapc asia-2012-lt-thon
Yapc asia-2012-lt-thon
karupanerura
 
ぼくがかんがえたさいきょうのMvc
ぼくがかんがえたさいきょうのMvcぼくがかんがえたさいきょうのMvc
ぼくがかんがえたさいきょうのMvc
karupanerura
 
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
karupanerura
 

Más de karupanerura (20)

Perl5 VS JSON
Perl5 VS JSONPerl5 VS JSON
Perl5 VS JSON
 
コンテキストと仲良く
コンテキストと仲良くコンテキストと仲良く
コンテキストと仲良く
 
The plan of Aniki 2.0
The plan of Aniki 2.0The plan of Aniki 2.0
The plan of Aniki 2.0
 
Aniki::Internal
Aniki::InternalAniki::Internal
Aniki::Internal
 
DateTimeX::Moment
DateTimeX::MomentDateTimeX::Moment
DateTimeX::Moment
 
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
 
router-simple.cr
router-simple.crrouter-simple.cr
router-simple.cr
 
はかたの塩
はかたの塩はかたの塩
はかたの塩
 
Gotanda.pmの紹介
Gotanda.pmの紹介Gotanda.pmの紹介
Gotanda.pmの紹介
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
Perlにおけるclass実装パターン
Perlにおけるclass実装パターンPerlにおけるclass実装パターン
Perlにおけるclass実装パターン
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
 
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programming
 
Hachioji.pm #40
Hachioji.pm #40Hachioji.pm #40
Hachioji.pm #40
 
Hachioji.pm #39
Hachioji.pm #39Hachioji.pm #39
Hachioji.pm #39
 
perl5の日付時刻処理とか
perl5の日付時刻処理とかperl5の日付時刻処理とか
perl5の日付時刻処理とか
 
Yapc asia-2012-lt-thon
Yapc asia-2012-lt-thonYapc asia-2012-lt-thon
Yapc asia-2012-lt-thon
 
ぼくがかんがえたさいきょうのMvc
ぼくがかんがえたさいきょうのMvcぼくがかんがえたさいきょうのMvc
ぼくがかんがえたさいきょうのMvc
 
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
 

dwangocpp1-lt