perldelta - perl v5.9.4 更新情報

目次


名前

perldelta - perl v5.9.4 更新情報


説明

このドキュメントでは開発リリース 5.9.3 と 5.9.4 の間での変更点を 説明します. 5.8.0 から 5.9.3 までの変更点は perl590delta [CPAN], perl591delta [CPAN], perl592delta [CPAN] そして perl593delta [CPAN] を 参照してください.


互換性の無い変更点

chdir FOO

chdir() の裸の単語(bareword)引数はファイルハンドルとして 処理されるようになりました. これまでのリリースではbarewordは ディレクトリ名として処理されていました.

pmc ファイルの処理

perl の古い機能で, requireuse が拡張子 .pm をもつ ファイルを探す前に同じファイル名で拡張子 .pmc を持つファイルを 先に探していました. このファイルが見つかった時は .pm 拡張子で 終わるファイルの存在の代わりにロードされます.

これまでは, .pmc ファイルは .pm とり新しい場合にだけ ロードされました. 5.9.4 からはそれが存在する時は常にロード されるようになりました. (このトリックは Pugs で使われて います. )

パターンでの @- 及び @+

特殊配列 @- 及び @+ は正規表現の中に住み着かなくなりました. (Sadahiro Tomoyuki)

$AUTOLOAD も taint が作用するようになります

taint されている名前で関数を呼び出して, それが AUTOLOAD 関数を 呼び出したとき, $AUTOLOAD は(正しく) taint されるようになりました. (Rick Delaney)


コアの強化

state() 変数

新しい変数の種類が導入されました. state 変数は my 変数と 似ていますが, my の代わりに state キーワードで宣言されます. これはそのレキシカルスコープでのみ可視になりますが, その値は永続します: my 変数とは異なりスコープに入ったときには 未定義ではなく, 以前の値を復元します. (Rafael Garcia-Suarez)

state 変数を使うには次のコード

    use feature "state";

かワンライナであれば -E コマンドラインスイッチで有効にする 必要があります.

perlsub 内 "Persistent variables via state()" [CPAN] を参照してください.

UNIVERSAL::DOES()

UNIVERSAL クラスに新しいメソッド DOES() が追加されました. これは isa() メソッドの抱えていた意味的な問題を解決するために 追加されていました. isa() は継承関係を調べますが, DOES() は モジュールの作者が(継承に加えて)それ以外の種類のクラス間の関係を オーバーライドすることができるように設計されています. (chromatic)

UNIVERSAL 内 "$obj->DOES( ROLE )" [CPAN] を参照してください.

定数畳み込み時の例外

定数畳み込みルーチンは例外ハンドラに包まれるようになりました, そしてもし畳み込み時に例外が発生した場合には(0/0 を評価した等), perl プログラム全体をアボートするのではなくその時点の optree を 維持します. (Nicholas Clark, Dave Mitchell)

@INC でのソースフィルタ

ソースフィルタをフックで開かれて返されたファイルハンドルの 先頭に加えることで @INC での関数によるフックメカニズムを 拡張することが可能です. この機能はずいぶん前から計画されて いましたが, これまで全然手をつけられていませんでした. 詳細は perlfunc 内 "require" [CPAN] を参照してください. (Nicholas Clark)

MAD

MAD, いろいろな属性修飾 (Misc Attribute Decoration), は Perl 5 から Perl 6 へのコンバータへと至る作業の開発段階に あります. これを有効にするには Configure 引数に -Dmad 引数 を渡す必要があります. これによって作られる perl はふつうに作られた perl 5.9.4 とはバイナリ互換がなく, また, 空間, 速度にペナルティを もちます; さらにはまだ全てのレグレッションテストには通過していま せん. (Larry Wall, Nicholas Clark)


モジュールとプラグマ

新しいコアモジュール


ユーティリティの変更点

config_data

Module::Build から config_data ユーティリティが新しく 加わりました. これは configure 可能な Module::Build のフレーム ワークを使っている Perl モジュール(つまり, 親モジュールに対する ローカルな設定情報を含んでいる *::ConfigData モジュール)の 設定をするためのコマンドラインインターフェースを提供します.


