Tuesday, 17 April 2012

Perl6

そういえば、触ってないなと思って。

http://perl6.org/

動くようになっていたのは知ってましたが、あまり見てませんでした。

本が Kindle で読める。結構良いね。例題が書いてあって、微妙に違う。

my @sorted = @names.sort({ %sets{$_} }).sort({ %matches{$_} }).reverse;

とか何やっているのかよくわからない。あ、そうか。

  sort {$sets{$a} <=> $set{$b}} @names;

のことかな?

method 呼び出しが、-> ではなくて、. になって Java/Python っぽい。連想配列の呼び出しが $sets{} じゃなくて %sets{} になってる。

この手の「ちょっと違うものがたくさんある」ってのはイマイチな感じ。Python も Ruby も同じ間違いやってるしな。PHPも4と5で随分違っていたし。手で直せないぐらい違う。

Perl は Perl2 から Perl5 までの後方互換性が割と良くて楽だった。でも、Perl6 でそれを捨てるのね。

use v6; とか use v5; とかあるらしいけど、現状では use v5; でも、$

  Variable $ARGV is not declared
  Unsupported use of <>;

とか言われるらしいです。

今回、Perl5 の整数ループの速度測ってみたら C の 25倍遅かった。これってすごくない? 25倍? どうすれば byte code interpreter で、そんな速度が出るんだ?

  my $count = 0;
  for my $i (0 .. 100000) { # 100_000_000) {
   $count += $i;
  }
  print "$count\n";


しかし、Perl6 では Perl5 の200倍遅いみたいです。まぁ、JIT かなんかするつもりなんだろうけど。あんまり見つけられず。いずれにせよ、Perl6 は、まだまだ先という感じだね。

  use v6;

  my $count = 0;
  for (0 .. 100000) -> $i {
   $count += $i;
  }
  say $count;

Post a Comment