• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
20年越しで Perl 4 to 5 した話
 

20年越しで Perl 4 to 5 した話

on

  • 6,028 views

株式会社スカイアーク様の支援で YAPC::Asia Tokyo 2012 で発表した LT のスライドです

株式会社スカイアーク様の支援で YAPC::Asia Tokyo 2012 で発表した LT のスライドです

Statistics

Views

Total Views
6,028
Views on SlideShare
899
Embed Views
5,129

Actions

Likes
1
Downloads
0
Comments
0

26 Embeds 5,129

http://outer-inside.blogspot.jp 4671
http://www.skyarc.co.jp 285
http://outer-inside.blogspot.com 88
http://outer-inside.blogspot.kr 20
https://twitter.com 11
http://outer-inside.blogspot.co.uk 9
http://outer-inside.blogspot.tw 4
http://outer-inside.blogspot.de 4
http://t.co 4
http://outer-inside.blogspot.in 3
http://outer-inside.blogspot.ca 3
http://outer-inside.blogspot.com.au 3
http://outer-inside.blogspot.sg 3
http://outer-inside.blogspot.hk 3
http://outer-inside.blogspot.com.es 3
http://outer-inside.blogspot.nl 2
http://translate.googleusercontent.com 2
http://audre28.rssing.com 2
http://webcache.googleusercontent.com 2
http://twipple.jp 1
http://outer-inside.blogspot.fr 1
https://m.facebook.com&_=1380965933452 HTTP 1
http://plus.url.google.com 1
http://s.deeeki.com 1
http://outer-inside.blogspot.ro 1
https://www.google.co.jp 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

