#perl bytes.pmがdeprecatedになった件

Perl 5.12からbytesプラグマがdeprecatedになるようですが,それについての議論をまとめてみました。
3
FUJI Goro @__gfx__

ええ!?bytes.pmってdeprecatedになるの!?

2010-02-23 15:21:39
YAMASHINA Hio @hio

@__gfx__ ちゃんとなかみ知っておきなさいなのかにゃ~。

2010-02-23 15:31:32
FUJI Goro @__gfx__

@hio 「bytes.pmをデバッグ以外で使おうと思ったのだとしたら,そりゃあんたPerlの文字列モデルについて何か勘違いしてるYO!」って書いてありますし,かなり強い理由っぽいですが…。

2010-02-23 15:34:49
徳永 広夢 @tokuhirom2

しかし、初心者が perl5 の文字コード処理モデルを理解せずに bytes プラグマを多用するケースはありそうなので、まあ妥当

2010-02-23 15:38:36
FUJI Goro @__gfx__

perlunifaqによれば「use bytes -- Don't use it. (snip) Just forget about it.」だそうな。

2010-02-23 15:39:07
徳永 広夢 @tokuhirom2

自分がみた use bytes; のうち 100% は、use bytes する必要がなかった。

2010-02-23 15:41:28
YAMASHINA Hio @hio

@__gfx__ まぁ正論ですよね。いいかげんまざって壊れたらunicode使ってない方がわるいっていわれてもしかたない?・x・;

2010-02-23 15:42:57
Dan Kogai @dankogai

うーむ、 use bytes しなくても bytes::length とか使えるようにするのかなあ。ちなみに utf8::* はuse しなくても使える<@__gfx__: ええ!?bytes.pmってdeprecatedになるの!?

2010-02-23 15:44:53
徳永 広夢 @tokuhirom2

日本の perl programmer のみなさんもだいぶ perl5 の utf8 rule になれてきてるし。ぼちぼち bytes.pm なしでも生きていけそう

2010-02-23 15:45:03
FUJI Goro @__gfx__

そういえばPlack::Util::content_lengthはlength()をそのまま使っているけど,これはbytes::length()じゃなくても大丈夫なのかな。

2010-02-23 15:47:12
Tatsuhiko Miyagawa @miyagawa

@dankogai bytes::length depends on internal utf8 flag so it's dangerous to use for latin1 chars - hence deprecated, that's my understanding

2010-02-23 15:47:28
徳永 広夢 @tokuhirom2

@__gfx__ そこは本質的には、わたす側が encode するべきだよね。

2010-02-23 15:48:10
Tatsuhiko Miyagawa @miyagawa

@__gfx__ PSGI ではバイト列を渡すのが仕様なので (Lint でチェック) bytes::length をつかうのはまちがいです

2010-02-23 15:48:17
Tatsuhiko Miyagawa @miyagawa

@__gfx__ たとえば $body に utf-8 フラグ付きの文字を渡すとsyswriteでクラッシュするPSGIサーバ実装もあるけど、これはこれで問題ありません。アプリケーションがバイト列にしないのが悪いです。

2010-02-23 15:49:37
FUJI Goro @__gfx__

@tokuhirom @miyagawa なるほど!bytes不用説に納得してきました。

2010-02-23 15:50:02
FUJI Goro @__gfx__

@miyagawa てことは結局,PSGIアプリではutf8-flaggedかどうかは常に意識しなきゃいけないってことすかね。

2010-02-23 15:52:17
徳永 広夢 @tokuhirom2

@__gfx__ 基本的に意識するのはアプリじゃなくてフレームワークだけどね。

2010-02-23 15:53:38
徳永 広夢 @tokuhirom2

@__gfx__ てか基本的に入出力がともなうところでは誰かしらが decode/encode しなくてはならないのはさけられない

2010-02-23 15:54:04
Daisuke Maki @lestrrat

@__gfx__ や、外に吐くときは常にencodeする、アプリ内では常にdecodeされた状態(utf-8 flagged)の文字列にする、というのが基本だからPSGIだから、とかそういうのは関係ないかと。

2010-02-23 15:54:45
Tatsuhiko Miyagawa @miyagawa

@__gfx__ That's something frameworks should ensure.

2010-02-23 15:54:47
徳永 広夢 @tokuhirom2

PSGI はgatewayのAPI interface 仕様なので、encode 済の文字列がわたってくるのは妥当

2010-02-23 15:55:01
Tatsuhiko Miyagawa @miyagawa

@lestrrat and that's why encoding/decoding in middleware is dangerous!

2010-02-23 15:55:50
Tatsuhiko Miyagawa @miyagawa

@lestrrat and that's why encoding/decoding in middleware is dangerous!

2010-02-23 15:55:50
FUJI Goro @__gfx__

@tokuhirom @miyagawa @lestrrat なるほど,そうでした。「あとは良しなに」的な処理はフレームワークの仕事でした!

2010-02-23 15:56:40