«前の日記(2005年01月12日) 最新 次の日記(2005年01月14日)» 編集

Matzにっき


2005年01月13日 [長年日記]

_ [言語]私はなぜXMLを愛していないか 〜 言語屋の視点から

これまでのあらすじ(笑)

XMLは「Javaアプリケーションのスクリプト言語」としての地位を、知らぬ間に獲得しているようだ。 今やXMLは広く受け入れられている。 しかし、私にはXMLは「濫用」されているように思われる。

正直なところ、今さらあれこれ言ってもしかたがないとは自分でも思っているのだが、 やはり技術が不適切に利用されているように思える局面を見ると口出ししてしまうのだ。

しかし、さすがの私もXMLが全面的によくないと思っているわけではない。 元々の目的、つまりマークアップ言語としては十分な機能と仕様を持っていると思うし、 そういう目的に利用されているのを見て、どうこう言おうとは思わない。 自分ではきっと使わないだろうけど、それは別の話。

しかし、データ表現の手段としてのXMLには、いくつか欠点がある。 人によっては「どうでも良い」と思うだろうし、実際、そう思えるからこそXMLが選択されているのだろうが。

その欠点とは、まず第一に「冗長なこと」である。

以前のエントリへのTさんのコメントには

私はXMLの冗長なところがいいのかな、と。冗長だから人間が誤るのを訂正してくれるわけです。

とあったが、私は全く同意しない。

ある人間が入力したXMLファイルに間違いがある。それは少しも珍しいことではない。 人間は誤るものだ。で、その誤りを検出する方法は、結局は以下のいずれかではないだろうか。

  • インデントのずれ
  • XMLパーザでwell-formedでないことが検出される
  • XMLバリデータで正当でないことが検出される

さて、重要なのはこのいずれもがXMLの冗長性、つまりSGML風の<xml>〜</xml>的タグに依存しないということである。ということは、このタグによる冗長性は単に無駄ということではないだろうか。 あのタグに利点があるとしたら、私に思いつくのは「テキストに埋没しない」ことだけであり、 つまりマークアップとして使う時にしか意味がない。

Paul Grahamを引用するならば「簡潔さは力」である。ということは、「冗長性は悪」である。 こと言語に関する限り。よって、XMLは優れた言語ではありえない。

「人間は書かない」、「人間は読まない」から、という反論を見たことがあるような気がするが、 「人間は書かない」、「人間は読まない」データならば別にXMLである必要はない。 ただ、現状ではライブラリが揃っているので安易な選択であることは認める。

もうひとつ、私には欠点に思える点は、XMLは型のない言語である点である。

古代には言語はタイプレスであった。アセンブラには整数しかない(最近のは浮動小数点数もあるけど)。 その数が、単なる整数なのか、アドレスなのか、あるいは文字を表現しているのかは、 コンテキストあるいはその数を処理するプログラムによって決まったものだ。

しかし、それは人間にとっては都合が悪いので、計算モデルとして型が導入された。 BCPLは「型なし」であったが、Cでは型が導入された、というように。

スクリプト言語の世界では、長らく型(と人間性)が軽視されてきたので、Awk(数と文字列に区別がない)、 Perl(静的型(スカラーとアレイとハッシュは静的に区別される)と型なし(スカラーには型の区別がない)のハイブリット)やTcl(根源的には全て文字列)のような「型なし言語」が生き残っていたが、それらすら、オブジェクト指向の導入などでなんらかの「型」を取り込んでいる。

このようにプログラミング言語の世界では、長い長い時間をかけて苦労して「型なし」を追放してきたのに、 ここでいきなりXMLが「型なし」を復活させてくれているのだ。なんてこった。 XMLはスキーマなしでは、どの属性が数値なのか、どのデータが文字列なのか区別することはできない。 できるのは「ノード」と「テキスト(文字列)」の区別だけだ。

もちろん、XML SchemaやらRELAXやらを導入すれば型の表現はできる。 しかし、「スキーマなしで操作できる」のがXMLの良さではなかったのか。 DOMでデータを取り出してきても、その(型の)解釈は個々のプログラムに任せられてしまう。 要するに、アプリケーションのロジックの中に分散して埋没してしまうということだ。

せめて、古典LispのS式程度(ノード、整数、浮動小数点数、文字列、シンボル)程度の型が、 スキーマなしで表現できれば、こんなことにはならなかったのに。これを濫用といわずして何を。

_ [Ruby]Looking for Japanese allies

Sick (YAML for Ruby) の開発者としても知られるwhy the lucky stiffからメールが来た。

全文を引用する。

Hi, matz.

I recently started a Ruby blog which is growing quickly. Lots going on, lots to talk about. However, I'd really like to find a fresh voice from Japan to join in. I think many of us outside of Japan are dying to hear more about what is happening there. And I'm sure many Japanese Rubyists are struggling to get their work translated.

Since you are immersed in the Ruby scene, I'm wondering if you know anyone there who would like to blog in English. I'm looking for someone who can uncover neat software, translate important information from your blog, and perhaps even help us to understand some of the Japanese tech culture.

I think it could be a great opportunity for a Japanese blogger to be heard by an international audience and to make friends outside of Japan.

Thankyou so much, matz. My warmest good luck to you.

_why

要するに、

  • 最近、Rubyについて扱うRedHandedという Ruby関連のBlogを始めた。
  • 我々、日本の外のRubyistは日本の情報を知りたくてしかたがない。
  • だれか英語でわれわれのBlogを一緒に書いてくれる人を紹介してくれないか。
  • その人には、ナイスなソフトウェアの紹介や、Matzにっきなどからの情報の転送、 それから日本のtech cultureについても教えてほしい
  • それって日本のBlog人にとっても、海外にコネクションを作る良い機会だと思うよ

ということだ。だれか、挑戦する人はいないだろうか? そんなにいっぱい書く必要もなければ、完璧な英語を使う必要もないと思う。 少々の勇気とちょっとの時間でけっこうなことがなしとげられそうに思うのだが。

いかがでしょう。希望者は私にメールするか、ツッコミで連絡を。


«前の日記(2005年01月12日) 最新 次の日記(2005年01月14日)» 編集