Perlゼミ(サンプルコードPerl入門)

新着情報 8/16(木) 8時更新 Perl入学式 イベント情報

2018年06月26日

Perl 5.28リリース - Unicode 10.0サポート、文字列連結の高速化、ref関数、keys関数、forループの高速化

20180626074702

Perl 5.28が2018年6月22日にリリースされました。Perl 5.28でうれしい機能をピックアップして紹介。

Unicode 10.0サポート

Unicode 10.0がサポートされました。56種類の新しい絵文字が使えるようです。

文字列連結の高速化

複数の文字列連結が、高速化されました。内部的にmulticoncatという一つのオペコードで処理するようになったからです。

以下のようなコードが高速化されます。

    $s .= "a=$a b=$b\n"

たとえば、x86_64のシステムでは、以下の文字列連結のコードが4倍高速化されます。

    my $s;
    my $a = "ab\x{100}cde";
    my $b = "fghij";
    my $c = "\x{101}klmn";

    for my $i (1..10_000_000) {
        $s = "\x{100}wxyz";
        $s .= "foo=$a bar=$b baz=$c";
    }

さらに加えて定数文字列を含むsprintfもmulticoncatを使って、最適化されています。

ref関数の高速化

真偽値コンテキストではref関数がかなり速くなりました。真偽値コンテキストでは、一時的な文字列を作成しなくなったからです。

keys関数の高速化

keys関数は、スカラコンテキストでより最適化されました。

forループの高速化

forループとそれに類似した構文は、ほとんどのケースで、より効率的になりました。

perl -iによる置換が安全に

perl -iによるファイル内容の置換は、編集中はバックアップがとられるようになり、安全になりました。

Cent OS 5でインストールできないバグを修正

Perl 5.26はCent OS 5にインストールできませんでしたが、Perl 5.28では、インストールできるようになっています。僕の環境でも試して、インストールできることを確認!

実験的なサブルーチンシグネチャにおける属性の位置が変更

実験的なサブルーチンシグネチャにおける属性の位置が変更されました。

変更前 sub foo ($foo, $bar) : attr;
変更後 sub foo : attr ($foo, $bar)

互換性のない変更

PerlはC89が必須に

PerlのコンパイルにはC89がコンパイルできるコンパイラが必須になりました。C99やC11ではないので、見間違わないでね。

${^ENCODING}への値の設定は不正になりました

もし過去に、${^ENCODING}を設定している方がいればご注意。

sortプラグマによるsortアルゴリズムが指定できなくなりました

sortプラグマによるsortアルゴリズムが指定できなくなりました。常に、Perlデフォルトのsortアルゴリズムが使用されます。

Perl 5.28リリース雑感

今回のリリースは、小さなパフォーマンス改善が中心となるリリースに感じます。文字列のパフォーマンス改善は、すべてのPerlユーザーのメリットになるので、とてもうれしい。

最近のPerlでは、真偽値コンテキストのリファクタリングがされていて、文字列を返さなくって良い場所では、1が返されるようになって、これが高速化につながっている。

まだまだ息の長いCent OS 5にも最新のPerlがインストールできるようになって「一度書けば、Perlどこでも動くよ」って感じですね。

ひとこぶのひとこぶの 2018/07/08 13:09 Perlは毎年進化していて、紙の本が追いついてこないですね。そろそろ新しいラクダ本が読みたいです。Webだと新旧の情報が入り混じってしまって初心者泣かせです。

perlcodesampleperlcodesample 2018/07/12 07:33 確かに! 現在的なPerlの書き方を意識して書かれた入門本や参考書があるといいのですけれどね。

それと、2020年からは、紙の資料にチャレンジする予定ですので、採算ギリギリで紙の本を作ることにチャレンジするかもです!

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証