パスワードを忘れた? アカウント作成
12631759 story
Perl

Perl 6、ついにリリース 40

ストーリー by headless
子供 部門より
Perl 6 Advent Calendarは24日、Perl 6のリリースをアナウンスした(Perl 6 Advent Calendar - Day 24Phoronixの記事6gutsの記事)。

2000年に言語の完全な刷新を目指して開発が始められたPerl 6だが、開発は遅々として進まず、15年の時を経てようやくリリースにこぎつけたことになる。Perl 6 Advent Calendarでは、まだ15歳の子供なので未完成な部分もあるが、今後数年の間により速く効率的になるとしている。Perl 6は「Advent(アルファ版)」「Birthday(ベータ版)」のように祭りや祝い事の名前が付けられており、リリース版は「Perl 6 Christmas」とのこと。

このPerl 6について、あるAnonymous Coward 曰く、

現時点でWindows用のインストールパッケージは提供されておらず、ソースからビルドする必要がある。タレコミ子の環境ではpanda (Perl 6のCPAN的なもの)によるモジュールのインストールがエラーになってしまった。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2015年12月27日 17時21分 (#2941394)

    日本語のhello, worldが普通に表示できる! (なおソースファイルの文字コードはUTF-8)

    - hello.pl -------------
    say 'こんにちは、世界♥';
    ------------------------
    > perl6 hello.pl
    こんにちは、世界♥

    日本語のファイル名が普通に開ける!

    - file.pl --------------

    これ [qiita.com]

    ------------------------
    - 日本語.txt -----------
    こんにちは、世界♥
    ------------------------
    > perl6 file.pl 日本語.txt
    こんにちは、世界♥

    さっきから何を当たり前のことで感動してるんだとか何がすごいのかわからないとか思った人は幸せです。きっとWindowsのPerl 5で日本語 [developers.srad.jp]を扱ったことがないのでしょう。
    惜しむらくは、コマンドラインからUnicode文字列を受け取れないこと。

    - hello.pl -------------
    sub MAIN($x) {
        say $x;
    }
    ------------------------
    > perl6 hello.pl こんにちは、世界♥
    こんにちは、世界?

    世界に愛を込めようとしたら世界に疑問を抱いてしまった。

    あとuse v5;での動作を確認したかったけど(正直Perl6の文法を今さら覚える気になれなかったので)タレコミに書いたとおりモジュールのインストールがまともにできないので確認できませんでした。願わくはバグ互換性を窓から投げ捨てて普通に日本語が使えるようになっていてほしいのだけど。

    • IRCに接続したけど脳や目が英語を精読することを拒否したから何が
      最新ニュースなのかわからずじまいだったけどそういうことか。。。

      IRCのテンプレ的なstatusログにヘルプが記述されていて
      Hello, World
      としきりに促していたような心当たりならある。

      親コメント
    • by Anonymous Coward on 2015年12月28日 17時49分 (#2941818)

      ちなみに最初のhello, worldサンプルをPerl 5で書こうとするとこうなる。

      まずは、perlintro [perl.org]のサンプルの文字列を日本語に置き換えるという、誰でも考えつきそうなところから始めてみよう。

      -- hello.pl --------------
      print "こんにちは、世界♥";
      --------------------------
      > perl hello.pl
      縺薙s縺ォ縺。縺ッ縲∽ク也阜笙・

      なんか文字化けした。ちなみにOS XやLinuxだと文字化けしないので、以下の様なことに悩まされるのは実質Windowsユーザーだけだし、他環境からソースを移植するときはこういう手抜き記述が残っていないかソース全体を目を皿のようにして探さなければならない。

      文字列は♥を含むので、ソースコードをCP932で保存することはできない。調べてみると、文字列リテラルをUTF-8で書くにはuse utf8;が必要なようだ。

      -- hello.pl --------------
      use utf8;
      print "こんにちは、世界♥";
      --------------------------
      > perl hello.pl
      Wide character in print at hello.pl line 2.
      縺薙s縺ォ縺。縺ッ縲∽ク也阜笙・

      文字化けが解消しない上になんか変なメッセージが出た(このメッセージがなんなのかはもちろん知っているが、初学者という設定だったらそう思っても不思議はない)。

      さらに調べると、内部表現の文字列を出力するときはまずエンコードする必要があるようだ。

      -- hello.pl --------------
      use utf8;
      binmode(STDOUT,":encoding(utf8)") ;
      print "こんにちは、世界♥";
      --------------------------
      > perl hello.pl
      縺薙s縺ォ縺。縺ッ縲∽ク也阜笙・

      変なメッセージは消えたが、まだ文字化けが解消しない。

      さらに調べると、WindowsはシフトJISのOSで、しかもCP932とかいうMicrosoft独自の方言を使っているらしい(という知ったかぶり解説に騙されている人が多いようだが、これは嘘八百。まあWin9xの時代は正しかったんだけどね)。

      -- hello.pl --------------
      use utf8;
      binmode(STDOUT,":encoding(cp932)") ;
      print "こんにちは、世界♥";
      --------------------------
      > perl hello.pl
      "\x{2665}" does not map to cp932.
      こんにちは、世界\x{2665}

      なんかまた変なメッセージが出る上に♥がまだ出力できない。Encode信者の皆様におかれましては、♥をどうすればEncodeで出力できるかぜひ教えていただきたいもんだ。実際にこれで困った経験のないエアユーザーに期待するだけ無駄だろうけど。

      さらに調べると、Win32::Unicode::Consoleというモジュールを使えばUnicode文字を出力できるようだ。

      -- hello.pl --------------
      use utf8;
      use Win32::Unicode::Console;
      printW "こんにちは、世界♥";
      --------------------------
      > perl hello.pl
      Can't locate Win32/Unicode/Console.pm in @INC (@INC contains: C:/strawberry/perl/site/lib C:/strawberry/perl/vendor/lib C:/strawberry/perl/lib .) at hello.pl line 2.
      BEGIN failed--compilation aborted at hello.pl line 2.

      おっとWin32::Unicode::ConsoleはStrawberry Perlの標準モジュールじゃないのか。

      > cpan install Win32::Unicode::Console
      (途中省略)
      > perl hello.pl
      こんにちは、世界♥

      ようやくまともに出力できたけど、ソースコードはWin32以外の環境への移植性が全くない。ちなみにWin32::Unicode::Nativeというモジュールを使うと、見かけ上printでUnicode文字列を出力しているようなソースが書けるけど、Win32::Unicode::Nativeがオーバーライドする関数は内部表現の文字列を引数に取る仕様であるのに対して、普通のソースでは(本当は)まずエンコードする必要があるので。やっぱり移植性がない。ていうか見かけで区別できなくなるだけたちが悪い。まあ個人的にはどうせWindowsしか使わないから移植性には目をつぶるとしよう。

      Strawberry Perlの新しいバージョンが出たのでインストールした。モジュールはインストールし直しになる。

      > cpan install Win32::Unicode::Console
      (途中省略)
      Result: FAIL
      Failed 1/27 test programs. 3/284 subtests failed.
      dmake.exe:  Error code 255, while making 'test_dynamic'
        XAICRON/Win32-Unicode-0.38.tar.gz
        C:\STRAWB~1\c\bin\dmake.exe test -- NOT OK
      //hint// to see the cpan-testers results for installing this module, try:
        reports XAICRON/Win32-Unicode-0.38.tar.gz
      Stopping: 'install' failed for 'X/XA/XAICRON/Win32-Unicode-0.38.tar.gz'.

      なんかテストに失敗してインストールできないんだが。これのせいでStrawberry Perl 5.16より新しいバージョンにできなくて、せっかくPerl 5.20で導入されたsignaturesも試せない。マジ困ってるんだけど、なんとかしてくれませんかね(バグ報告はもちろんしたが、年単位で放置されているのでWin32::Unicode::Consoleの開発者はもう興味を失っているようだ)。まあエアユーザーに期待するだけ(以下略

      親コメント
      • by Anonymous Coward

        >年単位で放置されているのでWin32::Unicode::Consoleの開発者はもう興味を失っているようだ
        Windowsから脱出しちゃったのかもね

        過去との互換性のために出来ないんだろうけどWindowsもマルチバイト環境をUTF-8に移行してくれたらいいのにな。

      • by Anonymous Coward

        ちなみに、が、だいぶ長い。
        不精なので読めないわ…
        不精なので日本語がダメだったら英語使いますわ。

    • by Anonymous Coward

      > > perl6 hello.pl
      > こんにちは、世界♥
      中には誰もいませんよ。

      #この小箱の中に小人さんが入って、彼等が頑張って翻訳してるわけじゃないのです。

    • by Anonymous Coward

      惜しむらくは、コマンドラインからUnicode文字列を受け取れないこと。

      Windowsでperl5使ってる者だが、結局なんじゃないかと。

      一つ目と二つ目はUTF8な文字列(perl5だとutf8フラグ付き)でもSTDOUTへの出力の際にcp932に変換してくれているように見える。
      二つ目は更にファイルシステムの読み込みの際も変換かけてくれているのかな。
      その癖、最後のを見るとSTDINからは駄目。
      というかWindowsだからと勝手に変換かけられても困るのだがね。実行はcmd.exeだけじゃないのよ。

      Encodeかますのが面倒は解るが、実装が中途半端な方がもっと面倒じゃないか。
      単なる不具合で修正されるというならともかく、幻滅もんじゃないか、これ。

      • by Anonymous Coward on 2015年12月28日 9時32分 (#2941554)

        > 一つ目と二つ目はUTF8な文字列(perl5だとutf8フラグ付き)でもSTDOUTへの出力の際にcp932に変換してくれているように見える。

        CP932に♥は含まれていないからそれはありえない。もしcp932に変更されているなら3つ目のように?に変換されて出力されるはず。だからWin32::Unicode::Consoleのように、最終的にWriteConsoleWを使っているはず。わざわざサンプルに♥を含めたのはそれを確認するため。

        > 二つ目は更にファイルシステムの読み込みの際も変換かけてくれているのかな。

        これも違う。コマンドラインから渡せなかったのでわかりにくくなってるけど、たとえば

        print "日本語♥.txt".IO.slurp;

        とすれば、ちゃんとUnicode文字を含むファイルを開ける。つまりWin32::Unicode::Fileのように最終的にCreateFileWを呼び出している。

        単にcp932に変換している程度だったらここまで感動していないよ。

        > その癖、最後のを見るとSTDINからは駄目。

        あのーSTDINとコマンドライン引数の区別もついてないんですか?
        とりあえずこれ [stackoverflow.com]で確認。

        ああああ
        Read: ああああ
        日本語♥
        Read: 日本語♥

        STDINはちゃんとUnicode文字にも対応している。
        コマンドライン引数が対応していないのは確かに残念だけど、Perl 5のように修正不可能な根本的な制約ではないから修正の望みがある。

        > というかWindowsだからと勝手に変換かけられても困るのだがね。実行はcmd.exeだけじゃないのよ。

        WindowsのコンソールAPIでやり取りする限りPowerShellでもbashでも同じだよ。と思ったけどperl6のブートストラップはバッチで実装されてるから今のところCMDからじゃないと実行できねえぞ。UNIXの実装(UNIXではシェルスクリプトをブートストラップにすることはよくある)を単純に移植したからこうなるんだな。やっぱWindowsは開発環境として軽視されてるな。
        これはさすがにちょっとアレだが、個人的にはCMDしか使わないから問題ない。

        > Encodeかますのが面倒は解るが、実装が中途半端な方がもっと面倒じゃないか。

        面倒ってのは理由の一部にすぎない。そもそもEncodeを使う限りUnicode文字に対応できない中途半端な処理しかできない。Win32::UnicodeやWin32::Longnameを使えば移植性がなくなる。つーかリンク先の記事 [developers.srad.jp]に全部書いてあるから読んでくれないかな。

        > 単なる不具合で修正されるというならともかく、幻滅もんじゃないか、これ。

        Perl 5の根本的な欠陥(文字列が内部表現かどうかPerl側で識別することができないのでそれを管理する手間を短気で無精で傲慢なプログラマー様に押し付けている)だけど、互換性の理由からPerl 5で修正されることはありえないことがわかってるから喜んでるんしuse v5;に期待してるんだよ。

        親コメント
        • by Anonymous Coward

          > perl6のブートストラップはバッチで実装されてるから今のところCMDからじゃないと実行できねえぞ。UNIXの実装(UNIXではシェルスクリプトをブートストラップにすることはよくある)を単純に移植したからこうなるんだな。やっぱWindowsは開発環境として軽視されてるな。

          この件だけど、ビルドガイドにPowerShell上でビルド方法も書かれていたから、PowerShell上でビルドすればcmdlet版のperl6ができるんじゃないかな(未確認)。

          CygwinやMinGW上でビルドできるかどうかは知らないけど、そもそもCygwinのPerl 5はUnicode文字も普通に使えるから問題ない(なぜCygwin Perlを使わないのかもリンク先 [developers.srad.jp]に書いてある。UNIX likeに閉じた環境ならCygwinもいいけどね)。

  • Advent(待降節)ってどうゆうこと
  • Perl6 は触ってないけど

  • by Anonymous Coward on 2015年12月27日 15時54分 (#2941367)

    メチャ繰り返してるし

  • by Anonymous Coward on 2015年12月27日 17時18分 (#2941393)

    perl.orgじゃなくてperl6.orgとか、いろいろ回ってrakudo-startていうのをダウンロードしなさいっていうことになるらしいんだけど、クリスマスに神の国が到来して、プログラマーの王道楽土がもたらされる、ということなのかな…次はDか…Distopia…おっといけない指が滑ってしまった。

    • by Anonymous Coward on 2015年12月27日 17時54分 (#2941400)

      > rakudo-start

      Rakudo Starの間違いですか? Rakudo StarはPerl 6のバイナリディストリビューションですが、少なくとも今のところWindows版のRakudo Starは1か月前の日付のものしか存在しません。MSIインストーラーに至っては9月付。
      というわけで、 https://perl6.org/downloads/ [perl6.org] 経由で https://github.com/tadzik/rakudobrew [github.com] をダウンロードして、ビルドする必要があるようです。(トップページのヘッダと本文中のボタンとでリンク先が違うとかどういうトラップだよ)
      README.mdの「On Windows CMD do:」は2行めが間違っているので注意。正解は

      SET PATH=%USERPROFILE%\rakudobrew\bin;%PATH%

      (「=」が必要だし引用符で値をくくってはいけない)

      私の環境ではVisual Studio 2015 SP1とGit for Windows 2.6.4 (インストール時にコマンドプロンプトからgitコマンドを使うよう指定)とStrawberry Perl 5.16.3001で rakudobrew build moar と rakudobrew build-panda まではできたのですが、panda install Task::Star でコケました。なのでバイナリパッケージ待ち(本当に出るとして。最近プログラマーの開発環境としてWindowsは軽視されがちなので出ない可能性も普通にあり得るし)。

      親コメント
  • by Anonymous Coward on 2015年12月27日 18時14分 (#2941404)
    あえて、Perl6を使う理由を挙げるとしたら何になるんだろうか・・・

    え?Perl5系と6系は別の言語だって・・・
    6が出たから乗り換えるとかそういうんじゃないんだって!!

    はいはい。
    • by Anonymous Coward

      個人的にはuse v5;で日本語がまともに使えるなら、それだけで乗り換える理由としては十分すぎる。
      # あえてuse v6;(デフォルト)を使う理由は他の人に任せた。

      • by Anonymous Coward

        まともに使えなくてももう15年もやってこられたのに、
        今更乗り換える必要があるってのが解せない

        • by Anonymous Coward on 2015年12月27日 21時08分 (#2941456)

          Perl 5を呪いながらクソ面倒くさい呪文 [developers.srad.jp]を毎回毎回書き続けたり移植性を犠牲にしたりすればなんとか使えないこともなかったからだよ。スクリプト言語にあるまじきクソ面倒な手間から開放されるなら喜んで乗り換える。

          親コメント
        • by hahahash (41409) on 2015年12月27日 22時19分 (#2941473) 日記

          昔は、というか、その15年のうちたぶん半分くらい。いや、もしかしたら最近でも、

          ・日本語は特殊なバイナリ列として扱う。
          ・ファイル名には日本語なんて使わない。

          みたいな乱暴なルールがまかり通ってたので、わりとどうにかなってたんだよ。
          文字列はとりあえず全部EUCに変換してバイトコード決め打ちで処理とか。

          他のプログラム言語は、普通に多言語対応していって、
          日本語文字列だろうが日本語ファイル名だろうが、
          当たり前に使えるようになっていったのにな。

          いや、まあ、文字コードは全部utf8で、って言えるようになったから、
          use utf8して、openに:utf8指定すれば、文字列の扱いはそこそこどうにかなるんだけどさ。
          ファイル名の扱いについてはなぁ……

          親コメント
          • by Anonymous Coward

            ファイル名に日本語をつかうほうがよっぽど乱暴だろ。

        • by Anonymous Coward

          実装で楽をする為に学習の努力を惜しまないプログラマー気質に欠けてますな。
          そんなのがまかり通ってたらいまだに主力言語がCOBOLとかになっちゃうよ。

          • by Anonymous Coward

            Perlにしがみつきたがってる人がそんなこというのは自虐ジョークか何か?
            日本語ファイル名とかで楽をしたかった努力家の怠け者はとっくに他に移行してるだろ?

      • by Anonymous Coward
        まさか、日本語がまともに使えるだけで、Perl6という地雷原に進むなんてありえるのだろうか・・・

        日本語の問題が解決したと思ったらその他の問題で壮大なトラップにかかるに1票。
    • by Anonymous Coward

      サポートの関係?
      今のところは問題ないか。

      • by Anonymous Coward

        Perl 6とPerl 5は別言語なのだから、Perl 6がリリースされてもPerl 5の開発はそれとは無関係に続けられるはずで(現に開発コミュニティもまったく異なるし)、サポートの問題はないはず。

        • by Anonymous Coward

          どっちかのコミュニティからもう一方に開発者が逃走するかもしれないし…

          • by Anonymous Coward

            技術的にも違いすぎてて一方での開発経験をもう一方で活かせるということがほとんどないので、あまり心配ないと思う。

    • by Anonymous Coward

      非同期処理が書き易いらしい。

      IDEでの対応のしやすさはどうだろう? (情報を探せませんでした)
      .Net対応がそれなりに動けば、C++に変換して高速化とか、さらにJavaScriptにしてブラウザでも動くんです、とできそう。

      • by Anonymous Coward

        MoarVM(Perl 6のために開発されたVM)のほかに、JVMでも動くらしいです。

  • by Anonymous Coward on 2015年12月27日 19時13分 (#2941425)

    「ぶぶ漬けでもいかが」みたいな感じで、「お前にはPerl6がお似合いだ」と言えなくなるじゃないですか。

    • by Anonymous Coward

      #2941425のような嫌味な人にはRustかDartがおすすめ

    • by Anonymous Coward

      「Perl6がお似合いだとでも言いつづけてりゃいいんだよ」
      と言えばいいんじゃないですか

    • by Anonymous Coward

      あ、それとデザート食べてから帰ります。まだ時間あるんで。

typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...