SlideShare a Scribd company logo
1 of 27
Download to read offline
Boost.Spirit.QiとLLVM APIで
遊ぼう	
NV(@nvsofts)
自己紹介	
•  HN:NV
•  Twitter:@nvsoftsでやっています(*´ω`*)
•  Gentoo大大学院修士2年
•  (株)ウサギィでC++とかDとかPythonとかを使ってバイト
しています
•  昔にプログラミング言語KQなんてものを作りました
本日のテーマについて	
•  この2つを使ってプログラミング言語の処理系を作るとき
の話
•  Boost.Spirit.Qi
•  LLVM API
(こう書くと多方面からフルボッコにされそうですが…)
こんな感じに
作成した処理系のソース	
•  2つのライブラリを使って作成した処理系は、GitHubに公
開しています(少し前に作ったものです)
https://github.com/nvsofts/GikoLLVM/
•  コードをちらっと見ながらだと分かりやすいかも…?
•  個人差があります
Boost.Spirit.Qiとはなんぞや	
•  オープンソースライブラリであるBoost C++ Librariesに
含まれている構文解析のためのライブラリ
•  Qiは「キー」って読むらしい(from:BoostConの動画)
•  演算子オーバーロードを巧みに使い、EBNFっぽいコード
を書くだけで構文解析器ができあがる
•  構文規則に対するアクションは、Boost.Phoenixという無
名関数記述ライブラリが使うことで楽に書ける
Boost.Sprit.Qiの使い方	
•  基本的に文法を定義して、以下の関数を使って構文解析
を行うことで使う
•  boost::spirit::qi::phrase_parse!
•  空白など、解析時に飛ばしたいもの(Skipper)があるときに使う
•  boost::spirit::qi::parse!
•  上のものとは違い、飛ばしたいものがないときに使う
•  ここでは、空白を飛ばしたいのでphrase_parseを使う
Boost.Sprit.Qiの使い方	
•  phrase_parseのコード例
using namespace boost::spirit;!
!
std::string input;!
std::vector<int> result;!
auto it = input.begin();!
!
bool success = qi::phrase_parse(it,
input.end(), int_ % ',', ascii::space, result);!
•  解析が成功していればsuccessがtrueかつ、it ==
input.end()になっている
ルール	
•  文法は1つ以上のルールで構成され、
boost::spirit::qi::ruleのインスタンス
•  セマンティックアクションと呼ばれる、そのルールが使わ
れたときに呼ばれる関数を設定できる
•  当然、渡すのは関数オブジェクトでもOK
•  しかし、C++11のラムダ式や関数オブジェクトでやるには少
し面倒な要素が含まれているので、Boost.Phoenixを使った
無名関数を使うのがおすすめ
標準で用意されている文字種	
名前	
 概要	
 型	
char_ 任意の1文字	
 char	
alpha アルファベット1文字	
 char	
digit 数字1文字	
 char	
alnum アルファベットまたは数字1文字	
 char	
print 印刷可能な文字1文字	
 char	
int_ 符号付き整数	
 int	
uint_ 符号無し整数 unsigned int
float_ 単精度浮動小数点数	
 float	
double_ 倍精度浮動小数点数	
 double	
bool_ 真偽値	
 bool
ルール同士の結合	
•  ルール同士の結合には、>>演算子を使う
•  注意するべきことは、>>演算子が入るところにはSkipper
のような無視するべき文字列が入ることがあること
•  これは、識別子のような途中にSkipperが入るとまずい場合
に遭遇したときに対応しないといけない
•  途中でSkipperが入って欲しくない場合は、lexeme[〜]で
囲えばOK
ルールの繰り返しと選択	
•  標準の文字種はほとんど1文字のみ読むもので、複数文
字読みたい場合は繰り返しルールを適用する必要がある
•  0回以上の繰り返しにはルールの前に*演算子を付ける
•  1回以上の繰り返しにはルールの前に+演算子を付ける
•  また、複数のルールのうちどれかを選択するようなルー
ルを記述する場合がある
•  ルールの選択には|(パイプ記号)演算子を使う
Boost.Phoenixの概要	
•  プレースホルダーと組み合わせると、演算子オーバー
ロードを駆使して目的の関数オブジェクトを作ってくれる
•  プレースホルダーとして以下のものなどがある
•  _1, _2, …, _N!
•  N番目の引数、Boost.Spirit.Qiではほとんど_1のみ使用
•  _val!
•  ルールや文法における、最終的に返す値
•  _pass!
•  falseを代入すると、強制的に構文解析を失敗させる
Boost.Phoenixの概要	
•  基本的に、プレースホルダーを使ってやりたいことを書け
ばOK
•  複数の処理を行いたい場合は、カンマで区切る
•  しかし、一部の処理は記法が違うので注意
•  例:new演算子
•  _new<T>(引数)!
•  例:コンテナへのpush_back!
•  push_back(対象, 値)!
Boost.Phoenixの概要	
•  構造体やクラスへのアクセス
•  phoenix::at_c<N>を使う	
•  例:返す構造体の0番目の要素に1番目の引数を代入する
phoenix::at_c<0>(_val) = _1!
!
•  独自の構造体やクラスを使う場合は、
BOOST_FUSION_ADAPT_STRUCTマクロでの登録が必要!
複雑な文法を定義する	
•  前の例では簡単な文法だったので引数に入れた
•  しかし、複雑なルールを含んだ文法になる場合は、別途
構造体等を定義してそこに入れる方が良い場合もある
•  文法はboost::spirit::qi::grammarを継承して
作る(テンプレート引数は最高で4つ)
•  Iterator:使用するイテレータの型
•  A1:最終的に返す型、()を付ける
•  A2:飛ばすべきものを示した文法(Skipper)の型
•  A3:文法内のローカル変数の型、通常は使わない
複雑な文法を定義する	
•  カンマ区切りの整数を解析してstd::vector<int>として返すような文法の例
template <typename Iter, typename Skip>!
struct grammar : qi::grammar<Iter, std::vector<int>(),
Skip>!
{!
template <typename T>!
using rule = qi::rule<Iterator, T, Skipper>;!
!
rule<std::vector<int>()> int_rule;!
!
grammar() : grammar::base_type(int_rule)!
{!
int_rule = int_[push_back(_val, _1)] >> ',' >>
*(int_[push_back(_val, _1)]); !
}!
};
Boost.Spirit.Qiで抽象構文解析木(AST)を作る	
•  ルールを書き、それに対するセマンティックアクション内で
ルールに対応するASTのインスタンスを生成して返す
•  _newが必要なのはこのため
•  例
template <typename T>
using rule = qi::rule<Iterator, T, Skipper>;
rule<AssignAST *()> assign;!
assign = id[_val = new_<AssignAST>(_1)] >> '='
>> expr[phoenix::at_c<1>(*_val) = _1];!
(ここで、idは識別子、exprは式を表すルールとする)!
ASTはできたが…	
•  このASTをネイティブコードへ変換しないといけない
•  ネイティブコードへの変換は気が遠くなるような作業
•  LLVM APIなら、ネイティブコードへの変換を比較的容易
に行える
LLVMとはなんぞや	
•  任意のプログラミング言語に対応可能なオープンソース
のコンパイラ基盤
•  Clangなどで使われている
•  仮想機械をターゲットとしたIRと呼ばれる中間コードを扱
う
•  IRはネイティブコードへ変換することができる
•  つまり、IRへの変換プログラムだけ書けばどんなプログラミ
ング言語にも対応できる
•  C++で記述されており、APIも豊富
LLVM IRを出力する	
•  LLVM IRはC++においてはクラスのインスタンスで表現さ
れるが、インスタンスを作る方法も物によってまちまち
•  そこで、LLVM APIにあるIRBuilderを使うことで、簡単
にLLVM IRのC++による表現を作ることができる
•  IRBuilderに含まれる関数の一部
•  CreateAdd(左辺値, 右辺値, 命令に付けるラベル)
•  加算命令を生成する
•  CreateCall(関数, 引数の配列)
•  関数の呼び出し命令を生成する
IRBuilderの実際の使用例	
•  2項演算子の処理部分
•  ASTの注目している葉に含まれている演算子の情報から
対応する命令を生成する関数を呼んでいる
std::string &op = bin_expr->getOp();
if (op == "+") {
return this->builder->CreateAdd(v_lhs, v_rhs, "add");
}else if (op == "-") {
return this->builder->CreateSub(v_lhs, v_rhs, "sub");
}else if (op == "*") {
return this->builder->CreateMul(v_lhs, v_rhs, "mul");
}else if (op == "/") {
return this->builder->CreateSDiv(v_lhs, v_rhs, "div");
}else if (op == "%") {
return this->builder->CreateSRem(v_lhs, v_rhs, "rem");
}
LLVM IRのファイルへの出力	
•  LLVM IRのC++による表現ができあがったら、ファイルへ
出力する
•  これにはraw_fd_ostreamとWriteBitcodeToFile
関数を使う
using namespace llvm;
Module *module;
std::error_code error;
raw_fd_ostream raw_stream("out.bc", error, sys::fs::OpenFlags::F_RW);
WriteBitcodeToFile(module, raw_stream);
raw_stream.close();
ネイティブコードへの変換	
•  ネイティブコードへの変換は、llvm-asコマンドを使う
•  $ llvm-as <*.bcへのパス>!
•  これだけで、ネイティブなアセンブリ言語のコードを得られる
•  Clangが入っているのなら、clangコマンドに直接*.bcを投
げ込んでも大丈夫
•  ネイティブコードに変換したら、あとは用意した標準ライブ
ラリとリンクして実行可能なファイルを得るだけ
全体の流れ	
1.  ソースコードを読み込む
2.  Boost.Spirit.Qiによってソースコードの構文解析を行
い、ASTを作成する
3.  作成されたASTをもとに、LLVM APIのIRBuilderで
LLVM IRを作成する
4.  作成されたLLVM IRをファイルへ出力する
5.  ファイルへ出力されたLLVM IRをネイティブコードへと
変換し、実行可能な形式にする
参考になりそうなページや本	
•  Let’s BoostのBoost.Spiritの項目
•  http://www.kmonos.net/alang/boost/classes/spirit.html
•  きつねさんでもわかるLLVM
•  少し現在のLLVMでは動かないコードがありますが、基本は
おさえています
•  ライブラリのドキュメントやDoxygen
•  http://www.boost.org/libs/spirit/
•  http://llvm.org/docs/
•  http://llvm.org/doxygen/
まとめ	
•  Boost.Spirit.QiとLLVM APIを組み合わせることで、プロ
グラミング言語の処理系を生産性を確保して作成できる
•  これなら「ネタ言語って言ってもどうせBrainf*ck系で
しょ?」って言われても切り返せるネタ言語が作れる
•  LLVM IRの形にしてしまえば、LLVMに付属している最適
化機構が使えるので本質のみに集中できる
•  この組み合わせで実用的なネタ言語(?)を作ろう!

More Related Content

What's hot

Arduinoをこれから始める人のためのArduino紹介スライドβ版
Arduinoをこれから始める人のためのArduino紹介スライドβ版Arduinoをこれから始める人のためのArduino紹介スライドβ版
Arduinoをこれから始める人のためのArduino紹介スライドβ版Katsuhiro Morishita
 
ΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣ
ΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣ
ΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣDimitris Psounis
 
ΠΛΗ30 Τυπολόγιο Ενότητας 1
ΠΛΗ30 Τυπολόγιο Ενότητας 1ΠΛΗ30 Τυπολόγιο Ενότητας 1
ΠΛΗ30 Τυπολόγιο Ενότητας 1Dimitris Psounis
 
ΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ
ΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ
ΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝDimitris Psounis
 
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)Nguyen Tuan
 
Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)tattaka_sun
 
PRML読み会第一章
PRML読み会第一章PRML読み会第一章
PRML読み会第一章Takushi Miki
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
A Note on BPTT for LSTM LM
A Note on BPTT for LSTM LMA Note on BPTT for LSTM LM
A Note on BPTT for LSTM LMTomonari Masada
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)Dimitris Psounis
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
Domain Primitives In Action - Explore DDD 2017
Domain Primitives In Action - Explore DDD 2017Domain Primitives In Action - Explore DDD 2017
Domain Primitives In Action - Explore DDD 2017Omegapoint Academy
 
Predicting organic reaction outcomes with weisfeiler lehman network
Predicting organic reaction outcomes with weisfeiler lehman networkPredicting organic reaction outcomes with weisfeiler lehman network
Predicting organic reaction outcomes with weisfeiler lehman networkKazuki Fujikawa
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2hirokazutanaka
 

What's hot (20)

ΠΛΗ30 ΜΑΘΗΜΑ 6.5
ΠΛΗ30 ΜΑΘΗΜΑ 6.5ΠΛΗ30 ΜΑΘΗΜΑ 6.5
ΠΛΗ30 ΜΑΘΗΜΑ 6.5
 
Arduinoをこれから始める人のためのArduino紹介スライドβ版
Arduinoをこれから始める人のためのArduino紹介スライドβ版Arduinoをこれから始める人のためのArduino紹介スライドβ版
Arduinoをこれから始める人のためのArduino紹介スライドβ版
 
ΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣ
ΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣ
ΠΛΗ30 ΚΑΡΤΑ - ΙΕΡΑΡΧΙΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑΣ
 
ΠΛΗ30 Τυπολόγιο Ενότητας 1
ΠΛΗ30 Τυπολόγιο Ενότητας 1ΠΛΗ30 Τυπολόγιο Ενότητας 1
ΠΛΗ30 Τυπολόγιο Ενότητας 1
 
ΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ
ΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ
ΠΛΗ30.ΚΑΡΤΑ - ΑΝΑΛΥΣΗ ΔΙΑΔΙΚΑΣΤΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ
 
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
 
Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)
 
PRML読み会第一章
PRML読み会第一章PRML読み会第一章
PRML読み会第一章
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
ΠΛΗ30 ΜΑΘΗΜΑ 4.2
ΠΛΗ30 ΜΑΘΗΜΑ 4.2ΠΛΗ30 ΜΑΘΗΜΑ 4.2
ΠΛΗ30 ΜΑΘΗΜΑ 4.2
 
A Note on BPTT for LSTM LM
A Note on BPTT for LSTM LMA Note on BPTT for LSTM LM
A Note on BPTT for LSTM LM
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
Domain Primitives In Action - Explore DDD 2017
Domain Primitives In Action - Explore DDD 2017Domain Primitives In Action - Explore DDD 2017
Domain Primitives In Action - Explore DDD 2017
 
ΠΛΗ30 ΜΑΘΗΜΑ 1.5
ΠΛΗ30 ΜΑΘΗΜΑ 1.5ΠΛΗ30 ΜΑΘΗΜΑ 1.5
ΠΛΗ30 ΜΑΘΗΜΑ 1.5
 
Predicting organic reaction outcomes with weisfeiler lehman network
Predicting organic reaction outcomes with weisfeiler lehman networkPredicting organic reaction outcomes with weisfeiler lehman network
Predicting organic reaction outcomes with weisfeiler lehman network
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
 
Irs gan doc
Irs gan docIrs gan doc
Irs gan doc
 

Viewers also liked

RTXで遊ぶ
RTXで遊ぶRTXで遊ぶ
RTXで遊ぶnvsofts
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときunique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときShintarou Okada
 
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」Takashi Ogura
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかTsuyoshi Kato
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -Kishi Shundo
 
LinuxでZFSを使ってみた
LinuxでZFSを使ってみたLinuxでZFSを使ってみた
LinuxでZFSを使ってみたnvsofts
 
At Small Scale Session
At Small Scale SessionAt Small Scale Session
At Small Scale Sessionnvsofts
 
x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!furandon_pig
 
2015年度の自宅NAS環境
2015年度の自宅NAS環境2015年度の自宅NAS環境
2015年度の自宅NAS環境Hiroaki Mizuguchi
 

Viewers also liked (13)

RTXで遊ぶ
RTXで遊ぶRTXで遊ぶ
RTXで遊ぶ
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときunique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
 
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいか
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
 
LinuxでZFSを使ってみた
LinuxでZFSを使ってみたLinuxでZFSを使ってみた
LinuxでZFSを使ってみた
 
At Small Scale Session
At Small Scale SessionAt Small Scale Session
At Small Scale Session
 
x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!
 
Boost17 cpplinq
Boost17 cpplinqBoost17 cpplinq
Boost17 cpplinq
 
2015年度の自宅NAS環境
2015年度の自宅NAS環境2015年度の自宅NAS環境
2015年度の自宅NAS環境
 

Similar to Boost.Spirit.QiとLLVM APIで遊ぼう

C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIWataru MIYAGUNI
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010Nobuaki Oshiro
 
LINQ の概要とかもろもろ
LINQ の概要とかもろもろLINQ の概要とかもろもろ
LINQ の概要とかもろもろShinichiAoyagi
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905Nobuaki Oshiro
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書くmametter
 
Abstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarAbstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarKodaira Tomonori
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Rubymametter
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチMakoto Kato
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう2bo 2bo
 

Similar to Boost.Spirit.QiとLLVM APIで遊ぼう (20)

C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
LINQ の概要とかもろもろ
LINQ の概要とかもろもろLINQ の概要とかもろもろ
LINQ の概要とかもろもろ
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
Abstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarAbstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminar
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
Study3 boost
Study3 boostStudy3 boost
Study3 boost
 
Clrh 110827 wfho
Clrh 110827 wfhoClrh 110827 wfho
Clrh 110827 wfho
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう
 

Recently uploaded

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 

Recently uploaded (12)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

Boost.Spirit.QiとLLVM APIで遊ぼう