perldelta - perl v5.8.8 の新機能

目次


名前

perldelta - perl v5.8.8 の新機能


説明

このドキュメントでは 5.8.7 リリースと 5.8.8 リリースとでの相異点を 説明します.


非互換となる修正

5.8.7 と意図的な非互換はありません. もしなにか非互換と思われる事項が ありましたら, それらはバグでしょう. ぜひ報告をお願いします.


コアの機能拡張


モジュールとプラグマ


ユーティリティの変更点

h2xs の強化

h2xs は後方互換モジュールであっても XSLoader の使用を 強制する新しいオプション --use-xsloader を実装しました.

アポストロフィを含んだauthor名の処理が修正されました.

負の値を持つenumはスキップされるようになりました.

perlivp の強化

perlivp は新しいオプション -a を実装しました. そしてデフォルトでは *.ph ファイルはチェックしなくなります. すべてのテストを走らせる ためには -a オプションを使うようにしてください.


新しいドキュメント

perlglossary [CPAN] マニュアルページは Perl で使われる技術的な単語その他の 用語集です. 親切な O'Reilly Media, inc. から提供されました.


パフォーマンスの強化


インストールとコンフィグレーションの改善

平行(parallel) make は正常に動作するようになっているでしょう. make test を平行に実行する事には問題が残りますが.

Win32 において Borland のコンパイラ(群)でのビルドはよりスムーズに なりました. 特に Steve Hay はそれらのコンパイラが発する警告の減少 と, そのうちの少なくとも1つで発生した内部エラーの除去に取り組んで くれました.

Alan Burlison からのパッチのおかげで Configureclearenvunsetenv を検出するようになりました. また, futimes の検出と sprintf が整形した文字列の長さを正しく返すかどうかの検出も行いますが, これは perl 5.8.9 で使われます.

next-3.0, vmesa, IX, Darwin, Solaris, Linux, DEC/OSF, HP-UX および MPE/iX でのヒントの改善.

Vadim Konovalov の働きのおかげで Windows において Perl エクステンションを Perl DLL にスタティックにビルドできるようになりました. (これは 実際には 5.8.7 で改善されていますが手違いで perl587delta [CPAN] に 記載されていませんでした.)


バグ修正のピックアップ

-w を使っていても no warnings 'category' が正しく機能するようになりました

これまで -w でグローバルに警告を有効にして実行していると 特定の警告カテゴリを選択して無効にしたときに全ての警告を無効に してしまっていました. これは修正されました; 現在では no warnings 'io';io クラスでの警告のみを無効にします. これまでは間違って全ての 警告を無効にしてしまっていました.

この修正によりいくつかのプログラムが正しく警告を発するようになります.

過剰な最適化の除去

Perl 5.8.4 はスカラーへの undef の代入, 配列やハッシュへの 空のリストの代入を最適化により除去する変更を施しました. goto ジャンプを伴うときにはこれが問題となることがあったため, この処理は取り消されました.

sprintf() の修正

いくつかのフォーマットで sprintf() 関数を使うと特定の条件下で バッファオーバーフローを起こすことがありましたが, 他のいくつかの バグと共に, 特に境界チェックと共に修正されました.

関連する修正として, Sys::Syslog のドキュメントに従っていない 粗悪なコードでフォーマット文字列の脆弱性を持つことがありました. Sys::Syslog は質の低いサードパーティ製のコードから人々を保護 するように修正されました.

デバッガとUnicodeでの速度低下

Unicode データの処理を perl のデバッガ上で実行すると思いがけなく 大きな速度低下が見られるとの報告がありました. これに相当する原因は Nicholas Clark によって確認及び修正されました.

小さな修正たち


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

Attempt to set length of freed array

『解放された配列に長さを設定しようとしました』 これは新しい警告です. 次のような状況で発生します:

    $r = do {my @a; \$#a};
    $$r = 503;

Non-string passed as bitmask

『文字列でないものがビットマスクとして渡されました』 これは新しい警告です. select() の引数に対してビットマスクではなく 数値が渡されたときに発生します.

    # Wrong, will now warn
    $rin = fileno(STDIN);
    ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
    
    # Should be
    $rin = '';
    vec($rin,fileno(STDIN),1) = 1;
    ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);

Search pattern not terminated or ternary operator parsed as search pattern

『検索パターンが終了していないか3項演算子が検索パターンとして 検出されました』 この構文エラーは ?PATTERN? を構成する終わりの 区切り子(delimiter)を字句解析機が見つけられなかったことを意味します. ここで3項演算子をあげることで構文の確認を行いやすくしています.


内部処理の変更

C ソースコード上で, 一部は整頓のためとメンテナンス性の向上の ためにですが, かなりの量のリファクタリングが行われました. 結果として オブジェクトコードと perl バイナリは 5.8.7 より小さくなりました. 特に, Dave Mitchell によって寄稿された warnings のコードが著しく 小さくなりました. 小さくなったことと速くなった事は別として, ユーザが認識すべき変更点はありません.

Andy Lester は C コンパイラに対して実質 const として宣言 されるべき関数パラメータとローカル変数の改善を多く提供してくれました. Steve Peters は新しい *_set マクロを提供し, LVALUE コンテキストにおいて マクロに代入するのでなくこれを使うようにコアの書き換えを行って くれました.

Dave Mitchell は -DT における字句解析機のデバッグ出力を 改善してくれました.

Nicholas Clark は文字列バッファの確保を次の4の倍数(64bitポインタの プラットホームでは8の倍数)に丸めるように変更しました. これにより 実質余分なメモリを使うことなく realloc の回数を削減できます.

HV のもつ HE* の配列は適切な(最小の)サイズを確保するように なりました. Nicholas Clark のまた別の修正によるものです. -DPERL_USE_LARGE_HV_ALLOC をつけてコンパイルすることで これまでのずさんで怠惰な実装を使うことも出来ます.

XS や埋め込みデバッグ用に, perl が -DDEBUG_LEAKING_SCALARS に 加えて -DDEBUG_LEAKING_SCALARS_FORK_DUMP もつけてコンパイル することでグローバルデストラクションの直前に子プロセスを fork させる事が出来ます. これによりグローバルデストラクションの終了時に 漏れていた任意のスカラーの値を出力することができます. これが ない場合には, スカラーは検出した地点では既に十分に解放されていて, そこでは意味のあるダンプは出力できないでしょう. この機能は Mike Giroux によるアイデアを根気のいい Nicholas Clark が実装 したものです.


プラットホーム固有の問題

HP-UX 11.23 (Itanium 2) 上の最適化は HP C-ANSI-C を使用している場合に 現在部分的に無効にされています(+O1 にスケールダウン); これは 高レベルの最適化による問題の原因がまだ不明瞭なためです.

VMS において失敗するテストがいくつかあります. これはこのリリースにおいて, 開発ストリームから修正された分の統合のために, 多すぎる依存関係と共にテストの修正や小さなモジュールの修正が 行われたためです. 以下に既知の失敗と, それに気付いて修正された パッチ番号を並べておきます.

    ext/Devel/PPPort/t/ppphtest.t  #26913
    ext/List/Util/t/p_tainted.t    #26912
    lib/ExtUtils/t/PL_FILES.t      #26813
    lib/ExtUtils/t/basic.t         #26813
    t/io/fs.t
    t/op/cmp.t

バグ報告

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

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


関連項目

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

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

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

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


和訳

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

原典: perl VERSION 5.8.8. 翻訳日: 2006-02-04.

perldelta - perl v5.8.8 の新機能

索引

perldelta - perl v5.8.8 の新機能