Soumettre la recherche
Mettre en ligne
XS を始めよう!
•
0 j'aime
•
740 vues
Kei Kamikawa
Suivre
Perl の XS を始めたので、その知見の共有です。 型、参照カウント、XS のメモリリークについて言及しています。
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 36
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
そろそろ”外字”を卒業したい。LibreOffice で”外字”に頼らない文書作成
そろそろ”外字”を卒業したい。LibreOffice で”外字”に頼らない文書作成
Tomofumi Yagi
Unicode文字列処理
Unicode文字列処理
信之 岩永
正規表現の先読みについて
正規表現の先読みについて
Kazuhiro Nishiyama
文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き
Takao Baba
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
信之 岩永
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Basis Technology K.K.
COLING2014 読み会@小町研 “Morphological Analysis for Japanese Noisy Text Based on C...
COLING2014 読み会@小町研 “Morphological Analysis for Japanese Noisy Text Based on C...
Yuki Tomo
Okinawapm#4
Okinawapm#4
cat2koban
Recommandé
そろそろ”外字”を卒業したい。LibreOffice で”外字”に頼らない文書作成
そろそろ”外字”を卒業したい。LibreOffice で”外字”に頼らない文書作成
Tomofumi Yagi
Unicode文字列処理
Unicode文字列処理
信之 岩永
正規表現の先読みについて
正規表現の先読みについて
Kazuhiro Nishiyama
文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き
Takao Baba
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
信之 岩永
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Basis Technology K.K.
COLING2014 読み会@小町研 “Morphological Analysis for Japanese Noisy Text Based on C...
COLING2014 読み会@小町研 “Morphological Analysis for Japanese Noisy Text Based on C...
Yuki Tomo
Okinawapm#4
Okinawapm#4
cat2koban
JWT を使ってみよう
JWT を使ってみよう
Kei Kamikawa
技術を身につける技術
技術を身につける技術
Kei Kamikawa
俺はこうして Go の CLI を作っている
俺はこうして Go の CLI を作っている
Kei Kamikawa
我輩が作ったものを淡々と
我輩が作ったものを淡々と
Kei Kamikawa
grep.metacpan.orgのススメ
grep.metacpan.orgのススメ
Kei Kamikawa
Okinawapm#3
Okinawapm#3
Kei Kamikawa
作ったものを見せたかった話
作ったものを見せたかった話
Kei Kamikawa
Okinawapm #1
Okinawapm #1
Kei Kamikawa
Yomitanpm 6
Yomitanpm 6
Kei Kamikawa
Yomitan.pmに参加しようよ
Yomitan.pmに参加しようよ
Kei Kamikawa
初見では読みづらいPerl
初見では読みづらいPerl
Kei Kamikawa
Contenu connexe
Plus de Kei Kamikawa
JWT を使ってみよう
JWT を使ってみよう
Kei Kamikawa
技術を身につける技術
技術を身につける技術
Kei Kamikawa
俺はこうして Go の CLI を作っている
俺はこうして Go の CLI を作っている
Kei Kamikawa
我輩が作ったものを淡々と
我輩が作ったものを淡々と
Kei Kamikawa
grep.metacpan.orgのススメ
grep.metacpan.orgのススメ
Kei Kamikawa
Okinawapm#3
Okinawapm#3
Kei Kamikawa
作ったものを見せたかった話
作ったものを見せたかった話
Kei Kamikawa
Okinawapm #1
Okinawapm #1
Kei Kamikawa
Yomitanpm 6
Yomitanpm 6
Kei Kamikawa
Yomitan.pmに参加しようよ
Yomitan.pmに参加しようよ
Kei Kamikawa
初見では読みづらいPerl
初見では読みづらいPerl
Kei Kamikawa
Plus de Kei Kamikawa
(11)
JWT を使ってみよう
JWT を使ってみよう
技術を身につける技術
技術を身につける技術
俺はこうして Go の CLI を作っている
俺はこうして Go の CLI を作っている
我輩が作ったものを淡々と
我輩が作ったものを淡々と
grep.metacpan.orgのススメ
grep.metacpan.orgのススメ
Okinawapm#3
Okinawapm#3
作ったものを見せたかった話
作ったものを見せたかった話
Okinawapm #1
Okinawapm #1
Yomitanpm 6
Yomitanpm 6
Yomitan.pmに参加しようよ
Yomitan.pmに参加しようよ
初見では読みづらいPerl
初見では読みづらいPerl
XS を始めよう!
1.
XS を始めよう! @codehex
2.
自己紹介 • 本名: 上川
慶 • 琉球大学 3年 • Perl, Go 言語大好き • https://github.com/Code- Hex/ • https://twitter.com/CodeHex
3.
List::Flatten::XS をリリースしました!! http://codehex.hateblo.jp/entry/2017/03/31/202007
4.
XS ってなに?
5.
http://d.hatena.ne.jp/gfx/20100202/1265091606 (2017年4月1日) XSとは,狭義ではPerlでエクステンションを書 くためのマクロ言語の名前ですが,広義ではエ クステンションを書くための技術の総称です。
6.
つまり
7.
Perl と C
言語を繋げ るための言語
8.
覚えておきたいこと
9.
覚えておきたいこと • 基本的な型 • カベージコレクション •
参照カウントでの注意
10.
基本的な型
11.
基本的な型 • SV: Perl
の全ての値は SV から派生している. SV は Scalar Value. Perl でいう my $scalar; • AV: Array Value. 配列データ. Perl でいう my @array; • HV: Hash Value. ハッシュ. Perl でいう my %hash; • RV: Reference Value. リファレンス. Perl でいう my ($h, $a, $s) = (+{}, +[], 21);
12.
プリミティブ型 • IV: 整数値.
-1, 0, 10 など Integer Value. • UV: 符号なし整数値. 0, 1, 35 など Unsigned Value. • NV: 浮動小数点. 0.01, 1.32, 77.6 など • PV: 文字列. "Hello" など Pointer Value.
13.
型変換 • SV からプリミティブな型への変換 IV
iv = SvIV(sv); UV uv = SvUV(sv); などなど • プリミティブな型から SV への変換 SV *sv = newSViv(iv); SV *sv = newSVuv(uv); などなど • SV から C の char* への変換 char *str = SvPV_nolen(sv);
14.
カベージコレクション
15.
ガベージコレクションって?
16.
https://ja.wikipedia.org/wiki/ガベージコレクション (2017年4月1日) ガベージコレクション(英語: garbage collection;
GC)とは、プログラムが動的に確 保したメモリ領域のうち、不要になった領域を 自動的に解放する機能である。
17.
GC にも色々種類がある
18.
Perl では参照カウント 方式を扱かっている
19.
http://xsubtut.github.io/#n7 (2017年4月1日) 変数ごとに「この変数は○箇所から参照されて いるョ」というマークをつけておき、どこから も参照されなくなったらその部分のメモリを再 利用するというだけの仕組みです。
20.
つまり
21.
• 新たにデータを持つ変数を作成したら、参照カウン トが 1
増える • その変数からデータが使われなくなった時に、参照 カウントを 1 減らしてあげる • 参照カウントが 0 になった時メモリを再利用でき る
22.
参照カウントでの注意
23.
• 参照カウントを間違えると、メモリリークもしくは データを破壊することにつながる • 手動で正しく管理するのが難しい
24.
そこで
25.
新しく作ったデータに 揮発性を与える
26.
SV * str
= newSVpv("Hello World",0); sv_2motral(str); // 揮発性を与える
27.
SV * str
= newSVpv("Hello World",0); sv_2motral(str); // 揮発性を与える こうすることでスコープを抜けた時に 自動でリファレンスカウントを 1 減らしてくれる!!
28.
揮発性を与えるべきもの • スコープ内で使っている newSV*()
最終的に return する newSV*() には与えてはいけ ない • newAV(), newHV() newAV(), newHV() は最終的に return するものに も与える
29.
揮発性を与えてる場合、 配列、ハッシュへデータを保存する時に 参照カウントを 1 増やすことに注意する!
30.
Example • push の場合 av_push(array,
SvREFCNT_inc(val)) • unshift の場合 av_unshift(array, len); for (int i = 0; i < len; i++) av_store(array, i, SvREFCNT_inc(val)); • 同様に av_store(), hv_store() 使う時にも SvREFCNT_inc() を使う
31.
XS 側の メモリリークを検出する
32.
Test::LeakTrace http://search.cpan.org/dist/Test-LeakTrace/lib/Test/LeakTrace/JA.pod
33.
no_leaks_ok { xs_subname(); } 'Detected
memory leak via xs_subname()'; Example
34.
これである程度メモリリーク を抑えることができる!
35.
参考 • http://xsubtut.github.io/ • http://search.cpan.org/dist/Test-LeakTrace/ lib/Test/LeakTrace/JA.pod •
http://qiita.com/shogo82148/items/ ba4f1b106868b7212341 • それと愉快な perldoc.jp 達
36.
?
Télécharger maintenant