Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

スマートマッチの構文はとりあえずそのままになったので一安心

スマートマッチの構文変更で、CPANの互換性が崩れる変更はリバートされたので、一安心。

https://perl5.git.perl.org/perl.git/commitdiff/7896dde7482a2851e73f0ac2c32d1c71f6e97dca

スマートマッチに関する所見

Perlには、実験的なスマートマッチという構文がある。これは、非常に読み解くのが難解な構文で、できれば、正式に採用されるのは、見送ってほしいと思うものだ。

# スマートマッチ
左辺 ~~ 右辺

スマートマッチは、もともとは、Perlでswitch ~ case文を導入するために、作られたような記憶がある。詳しい理由はよく知らない。ちなみに、Perlでは、switch ~ case文はgiven ~ whenだ。given ~ when も実験状態で止まっている。

スマートマッチの読みにくさ

スマートマッチは読みにくい。それは、演算子の意味が、左辺、右辺の値の意味によって、変わってくるからだ。スマートマッチの意味を覚えるために、右辺、左辺を読み解かないといけない。これは、ただでさえ読みづらいといわれているPerlをさらに読みづらくしてしまう恐れがある。

given ~ whenがパフォーマンスを上げることはない

C言語のswitch文は、パフォーマンスを上げる。条件が多い時は、if文よりもずっと速い。ジャンプテーブルが作られて、一発でジャンプできるからだ。

一方、given ~ whenは、シンタックスシュガーであって、ジャンプテールが作られることはない(はず)。だから、given ~ whenが導入されてもうれしいことはあんまりなく、スマートマッチが導入されることで、Perl文法の複雑さが、より増す恐れがある。

明らかなメリットがないままに、複雑性だけが増す構文追加は、Perlの未来を考えた時に、なるべくやらないほうがいいんじゃないかとも思う。

明らかなメリットがないのに、後方互換性を崩す変更も、なるべくやらないほうがいいんじゃないかと思う。