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

ラクダ黙示録その5 91

ストーリー by Oliver
玉座に座るのは 部門より

Perlの作者Larry Wallが書いてるApocalypse(黙示録)シリーズはPerl6へむけての構想をまとめたものだ。Apocalypse 5では正規表現を扱い、僕らの知る正規表現感を盛大に「破壊」し、興味深い事になっている。Perl6がどんどん楽しみになってきた。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by mad-p (1491) on 2002年06月06日 17時09分 (#103712)
    まず、従来の正規表現の機能を持ったまま、
    記法をすっきりさせたという印象があります。

    その上で、parserとして機能できるように、
    クロージャーの記述や、文法ルールのクラス化、
    バックトラック制御などを追加しています。

    細かい例外ルールがたくさん書いてあって読みにくいのですが、
    それらの例外は、よく使うものを短く書くために使うものです。
    使わなければ知らなくてもすむもの。
    今まで書いていた正規表現は、よりわかりやすくなると思います。

    「<」と「>」がメタ文字に取られてしまったので、HTMLやXMLに対して
    正規表現マッチを行うときはちょっとめんどくさいかもしれません。

    逆に心配な点。Perlのクロージャーを入れ込むことが
    非常に簡単になるので、ちょっと気を抜くとPerlでしか使えない
    式になってしまいそう。

    そうそう、いざとなればいつでもPerl5の記法にfallbackできます。
    m:p5/旧形式の正規表現/と書けばよい。
    • by junya (192) on 2002年06月06日 17時15分 (#103717)
      参考になります。
      が、

      そうそう、いざとなればいつでもPerl5の記法にfallbackできます。
      m:p5/旧形式の正規表現/と書けばよい。

      ここが一番 Perl らしいという罠。
      親コメント
    • うーん、lex と yacc で分解されてるように、
      正規表現とその上の…例えば BNF みたいなもので
      分割するというのはなかったんかな。
      正規表現にいろいろ盛り込みすぎなのが心配。

      # perl の文法自体が、単純にトークンに分割できないような言語だからか?
      --
      # mishimaは本田透先生を熱烈に応援しています
      親コメント
  • 現在の LC_CTYPE ロケールによって指定されるエンコーディングで 動作してくれたらいいな。(過去との互換性のために、「ロケールモード」 というのを作るのがいいかな)。いったん Perl でソフトウェアを書けば、 ISO-8859-* でも EUC-* でも KOI8-* でも UTF-8 でも、ロケールに応じて、 ソフトウェアの変更なしに動いてくれたらいいな。

    「8 ビットエンコーディング (結合文字や RTL はサポートする意思なし) または UTF-8、従来のマルチバイトエンコーディングは無視」みたいな 「国際化」が多くてげんなりしてるので。

    (というか、現実はもっとひどくて、「国際化」とは翻訳のことだと 思っている人が多いみたい)

    • by Anonymous Coward on 2002年06月06日 23時52分 (#103921)
      エンコーディングの知識のない人でも、 ロケールを切り替えただけで どんな場合でも動くようなスクリプトが書ける、 そんな魔法のようなスクリプト言語を設計することは さすがに無謀じゃないかと。

      少なくとも、

      • 入力エンコーディング
      • 出力エンコーディング
      • スクリプト自体のエンコーディング
      • Cなどによる拡張ライブラリへ引き渡すためのエンコーディング
      なんかがあるため、スイッチが一つだけでは不十分ですし。

      「8 ビットエンコーディング (結合文字や RTL はサポートする意思なし) または UTF-8、従来のマルチバイトエンコーディングは無視」みたいな「国際化」が多くてげんなりしてるので。

      スクリプト言語界(?)はそうでもないですよ。Rubyはもちろん、 Pythonだって(Unicode中心とは言え)スクリプトの自身の エンコーディングを明記することで、ISO-8859-xや EUC-JPのスクリプトを認識し、(おそらく一旦Unicodeに 変換してから)動かすような仕組みも考えられています。

      #Perl6ではどうなるんでしたっけ?

      スクリプト言語は「ちゃちゃっと書いてさくっと実行」というのが 身上なので、「従来のマルチバイトエンコーディング」でも がんがん書けないと意味ない、という気持ちはあるかも。

      とはいえ、「文字列の長さ」と「文字列のバイト数」を 区別させることからして、何かと悩ましいわけではありますが……。

      親コメント
      • >スイッチが一つだけでは不十分ですし。

        Perlのメインのひとつ、CGIだと入力エンコーディングがね。
        NN4.いくつかで、Content-TypeのcharsetもMETAもくっつけて、こっち(CGI)から丁寧にエンコードした送信ページを作ってやっても、そこから送られてくるエンコードが(再判定しないと)確定できないの。(ユーザー設定が優先するんだっけな?詳細忘れた)

        そーゆーブラウザがあるだけでもLOCALE一発てのは難しいでしょうね。

        #しかもなぜか固執するファンが多いんだよね、NN4。
        親コメント
      • とりあえず、「ロケールモード」では、基本は「すべての I/O をロケールのエンコーディングで」 というのがいいのではないかと思います。

        その上で、例外を作ればよいかと。 たとえば、スクリプト自身のエンコーディングは、 ワンライナーとかだと、ロケールのエンコーディングに決まってるけど、 システムにインストールしてしまうようなスクリプトだと、 ユーザのロケールに合わせて解釈が変わってしまうのはまずい。 というわけで、自分自身がどんなエンコーディングで書かれているかを 指定する識別子を先頭行 (付近) につけるとか。

        ファイル名も、ロケールから独立したものだから、どうするかが問題です。 (これはけっこう難問で、あちこちで繰り返し議論されているようです)。

        もちろん、ロケールモードで一時的にバイト列を扱いたいとか、 互換モードで一時的にロケール文字列を扱いたいとか、 ということも、できる必要があります。

        親コメント
    • by Anonymous Coward on 2002年06月07日 5時53分 (#104024)
      > (というか、現実はもっとひどくて、「国際化」とは翻訳のことだと 思っている人が多いみたい)

      まだ libc5 が幅をきかせていたころ、「Linux 環境を日本語化する」
      というタイトルの Web ページがあったので、
      「どんなすごいことをしてるのかなわくわく」
      と思って見てみたら、jless と jgroff と kterm その他を
      インストールする方法が書いてあっただけの罠。

      今わりと困るのは、むしろ「国際化すれば地域化が不要だと思ってる手合い」かも。
      親コメント
    • 現実的な問題としては、

      1. LC_CTYPE ロケールだとネットワークでは役に立たない
      2. 文字列リソース一つ一つのエンコーディングをプログラマが管理したくない
      3. 特定のエンコーディングに依存しない汎用文字列ライブラリの作成は困難

      この3点じゃないか?
      1. 2. に関しては、ファイルハンドルなんかの、
      外部に直接繋がってるリソースに対してのみエンコーディングを管理すれば解決できそうだ。
      たしか以前の Apocalypse でファイルハンドルにいろいろ設定できるようなことが書いてあったし。

      内部に入ってくるデータはすべてロケールで指定されたエンコーディングになるから、
      あとはワイド文字列にしちゃう(mbstowcsはロケール依存なので問題なし)、
      でライブラリレベルでは全部 wcs を使えば 3. も解決?

      これだと問題は文字数 != 文字列の長さ、ってあたりでえらく問題が出そうだが…
      そこはプログラマの問題なんだろうな。

      > 「国際化」とは翻訳のことだと思っている人が多いみたい

      そもそも perl って翻訳用カタログすら作れなかったな…
      --
      # mishimaは本田透先生を熱烈に応援しています
      親コメント
      • そもそも perl って翻訳用カタログすら作れなかったな…
        XSベースのLocale::gettextとかPure PerlなLocale::PGetTextなどがありますけど、どれもperlの配布にbundleされていないですね。あった方が嬉しいような。Python 2.2にはPure Pythonなgettextモジュールが含まれているし、たしかTclにもメッセージカタログの仕組みがあったと思います。
        親コメント
    • by ntakahas (6453) on 2002年06月07日 11時55分 (#104129)
      > (というか、現実はもっとひどくて、「国際化」とは翻訳のことだと 思っている人が多いみたい)

      某県立大学の人が、「うちは国際化を目指しているので、入学式も卒業式も全部英語でやっています」と自慢していました。ソフトウェア業界の外で「国際化」って言うと、日本語(現地語)を使わずにすべて英語だけで済ませることを意味するようですね。
      親コメント
  • by Anonymous Coward on 2002年06月06日 23時20分 (#103911)
    30以上レスが付いてるからと見てみれば、ほとんど「罠」の話だったという罠。
    • じゃあ今度は「お前ら、…して下さい」について語ってみよう、と言ってみるテスト。
      親コメント
typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...