Perl 6、ついにリリース 40
ストーリー by headless
子供 部門より
子供 部門より
Perl 6 Advent Calendarは24日、Perl 6のリリースをアナウンスした(Perl 6 Advent Calendar - Day 24、
Phoronixの記事、
6gutsの記事)。
2000年に言語の完全な刷新を目指して開発が始められたPerl 6だが、開発は遅々として進まず、15年の時を経てようやくリリースにこぎつけたことになる。Perl 6 Advent Calendarでは、まだ15歳の子供なので未完成な部分もあるが、今後数年の間により速く効率的になるとしている。Perl 6は「Advent(アルファ版)」「Birthday(ベータ版)」のように祭りや祝い事の名前が付けられており、リリース版は「Perl 6 Christmas」とのこと。
このPerl 6について、あるAnonymous Coward 曰く、
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的なもの)によるモジュールのインストールがエラーになってしまった。
Perl6ちょおすごい (スコア:5, 参考になる)
日本語のhello, worldが普通に表示できる! (なおソースファイルの文字コードはUTF-8)
日本語のファイル名が普通に開ける!
これ [qiita.com]
さっきから何を当たり前のことで感動してるんだとか何がすごいのかわからないとか思った人は幸せです。きっとWindowsのPerl 5で日本語 [developers.srad.jp]を扱ったことがないのでしょう。
惜しむらくは、コマンドラインからUnicode文字列を受け取れないこと。
世界に愛を込めようとしたら世界に疑問を抱いてしまった。
あとuse v5;での動作を確認したかったけど(正直Perl6の文法を今さら覚える気になれなかったので)タレコミに書いたとおりモジュールのインストールがまともにできないので確認できませんでした。願わくはバグ互換性を窓から投げ捨てて普通に日本語が使えるようになっていてほしいのだけど。
Re:Perl6ちょおすごい (スコア:1)
IRCに接続したけど脳や目が英語を精読することを拒否したから何が
最新ニュースなのかわからずじまいだったけどそういうことか。。。
IRCのテンプレ的なstatusログにヘルプが記述されていて
Hello, World
としきりに促していたような心当たりならある。
Re:Perl6ちょおすごい (スコア:1)
ちなみに最初のhello, worldサンプルをPerl 5で書こうとするとこうなる。
まずは、perlintro [perl.org]のサンプルの文字列を日本語に置き換えるという、誰でも考えつきそうなところから始めてみよう。
なんか文字化けした。ちなみにOS XやLinuxだと文字化けしないので、以下の様なことに悩まされるのは実質Windowsユーザーだけだし、他環境からソースを移植するときはこういう手抜き記述が残っていないかソース全体を目を皿のようにして探さなければならない。
文字列は♥を含むので、ソースコードをCP932で保存することはできない。調べてみると、文字列リテラルをUTF-8で書くにはuse utf8;が必要なようだ。
文字化けが解消しない上になんか変なメッセージが出た(このメッセージがなんなのかはもちろん知っているが、初学者という設定だったらそう思っても不思議はない)。
さらに調べると、内部表現の文字列を出力するときはまずエンコードする必要があるようだ。
変なメッセージは消えたが、まだ文字化けが解消しない。
さらに調べると、WindowsはシフトJISのOSで、しかもCP932とかいうMicrosoft独自の方言を使っているらしい(という知ったかぶり解説に騙されている人が多いようだが、これは嘘八百。まあWin9xの時代は正しかったんだけどね)。
なんかまた変なメッセージが出る上に♥がまだ出力できない。Encode信者の皆様におかれましては、♥をどうすればEncodeで出力できるかぜひ教えていただきたいもんだ。実際にこれで困った経験のないエアユーザーに期待するだけ無駄だろうけど。
さらに調べると、Win32::Unicode::Consoleというモジュールを使えばUnicode文字を出力できるようだ。
おっとWin32::Unicode::ConsoleはStrawberry Perlの標準モジュールじゃないのか。
ようやくまともに出力できたけど、ソースコードはWin32以外の環境への移植性が全くない。ちなみにWin32::Unicode::Nativeというモジュールを使うと、見かけ上printでUnicode文字列を出力しているようなソースが書けるけど、Win32::Unicode::Nativeがオーバーライドする関数は内部表現の文字列を引数に取る仕様であるのに対して、普通のソースでは(本当は)まずエンコードする必要があるので。やっぱり移植性がない。ていうか見かけで区別できなくなるだけたちが悪い。まあ個人的にはどうせWindowsしか使わないから移植性には目をつぶるとしよう。
Strawberry Perlの新しいバージョンが出たのでインストールした。モジュールはインストールし直しになる。
なんかテストに失敗してインストールできないんだが。これのせいでStrawberry Perl 5.16より新しいバージョンにできなくて、せっかくPerl 5.20で導入されたsignaturesも試せない。マジ困ってるんだけど、なんとかしてくれませんかね(バグ報告はもちろんしたが、年単位で放置されているのでWin32::Unicode::Consoleの開発者はもう興味を失っているようだ)。まあエアユーザーに期待するだけ(以下略
Re: (スコア:0)
>年単位で放置されているのでWin32::Unicode::Consoleの開発者はもう興味を失っているようだ
Windowsから脱出しちゃったのかもね
過去との互換性のために出来ないんだろうけどWindowsもマルチバイト環境をUTF-8に移行してくれたらいいのにな。
Re: (スコア:0)
https://github.com/bokutin/strawberry-perl-USING_WIDE-revival [github.com]
Re: (スコア:0)
ちなみに、が、だいぶ長い。
不精なので読めないわ…
不精なので日本語がダメだったら英語使いますわ。
Re: (スコア:0)
> > perl6 hello.pl
> こんにちは、世界♥
中には誰もいませんよ。
#この小箱の中に小人さんが入って、彼等が頑張って翻訳してるわけじゃないのです。
Re: (スコア:0)
惜しむらくは、コマンドラインからUnicode文字列を受け取れないこと。
Windowsでperl5使ってる者だが、結局なんじゃないかと。
一つ目と二つ目はUTF8な文字列(perl5だとutf8フラグ付き)でもSTDOUTへの出力の際にcp932に変換してくれているように見える。
二つ目は更にファイルシステムの読み込みの際も変換かけてくれているのかな。
その癖、最後のを見るとSTDINからは駄目。
というかWindowsだからと勝手に変換かけられても困るのだがね。実行はcmd.exeだけじゃないのよ。
Encodeかますのが面倒は解るが、実装が中途半端な方がもっと面倒じゃないか。
単なる不具合で修正されるというならともかく、幻滅もんじゃないか、これ。
Re:Perl6ちょおすごい (スコア:2, 参考になる)
> 一つ目と二つ目はUTF8な文字列(perl5だとutf8フラグ付き)でもSTDOUTへの出力の際にcp932に変換してくれているように見える。
CP932に♥は含まれていないからそれはありえない。もしcp932に変更されているなら3つ目のように?に変換されて出力されるはず。だからWin32::Unicode::Consoleのように、最終的にWriteConsoleWを使っているはず。わざわざサンプルに♥を含めたのはそれを確認するため。
> 二つ目は更にファイルシステムの読み込みの際も変換かけてくれているのかな。
これも違う。コマンドラインから渡せなかったのでわかりにくくなってるけど、たとえば
とすれば、ちゃんとUnicode文字を含むファイルを開ける。つまりWin32::Unicode::Fileのように最終的にCreateFileWを呼び出している。
単にcp932に変換している程度だったらここまで感動していないよ。
> その癖、最後のを見るとSTDINからは駄目。
あのーSTDINとコマンドライン引数の区別もついてないんですか?
とりあえずこれ [stackoverflow.com]で確認。
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;に期待してるんだよ。
Re: (スコア:0)
> perl6のブートストラップはバッチで実装されてるから今のところCMDからじゃないと実行できねえぞ。UNIXの実装(UNIXではシェルスクリプトをブートストラップにすることはよくある)を単純に移植したからこうなるんだな。やっぱWindowsは開発環境として軽視されてるな。
この件だけど、ビルドガイドにPowerShell上でビルド方法も書かれていたから、PowerShell上でビルドすればcmdlet版のperl6ができるんじゃないかな(未確認)。
CygwinやMinGW上でビルドできるかどうかは知らないけど、そもそもCygwinのPerl 5はUnicode文字も普通に使えるから問題ない(なぜCygwin Perlを使わないのかもリンク先 [developers.srad.jp]に書いてある。UNIX likeに閉じた環境ならCygwinもいいけどね)。
もうクリスマス終わったのに (スコア:1)
Re: (スコア:0)
12月24日にリリース発表ですからおかしくないでしょう。タレコミが27日なのは別の話。
Re:もうクリスマス終わったのに (スコア:1)
タレコミが遅れたのは実物のダウンロードリンクがなかなか確認できなかったからです。その割にTwitterはPerl6でバズっていたようですが、いったい何を見て騒いでいたのやら。
Re: (スコア:0)
今回出たのはバージョンChristmasということですよね。
たぶん、今後はリリース日と無関係にバージョン名がついていくかと。
# calender [srad.jp](光沢機/つや出し仕上げ) なのか…
Re:もうクリスマス終わったのに (スコア:1)
次はDですね。
「D-Day」とか?(こんなのしか思いつかない)
こゆのはまさにcygwin+cygterm使うとこじゃないの? (スコア:1)
Perl6 は触ってないけど
Re:こゆのはまさにcygwin+cygterm使うとこじゃないの? (スコア:1)
SSHDのサービスを起動した手元PCにteratermでアクセスするだけでは
いろいろ足りないのかな、やっぱり。
やっぱりcalenderなのか (スコア:0)
メチャ繰り返してるし
Re:やっぱりcalenderなのか (スコア:1)
リリース元は calendar と正しく綴っており、タレコミには calendar への言及はない模様。
rakudoって楽土? (スコア:0)
perl.orgじゃなくてperl6.orgとか、いろいろ回ってrakudo-startていうのをダウンロードしなさいっていうことになるらしいんだけど、クリスマスに神の国が到来して、プログラマーの王道楽土がもたらされる、ということなのかな…次はDか…Distopia…おっといけない指が滑ってしまった。
Re:rakudoって楽土? (スコア:1)
> 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行めが間違っているので注意。正解は
(「=」が必要だし引用符で値をくくってはいけない)
私の環境では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は軽視されがちなので出ない可能性も普通にあり得るし)。
ニーズは? (スコア:0)
え?Perl5系と6系は別の言語だって・・・
6が出たから乗り換えるとかそういうんじゃないんだって!!
はいはい。
Re: (スコア:0)
個人的にはuse v5;で日本語がまともに使えるなら、それだけで乗り換える理由としては十分すぎる。
# あえてuse v6;(デフォルト)を使う理由は他の人に任せた。
Re: (スコア:0)
まともに使えなくてももう15年もやってこられたのに、
今更乗り換える必要があるってのが解せない
Re:ニーズは? (スコア:1)
Perl 5を呪いながらクソ面倒くさい呪文 [developers.srad.jp]を毎回毎回書き続けたり移植性を犠牲にしたりすればなんとか使えないこともなかったからだよ。スクリプト言語にあるまじきクソ面倒な手間から開放されるなら喜んで乗り換える。
Re:ニーズは? (スコア:1)
昔は、というか、その15年のうちたぶん半分くらい。いや、もしかしたら最近でも、
・日本語は特殊なバイナリ列として扱う。
・ファイル名には日本語なんて使わない。
みたいな乱暴なルールがまかり通ってたので、わりとどうにかなってたんだよ。
文字列はとりあえず全部EUCに変換してバイトコード決め打ちで処理とか。
他のプログラム言語は、普通に多言語対応していって、
日本語文字列だろうが日本語ファイル名だろうが、
当たり前に使えるようになっていったのにな。
いや、まあ、文字コードは全部utf8で、って言えるようになったから、
use utf8して、openに:utf8指定すれば、文字列の扱いはそこそこどうにかなるんだけどさ。
ファイル名の扱いについてはなぁ……
Re: (スコア:0)
ファイル名に日本語をつかうほうがよっぽど乱暴だろ。
Re: (スコア:0)
実装で楽をする為に学習の努力を惜しまないプログラマー気質に欠けてますな。
そんなのがまかり通ってたらいまだに主力言語がCOBOLとかになっちゃうよ。
Re: (スコア:0)
Perlにしがみつきたがってる人がそんなこというのは自虐ジョークか何か?
日本語ファイル名とかで楽をしたかった努力家の怠け者はとっくに他に移行してるだろ?
Re: (スコア:0)
日本語の問題が解決したと思ったらその他の問題で壮大なトラップにかかるに1票。
Re: (スコア:0)
サポートの関係?
今のところは問題ないか。
Re: (スコア:0)
Perl 6とPerl 5は別言語なのだから、Perl 6がリリースされてもPerl 5の開発はそれとは無関係に続けられるはずで(現に開発コミュニティもまったく異なるし)、サポートの問題はないはず。
Re: (スコア:0)
どっちかのコミュニティからもう一方に開発者が逃走するかもしれないし…
Re: (スコア:0)
技術的にも違いすぎてて一方での開発経験をもう一方で活かせるということがほとんどないので、あまり心配ないと思う。
Re: (スコア:0)
非同期処理が書き易いらしい。
IDEでの対応のしやすさはどうだろう? (情報を探せませんでした)
.Net対応がそれなりに動けば、C++に変換して高速化とか、さらにJavaScriptにしてブラウザでも動くんです、とできそう。
Re: (スコア:0)
MoarVM(Perl 6のために開発されたVM)のほかに、JVMでも動くらしいです。
京のぶぶ漬け (スコア:0)
「ぶぶ漬けでもいかが」みたいな感じで、「お前にはPerl6がお似合いだ」と言えなくなるじゃないですか。
Re: (スコア:0)
#2941425のような嫌味な人にはRustかDartがおすすめ
Re: (スコア:0)
「Perl6がお似合いだとでも言いつづけてりゃいいんだよ」
と言えばいいんじゃないですか
Re: (スコア:0)
あ、それとデザート食べてから帰ります。まだ時間あるんで。