ドキュメント

新しいマニュアルページ, perlpragma

perlpragma [CPAN] マニュアルページは自分のレキシカルなプラグマを pure Perl でどうやって書くかを説明しています(5.9.4 から可能です).

新しいマニュアルページ, perlreguts

perlreguts [CPAN] マニュアルページ, Yves Orton の作法, は Perl 正規表現エンジンの内部を説明しています.

新しいマニュアルページ, perlunitut

perlunitut [CPAN] マニュアルページは Perl での Unicode 及び 文字列縁故ーでゅイングを使ったプログラム方法のチュートリアルで, Juerd Waalboer の作法です.


パフォーマンス強化

メモリの最適化

いくつかの内部データ構造 (typeglobs, GV, CV, format)は よりメモリ消費の少ない構造に再設計されました. (Nicholas Clark)

UTF-8 キャッシュの最適化

UTF-8 キャッシュコードはより効率的に, そしてより多く 使われるようになりました. (Nicholas Clark)

正規表現

再帰展開エンジン

正規表現エンジンは再帰しなくなりました, これはスタックを あふれさせるようなパターンはわかりやすい説明を出して die するか, スタックを前もって吹き飛ばすことができても終了までにとても 長い時間がかかります. もし不定期なスタックオーバーフロー(もしくは segfault)が起こるのであればハングする代わりに生成を分離した 正規表現を見つける perl を見つけ出すためにアップグレードして ください.

1文字の文字クラスはリテラルとして扱わるようになります

1文字からなるクラスはリテラルとして使われている文字と同一に 扱われるようになりました, これは文字クラスをエスケープとして使っている コードのスピードアップを意味します. (Yves Orton)

リテラル文字列選択のトライ(Trie)最適化

選択(Alternations; "|")は, 可能であればより効率的なマッチング 構造へと最適化されるようになりました. 文字列リテラルの選択は トライへとマージされ, 同時にマッチが行われるようになります. これはある場所で N 個の選択マッチがあった場合に O(N) ではなく 新しいコードでは O(1) で処理されるようになります. (Yves Orton)

捕捉: perl の歴史的な貧弱な選択パフォーマンスに関連する多くの コードが残っています. それの為にしばしば使われているトリックは 新しい最適化では無効になります. 幸運にもこの目的で使われている ユーティリティモジュールは 5.10 がリリースされるまでこの 新しい最適化についての教育を受けるでしょう.

Aho-Corasick 法による開始位置の最適化

パターンがトライ化可能な選択で始まっていてよりよい最適化が なかった場合に正規表現エンジンは開始位置を探すために Aho-Corasick マッチを使います. (Yves Orton)

Windows によるルーズな stat

Windows において, perl の stat() 関数は通常リンク回数を 決定してハードリンクを通して変更されたかもしれない属性を更新するために ファイルを開きます. ${^WIN32_SLOPPY_STAT} に真を設定すると この処理を行わなくなり stat() の速度が向上します.


インストールと Configure の向上

再配置可能なインストール

新しい Configure で再配置可能な perl ツリーの生成がサポート されました. Configure に -Duserelocatableinc を指定することで @INC (及び %Config にあるそれ以外の全て)は perl 実行形式の パスからその位置を選択可能になりました.

これはパスの始まりに文字列 ".../" が見つかると, それは $^X の ディレクトリで置き換えられるということです. これによって, -Duserelocatableinc によるデフォルトでは全てが再配置されますが, 再配置はディレクトリベースで行われます. 最初のインストールは最初に configure で行った prefix へと行われます.

プラットフォーム別

z/OS で正しく動作する Perl を作るために多くの向上が行われ ました.

Perl は DragonFlyBSD での動作が報告されました.

コンパイルの向上

perl とバンドルされている XS モジュールにある全ての ppport.h ファイルはビルド時に生成されるようになりました. (Marcus Holland-Moritz)

