Perlテックブログ

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

PerlはC言語とC++文法を包括しているという発見

SPVMの開発は、C/C++をもっとも簡単にバインディングできるということを一つの目標としています。

C/C++で書かれた、ライブラリを、同じ形で関数として表現したい。

こういった場合に、Perlの二つの文法が役にたつことを発見した。

  • 例外処理
  • リファレンス

「リファレンスはわかりにくい」という評判なんだけど、この間の飲み会では、「Perlにはリファレンスがあるのがいい」という意見が聞けた。

Perlのリファレンスは、C言語のポインタ渡しを表現できる

Perlのリファレンスの文法は、C言語のポインタ渡しを表現できる。こんな風に。

# Perl
my $num = 0;
foo(\$num);

// C言語
int32_t num = 0;
foo(&num);

Perlの例外処理は、C++の例外処理を表現できる

例外処理に関しても、いろいろと批判が加えられているけれど、シングルスレッドに限るのであれば、例外処理はわかりやすいエラー処理だと思う。

# Perl
eval {
   ...
}
if ($@) {

}

// C++
try {
  ...
} catch () {
  ...
}

もしPerlがこれらの文法を包括していなかったとしたら、C/C++を自然な形でラッピングすることは、きっと難しかったに違いない。

多様性や包括性に批判が加えられる時代だけれど、確かな価値を実感している。