20年越しで Perl 4 to 5 した話 20年越しで Perl 4 to 5 した話 Presentation Transcript

  • 20 年越しで Perl 4 to 5 した話SATOH, KoichiSep 29 2012 YAPC::Asia Tokyo
  • 謝辞✤ 「遠方からの参加者支援制度」に補助を頂きました。 株式会社スカイアーク様に御礼申し上げます。
  • 自己紹介✤ 佐藤光一✤ 岡山大学大学院 自然言語処理研究室✤ Twitter: @outerinside Github: https://github.com/sekia/✤ Blog: http://outer-inside.blogspot.com/
  • 研究室にありがちなこと
  • 研究室にありがちなこと✤ 文書がない✤ テストがない✤ バージョン管理されてない✤ コードが古い
  • 研究室にありがちなこと✤ 文書がない✤ テストがない✤ バージョン管理されてない✤ コードが古い✤ コードが古い
  • 研究室にありがちなこと✤ 文書がない✤ テストがない✤ バージョン管理されてない✤ コードが古い✤ コードが古い✤ コードがすごく古い
  • 研究室にありがちなこと✤ 研究室紹介にて: 「この研究室では Perl を主に使っています」
  • 研究室にありがちなこと✤ 研究室紹介にて: 「この研究室では Perl を主に使っています」 OpenPipe(/usr/local/bin/chasen, C_OUT, C_IN); sub OpenPipe { ← IPC::Open2 (コアモジュール) の再発明 local($pid); local($prg, *OUT, *IN) = @_; ← local 変数・型グロブ pipe(R, IN); ← Bare word なファイルハンドル pipe(OUT, W); unless ($pid = fork) { close(IN); close(OUT); open(STDIN, <&R) || die "Errorn"; open(STDOUT, >&W) || die "Errorn"; open(STDERR, >&W) || die "Errorn"; close(R); close(W); select(STDIN); $| = 1; select(STDOUT); $| = 1; select(STDERR); $| = 1; exec($prg); print STDERR "Open error!n"; exit(0); } close(R); close(W); select(IN); $| = 1; select(STDOUT); }
  • 研究室にありがちなこと✤ 研究室紹介にて: 「この研究室では Perl 4 を主に使っています」(処理系は Perl 5) OpenPipe(/usr/local/bin/chasen, C_OUT, C_IN); sub OpenPipe { ← IPC::Open2 (コアモジュール) の再発明 local($pid); local($prg, *OUT, *IN) = @_; ← local 変数・型グロブ pipe(R, IN); ← Bare word なファイルハンドル pipe(OUT, W); unless ($pid = fork) { close(IN); close(OUT); open(STDIN, <&R) || die "Errorn"; open(STDOUT, >&W) || die "Errorn"; open(STDERR, >&W) || die "Errorn"; close(R); close(W); select(STDIN); $| = 1; select(STDOUT); $| = 1; select(STDERR); $| = 1; exec($prg); print STDERR "Open error!n"; exit(0); } close(R); close(W); select(IN); $| = 1; select(STDOUT); }
  • Perl 4 to 5! Perl 5 to 6 http://perlgeek.de/en/article/5-to-6
  • 研究室にありがちなこと✤ せめて10年近代化したい Perl 4.036 1993 (last release of Perl 4) 1994 Perl 5.000 1998 Perl 5.005 2000 Perl 5.6.0 2002 Perl 5.8.0 2007 Perl 5.10.0 2010 Perl 5.12.0 Perl 4 Perl 5 Perl 6 2011 Perl 5.14.0 2012 Perl 5.16.0
  • Perl 5 の(20年前からある)新機能✤ CPAN!✤ Unicode (Perl 5.8+)✤ my 変数✤ 高階関数✤ オブジェクト指向プログラミング Perl 4 Perl 5 Perl 6✤ ……
  • CPAN✤ これは説明不要だった ✤ Text::*, Lingua::* 超便利 ✤ 車輪が大分減った
  • Unicode✤ 私「日本語の言語資源今までどうやって処理してたんですか」
  • Unicode✤ 私「日本語の言語資源今までどうやって処理してたんですか」 → 「全部 EUC-JP」「えっ」「えっ」
  • Unicode✤ 私「日本語の言語資源今までどうやって処理してたんですか」 → 「全部 EUC-JP」「えっ」「えっ」 「この XML 文書 UTF-8 で書かれてるんだけどどうやって EUC に したら良い?」「」 404 Blog Not Found:perl - Encode 入門 http://blog.livedoor.jp/dankogai/archives/51031595.html
  • my 変数・高階関数✤ local はグローバル変数に一時的な値を与えるだけ (Perl 6 だと temp)✤ my はスコープに入る毎に別の変数。スコープ外からはアクセス不能✤ クロージャに固有の状態を持たせたければ my を使うしかない
  • my 変数・高階関数✤ local はグローバル変数に一時的な値を与えるだけ (Perl 6 だと temp)✤ my はスコープに入る毎に別の変数。スコープ外からはアクセス不能✤ クロージャに固有の状態を持たせたければ my を使うしかない ✤ 「自由変数は関数生成時の束縛を探すんですよ」 とか ! っぽいことを言ったら何故か理解された
  • オブジェクト指向✤ 私「Moose を使いましょう! Mooooooooooooooose」 → ハードル高すぎた。DSL は中身を理解して使うもの
  • オブジェクト指向✤ Perl OOP の変なところ ✤ 名前空間 = クラス ✤ クラスは名前空間に所属するよ派: C++, Java, etc. ✤ クラス (とか) がオープンだから名前空間的に使って良いよ派: Ruby, JavaScript ✤ 名前空間がクラス (のつもり) だよ派: Perl 5
  • オブジェクト指向✤ のっけから use でつまづく ✤ 「use Foo::Bar で Foo::Bar クラスが使えるんだよね」 「いやそうとは限りませんよ」「えっ」「えっ」 ✤ Foo/Bar.pm に package Foo::Bar が宣言されている保証はな い ✤ package Foo::Bar がクラスである保証もない
  • オブジェクト指向✤ namespace 的なものを package に期待するとハマる package Foo::Bar { sub func { ... } } package Foo { Bar::func(); # ねーよ }
  • オブジェクト指向✤ namespace 的なものを package に期待するとハマる package Foo { package Bar { say __PACKAGE__; # "Bar" (not "Foo::Bar") } }
  • オブジェクト指向✤ Perl の OOP は単に関数解決の約束事 (言い過ぎ) package Foo; sub new { bless +{ msg => $_[1] } => $_[0] } sub say { say shift->{msg} } package main; my $obj = Foo->new(hello); $obj->say; # "hello"
  • オブジェクト指向✤ Perl の OOP は単に関数解決の約束事 (言い過ぎ) package Foo; sub new { bless +{ msg => $_[1] } => $_[0] } sub say { say shift->{msg} } package main; my $obj = Foo->new(hello); $obj->say; # "hello" my $meth = $obj->can(say); $obj->$meth; # ditto
  • オブジェクト指向✤ Perl の OOP は単に関数解決の約束事 (言い過ぎ) package Foo; sub new { bless +{ msg => $_[1] } => $_[0] } sub say { say shift->{msg} } package main; my $obj = Foo->new(hello); $obj->say; # "hello" my $meth = $obj->can(say); $obj->$meth; # ditto +{ msg => baa }->$meth; # "baa"
  • 思ったこと(小並感)✤ 20年前のコードも動く✤ が、読めない・書きたくない✤ 最近は比較的 Perl 5 なコードが書けて幸せ✤ 自分を救うために今からでも Perl 4 to 5