新しいチェック

configure プロセスで strlcat() 及び strlcpy() が提供されているか を検出するようになりました. これらが提供されていなかった場合には perl の独自版が使われます(Russ Allbery によるパブリックドメイン実装). perl インタプリタの様々な場所でこれらを使うようになりました. (Steve Peters)

Windows ビルドの向上

XS 拡張のビルド

Perl 自身が Microsoft VC++ コンパイラでビルドされていた場合の MinGW コンパイラによる XS 拡張モジュールのビルドサポートが向上されました. (ActiveState)

64-bit コンパイラのサポート

Microsoft の 64-bit コンパイラでのビルドのサポートが 向上しました. (ActiveState)


バグ修正抜粋

PERL5SHELL と taint

Windows において, PERL5SHELL 環境変数は taint 性を確認されるように なりました. (Rafael Garcia-Suarez)

*FILE{IO} の使用

stat() 及び -X ファイルテストは *FILE ファイルハンドルの ように *FILE{IO} ファイルハンドルを扱うようになりました.

オーバーロードと再bless

リファレンスが他のクラスへと再blessされてもオーバーロードは 動作するようになりました. 内部的にはこれは"オーバーロードされている" というフラグがリファレンスから論理的に常に存在しているべき場所である その参照先へと移動することで実装されています. (Nicholas Clark)

オーバーロードと UTF-8

文字列化をオーバーロードしているオブジェクトでの UTF-8 処理に 関連したいくつかのバグが修正されました. (Nicholas Clark)

eval メモリリークの修正

以前より, eval 'syntax error' は悪いことにリークを起こしていました. いくつかの(けど全てではない)これらのリークは削除若しくは削減されました. (Dave Mitchell)

Windows でのランダムデバイス

これまでのバージョンではランダム生成の種を作るときに /dev/urandom が存在すればそこから読んでいました. このファイルが Windows で 間の悪いことに存在していても適切なデータを持っていないため, Windows ではこのファイルからは読まないようになりました. (Alex Davies)


新しい及び変更された診断メッセージ

State variable %s will be reinitialized

『state変数 %s は再初期化されます』 state 変数に初期値を割り当てることはできますが, それはリスト代入の 一部として宣言されていないときです. perldiag [CPAN] を参照してください.


変更された内部処理

新しいファイル, mathoms.c には perl コアではもう使われていない 関数を含んでいます, これらは他のモジュールで使っているかもしれないため 保持はしています. これらは因数分解の努力からきています: 例えば多くの PP 関数はいくつかの ops で共有されています.

特殊変数 $^H 及び %^H の実装は pure perl でレキシカル プラグマを実装できるようにするために変更されました.


既知の問題

警告テストの1つ (lib/warnings.t の 263 番)は UTF-8 ロケール で失敗します.

いくつかのプラットフォームで Bytecode テストは失敗します. 私たちは 5.10.0 のリリースの前に byteloader と compiler の サポートを外すことを考えています.


バグの報告方法

もしバグと思われるものが見つかったら, comp.lang.perl.misc ニュース グループに最近投稿された記事や http://rt.perl.org/rt3/ にある perl バグデータベースを確認してください. Perl ホームページ, http://www.perl.org にも情報はあります.

もしまだ報告されていないバグだと確信したら, そのリリースに含まれている perlbug プログラムをを実行してください. バグの再現スクリプトを 十分小さく, しかし有効なコードに切りつめることを意識してください. バグレポートは perl -V の出力と一緒に perlbug@perl.org に送られ Perl porting チームによって解析されます.


関連項目

Changes には完全な変更箇所があります.

INSTALL には Perl をビルドする方法があります.

README には一般的な事項があります.

Artistic 及び Copying には著作権情報があります.


和訳

 山科 氷魚 (YAMASHINA Hio) <hio@hio.jp>

原典: perl VERSION 5.9.4. 翻訳日: 2007-03-21.

perldelta - perl v5.9.4 更新情報

索引

perldelta - perl v5.9.4 更新情報