ラベル perl の投稿を表示しています。 すべての投稿を表示
ラベル perl の投稿を表示しています。 すべての投稿を表示

2011年10月22日土曜日

perlとは心中しません

筆者は、perl5には結構お世話になってます。10年は前。それこそCGIの時代ですね。

C++を眺めてても、参考書をいくら読んでも全然判らなかった「オブジェクト指向」。perl5では、それを連想配列とパッケージでエミュレーションしてる訳ですが、その切り口によってオブジェクト指向の何たるかが腹に落ちました。機構から入ったという訳です。

残念ながら?それ以降、徐々に仕事はPHPに遷移します。何故ってperlの業界はCPAN前提みたいなとこあります。それは良いのですが、レンタルサーバだと後から入れるのは骨です。みたいな話は別途してます。

オープンソースでは仕方ないのでCPANのライブラリ群を配布ファイルに同梱しちゃった例もあります。あった有ったFreeStyle Wikiだ。ほうらこんな感じで大変な事に。
http://sourceforge.jp/projects/fswiki/svn/view/fswiki/trunk/fswiki/lib/?root=fswiki

そんな訳で、筆者がperl5と離れた理由は
  • 構文が気持ち悪いと思い始めた
  • 各種記号の使い分けが面倒。というか気持ち悪い。
    • 連想配列と単純配列の使い分け方法が「記号」だったりとか
      • %と@
      • []と{}
  • かと言って、dieとかmyとかlocalとか変なところで英字予約語を使う。
    • その予約語のネーミングセンスも独特。
  • 括弧を使うのか使わないのかハッキリしてほしい。
  • 中括弧の使い方が気持ち悪い。時がある。
  • 連想配列ベースのプログラムにちょっと疲れた。
  • 参照と実体の使い分けで、構文が違うので面倒臭い。
  • CPANを多用すると後(運用環境に設置する時)が面倒。しかし使わないと今(開発時)面倒。
  • dieで例外投げ、evalでキャッチ。という方法論が気持ち悪い。使ったことないけど。え?使いませんよ。だって例外が必要な案件で、perlを使う方が間違ってる。
その辺りの葛藤に負けたためです。善悪とかの話ではありません。好き嫌いです。議論の余地はありません。故に突っ込みはお控えください。それに当時の筆者としては、perlよりもPHPの構文の方が「美しく見えた」からです。今でもその認識はあまり変わってません。PHPはJavaの真似ですからね。※PHPは「その他」が駄目なわけですが

最近では、perl5ベースでも、「Modern Perl」と銘打って、真オブジェクト指向で作りましょうよ。な感じらしいです。use Mooseにより、実際見違えるほど見やすくはなりますね。
http://www.slideshare.net/bluefeet/modern-perl
じゃあMoose使えば良いじゃん。と言うかもしれない。これは条件付きで同意します。ただし、欲しいのはMooseだけなのに、色々なファイルが付いてくる。正直、CPANのこの風潮は辞めてほしい。
  • Moose自体が構成ファイルが多い。2万7千行
  • 別のCPANに依存してる。Class::MDPとか。
    • Class::MDP自身も他のCPANに依存してる。してるよね?
Mooseにはもうフレームワークというしかない規模です。え、フレームワークに決まってるだろって?済みません。認識不足でした。

筆者は大型フレームワークは嫌いなので、その点でMooseも除外対象です。

結論として、perl5+フレームワークで、ようやく汎用プログラムが書きやすくなる。それなら別の言語を使った方が早くね? プログラム言語は目的ではありません。手段です。故にperlだけに固執する理由は全く有りません。

そんな筆者は、Pythonとtclが好きです。関数型もいいらしいんですが40過ぎてからは頭が付いていきません。無理。


dankogaiさんもperlは嫌いらしい。本当か??吊りか???
http://twitter.com/#!/dankogai/statuses/452038972

2011年3月1日火曜日

perl6が大変な事になってる件

「CGI言語」として、一時期は一斉を風靡したperlですが、
perl6に至って、迷走を繰り返しているようです。

端的にいって、
2000年に始めます、と言ってから、
2011年現在、未だに正式リリースできてないというのです。

当時のプレスリリースでも有れば良かったのですが、
見当たりません。
とりあえず、perl6.orgは2003年辺りから稼働しているもよう。
http://web.archive.org/web/20031007002655/http://www.perl6.org/

2000年からの歴代の議論は追えるっぽい。
http://perl6.cz/wiki/Perl_6_and_Parrot_links#Articles.2C_Blogs.2C_Discussions

