本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはバウンスメール解析ライブラリSisimai
本稿のサンプルコードは、
コードは遅くなる
ソフトウェアは機能の追加やバグの修正によって次第にコードが膨れ、
本稿では、
速度と保守性を考える
まず、
極端な例を出します。超高速に動くが誰も読めない魔術的なコードと、
前者は速度において優れている、
速度を求める
商業的見地から、
保守性を求める
コードの読みやすさは慣れや経験に基づく個人差があります。組織やチームのコーディングルールで禁止されている書き方もあるでしょう。とはいえ、
速度と保守性は両立できる
速くて読みやすいコードは存在します。いかなる状況においても、
コードを速くする前にまず計測
では、
しかし、
部分を競うベンチマーク
ベンチマークは、BenchmarkモジュールとTest::Moreモジュールを使ったベンチマークコードを書き、Devel::Sizeモジュールを使ってメモリ使用量の違いも見ます。
複数回実行したベンチマーク結果の中央値Devel::NYTProfモジュールで複数回プロファイリングを実行します。全体でも高速化ができていれば、
使用したPerlのバージョン
本稿のベンチマークは、
- Perl 5.18. 2 (2014年1月リリース) 
- Perl 5.28. 1 (2018年12月リリース) 
Perl 5.
ただし、Benchmarkモジュールが出力した結果は、__以降にそのまま載せていますので、
誌面で省略した部分
誌面のコードには、
具体的には、
コード冒頭のuse文
ベンチマークコードの冒頭では、use文が書いてあるものとします。
#!/usr/bin/env perl
use strict;
use warnings;
use Benchmark ':all';     # ベンチマーク用モジュール
use Test::More 'no_plan'; # 比較対象結果の検査で使うコード末尾の検証と実行部分
ベンチマークコードの末尾では、Test::Moreモジュールのisによる結果の検証と、Benchmarkモジュールのcmptheseによるベンチマーク実行コードが書いてあるものとします。
is ss($Email), 'neko@nyaan.jp';
is yy($Email), 'neko@nyaan.jp';
printf("Perl %s on %s\n%s\n", $^V, $^O, '-' x 50);
cmpthese(6e6, {
    's///' => sub { ss($Email) },
    'y///' => sub { yy($Email) },
});環境構築と実行方法
BenchmarkモジュールとTest::MoreモジュールはPerlのコアモジュールですので、Devel::Sizeモジュールと、Devel::NYTProfモジュールは、cpanmモジュール名というコマンドを実行して、
本誌サポートサイトから入手できるベンチマークコードは、
$ perl ./s-vs-y.pl
          Rate s/// y///
s/// 928793/s -- -77%
y/// 4054054/s 336% --Benchmarkモジュールが出力する結果は、Benchmark::cmptheseに指定した表示名s///、y///)、928793/、4054054/)、-77%、336%)
<続きの
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
- 特集1
 イミュータブルデータモデルで始める
 実践データモデリング
 業務の複雑さをシンプルに表現!
- 特集2
 いまはじめるFlutter
 iOS/Android両対応アプリを開発してみよう
- 特集3
 作って学ぶWeb3
 ブロックチェーン、スマートコントラクト、NFT



