• 検索結果がありません。

Hachioji.pm #2

N/A
N/A
Protected

Academic year: 2021

シェア "Hachioji.pm #2"

Copied!
81
0
0

読み込み中.... (全文を見る)

全文

(1)

Kichijoji.pm #2

2015-01-16 まかまか般若波羅蜜

[email protected] Twitter: @maka2_donzoko

(2)
(3)

自己紹介:

(4)

自己紹介:

名前:まかまか(略

(5)

主にPerlがらみのお仕

事が多い職場です

(6)

未来ある若手

エンジニアの

海外研修

(7)
(8)

募集中:

Perl, Pythonなどのプログ

ラミング、PostgreSQLな

どのDB運用、業務システム

企画・構築などに興味のある

方(バイト、非常勤など)

(9)
(10)
(11)

自分のこれまでのPerlと

の関わりを振り返って

(12)

自分のこれまでのPerlと

の関わりを振り返って

あんまり試行錯誤しない

で適当に生きてきたわー

(13)

試行錯誤というか、どうい

うときにどういうモノで学

んできたかについて

(14)
(15)

リファレンスと正規表現の勉強

(16)
(17)

仕事始めてからは

クックブックが大変重宝しました

(18)

オブジェクト指向は

(19)

ネットワーク関連は

(20)
(21)

最初のOSS的な活動

(22)

最初のOSS的な活動

perldoc.jp(ドキュメント翻訳)への参加

Games::系やMIDIなど Parse::RecDescent ithreads関連

(23)
(24)

ドキュメント翻訳作業は良い ・読む力がつく

(25)

ドキュメント翻訳作業は良い ・読む力がつく

(26)

Parse::RecDescent

(27)

ithreads関連

(28)
(29)

最初のモジュール公開

(30)

最初のモジュール公開

JEncode.pm

(31)

最初のモジュール公開

JEncode.pm

……JcodeのEncode実装 かのUTF8フラグと向き合う

(32)

最初のモジュール公開

JEncode.pm

……JcodeのEncode実装 かのUTF8フラグと向き合う Devel::Peek大事

(33)

$ perl -MDevel::Peek -e"use utf8; Dump('あ')" SV = PV(0xa72d898) at 0xa741f98 REFCNT = 1 FLAGS = (POK,READONLY,pPOK,UTF8) PV = 0xa755230 "¥343¥201¥202"¥0 [UTF8 "¥x{3042}"] CUR = 3 LEN = 8

(34)
(35)

初めてのCPANモジュール

(36)

初めてのCPANモジュール

JSON.pm

……decode部分は

(37)

初めてのCPANモジュール

JSON.pm

(38)

初めてのCPANモジュール

JSON.pm

……JSON::XSにあわせる ために再度UTF8フラグと向き 合う

(39)

初めてのCPANモジュール JSON.pm ……JSON::XSにあわせる ために再度UTF8フラグと向き 合う →ちゃんと理解してなかった

(40)

再度各種ドキュメントを読み直す ……

perlunicode, perlunitut, perluniintro, Encode,

(41)
(42)

というわけで、今更誰も

知りたくない最高に

(43)
(44)

PerlにはCoolな

ithreads(iスレッド)とい

う機能がある

(45)

PerlにはCoolな

ithreads(iスレッド)とい

う機能がある

(46)

use threads;

my $thr = threads->create(¥&foo); print "main thread¥n";

sub foo {

sprint("Foo! in thr(tid=%d)¥n", threads->tid); }

(47)

use threads;

my $thr = threads->create(¥&foo); print "main thread¥n";

sub foo {

sprint("Foo! in thr(tid=%d)¥n", threads->tid); }

(48)

元々はWindows版Perlでforkをエミュ レートするためのもの(Win32 Thread)

それが逆輸入されpthreadで実装された

※5.5時代はThreadというモジュールが あった(5005threads)。

(49)

threads->new(¥&foo) すると pthread_createされて&fooを 実行するperlインタプリタが生成 される。

(50)

threads->new(¥&foo) すると pthread_createされて&fooを 実行するperlインタプリタが生成 される。 そして親スレッドの一切合財(シン ボルテーブル、変数、ファイル)が 子スレッドにコピーされる……

(51)

threads->new(¥&foo) すると pthread_createされて&fooを 実行するperlインタプリタが生成 される。 そして親スレッドの一切合財(シン ボルテーブル、変数、ファイル)が 子スレッドにコピーされる……

(52)

my $hoge;

threads->create(sub{ })->join;

(53)
(54)

大抵のスレッドの売り「軽い」 iスレッドの売り「重い」

(55)

大抵のスレッドの売り「軽い」 iスレッドの売り「重い」

(56)

Tips:

何もuseしてない、変数宣言し てない段階で必要なだけ予め スレッドを生成しておくとよい よ!

(57)

コピーなので、変数がスレッド 間で共有されることもない

(58)

コピーなので、変数がスレッド 間で共有されることもない

既存のコードも安心だぜ! ※個人の感想です。

(59)

ちなみにblessされた変数があ れば子スレッドの数だけ

(60)

ちなみにXSモジュール内部の 変数とかはコピーされない。

CLONEサブルーチン使う。 sub CLONE { }

(61)
(62)

では変数の共有は?

(63)

use threads;

use threads::shared;

my $foo : shared = 1; my $bar;

(64)

shareされた変数は裏ではtie され、「共有変数用スレッド」に リンクされる。

(65)

shareされた変数は裏ではtie され、「共有変数用スレッド」に リンクされる。 STOREやFETCHを通じてデ ータがやり取りされる! →遅い!

(66)

共有変数用スレッド

スレッドA スレッドB

$foo = 1

say $foo $foo

(67)

shareされた変数は裏ではtie され、「共有変数用スレッド」に リンクされる。

tieされるので既存のtie変数 に対しては共有化できない

(68)
(69)

スレッドのコンテキスト

new (create) した時のコン テキストがjoin時のコンテキス トになる。

(70)

use threads;

my $th1 = threads->new( sub{return 1,3,5;} ); say $th1->join; # 5 を表示(スカラーコンテキストだから)

my ($th2) = threads->new( sub{return 1,3,5;} ); say $th2->join; # 135 を表示(リストコンテキストだから)

(71)
(72)
(73)

なお、初期の頃はthreadsに is_joinable とか

(74)

私の初めてのXSモジュールは Thread::State

(75)

use threads; use Thread::State; my $thr = threads->new(sub { ... }); while ( $thr->is_running ) {...} if( $thr->wantarray ){ ...} if ($thr->is_joined) { ... } if ($thr->is_joinable) { ...}

(76)
(77)

その他昔の色々は下記サイト にあるよ。

(78)

お家に帰ったら早速試してみた くなったでしょ?

(79)

お家に帰ったら早速試してみた くなったでしょ?

useithreadオプションつけて コンパイルしてみてね!

(80)

公式にithreadsの利用は

(81)

Perlで試行錯誤

スレド

参照

関連したドキュメント

次代の社会を担う子どもが健やかに生まれ、育成される環境を整備すると

また、注意事項は誤った取り扱いをすると生じると想定される内容を「 警告」「 注意」の 2

SD カードが装置に挿入されている場合に表示され ます。 SD カードを取り出す場合はこの項目を選択 します。「 SD

C)付為替によって決済されることが約定されてその契約が成立する。信用

  

つの表が報告されているが︑その表題を示すと次のとおりである︒ 森秀雄 ︵北海道大学 ・当時︶によって発表されている ︒そこでは ︑五

このように、このWの姿を捉えることを通して、「子どもが生き、自ら願いを形成し実現しよう

C.