迷走は構文にも現れています。
究極は「ハイパー演算子」。ネーミングで既に怪しいですが、構文がヤバい。
http://perl6advent.wordpress.com/2009/12/06/day-6-going-into-hyperspace/
http://d.hatena.ne.jp/uasi/20100108/1262951364

> lsay (1, 2, 3, 4) <<+>> (3, 1, 3, 1)
[4, 3, 6, 5]
> lsay (1, 2, 3, 4) >>+<< (3, 1, 3, 1)
[4, 3, 6, 5]
どう見てもアスキーアートです。有難うございました。

正直、これっぽっちの記号群に、「意味」を持たせすぎで、
サンプルを見てすら、何が起こってるのか判りません。

こんなもんじゃないです。不等号を使ってるのには理由があります。

> lsay (1, 2, 3, 4) >>+>> 2
[3, 4, 5, 6]
> lsay 3 <<+<< (1, 2, 3, 4)
[4, 5, 6, 7]

逆向きキター。

結論から言うと、どうやら行列演算であったらしい。
普通は、ライブラリで用意してよいレベルでしょう。

なんで記号で頑張っちゃうかなあ。
言語仕様に色々取り込みすぎるから
いつまで経ってもリリースできないのかと。

合体ロボに、ビームライフルを付けるか、
核酸粒子砲を付けるかで揉めてるようなもんですよ。

これが、非オブジェクト指向言語の末路か、と思わざるを得ません。
(関数型を否定しているわけではないので念のため)

[1,2,3,4].add(2)
こっちの方が、解りやすいですよね。

perlは、昔から記号類を積極的に使う言語で、
具体的には、変数を使う構文では$,%,@の使い分けが必要です。
配列だろうが、連想配列だろうが、単純変数だろうが、
プログラマに構文を使い分けさせるのは

昨今のオブジェクト指向を鑑みるに、これは時代遅れだと思われます。

その一方で、sayとかdieとか、英単語の中途半端な導入が気になります。
ステートメントだから英単語。な訳ではありません。
演算子にも、記号群と、英単語群が混在しています。

例えば、比較演算子は、 <=> と cmpとの使い分けが必要です。
いまだに、どっちが文字列用で、どっちが数値用か覚えられません。
#これはPHPにも伝わっちゃってる、悪しき遺伝子ですね。

perl族は、配列操作が豊富、っていう意見も見かけましたが、
例えば配列スライスはpythonにもあるし、
行列演算とか、何に使うんだ?と正直思います。

かく言う筆者も、perl5のmapとgrepに凝ったことがありましたが、
第3者にソースを見せるときには、ぶっちゃけ評判悪かったですね。
pythonでは内包表記とかを使って、人間に優しく記述できます。

perl5までは例外がない。というか、catchする方法が無いわけですが。
evalで例外をキャッチできます。という記事も見かけましたが、
http://www.geocities.jp/ky_webid/perl5/040.html
これは頓知の領域でしょう。
livedoorクリップで、この記事へのツッコミを見かけましたが、間違っちゃいけません。evalが補足するのはエラーであって例外ではありません。だって例外をプログラマが任意に投げる方法って、無いでしょ? dieを使うの? dieはエラー終了ではありません。正常終了です。それを「例外として使ってます」ってだけです。
故に「evalで例外処理のエミュレーションが出来る」というなら判る。がそれは何処まで行っても「例外処理」とは言いません。まあ頑張りたいならもちろん個人の自由なので止める理由はありませんが、例外が必要な案件でそもそもperlを使うのが間違ってます。というのが筆者の見解。ちなみにJavaは別の理由で反対です。 
ちなみに「evalで例外処理」を正しく実装しているのは、筆者の知る限りtclだけです。筆者はtclの言語仕様を美しいと思っています。
言語本体に手を入れずにMooseとか、
エミュレーション手段が出てきたのはperl自体の底力を感じさせるものですが、

この辺り、perl6ではどうなんだろうと思っていたのですが
筆者は知らなかったんですが、perl6|rakudoは例外を実装したらしい。
だたし、「その他」の切り口が、気持ち悪いものが多いので、
業務とかに使うかどうか、というと正直判らないですね。って言うか使わない。

perl族は、短い記述をめざしている感がありますが、
その手段として記号を使ったり、暗黙の挙動を盛り込んだりと、
かなり慣れが必要。逆に機構は複雑になってると思います。
こんな問題が出てくるくらいだから。
http://d.hatena.ne.jp/gfx/20110301/1298944990
昔からどうやらperlとrubyは、世の中のgeekな方々に人気っぽいのですが、perl6の事をどう思っているのだろうか?と思ったら、弾氏は、特になんとも思ってなさそうですね。http://blog.livedoor.jp/dankogai/archives/51493739.html
筆者はgeekでは無かったんですかそうですか。