2004年02月25日
川俣晶の縁側ソフトウェア技術雑記total 5950 count

まるでC#!? Javaのビックリドッキリ言語仕様拡張?

Written By: 川俣 晶連絡先

 公私ともに用事に詰まった地獄の2月の副産物は、後回しにされた不要不急の物々の堆積です。それも徐々に崩していかないと日常に復帰できません。

 と言うわけで、机の上の堆積の山の一番上にあったJava World誌の4月号をざっと見始めたのですが。(じっくり読む暇は無いけれど、一応は目を通しておきたい)

 最初からJava2 SDK 1.5プレビューというなかなかショッキングな記事が目に飛び込みました。

 何がショッキングかというと、これまで頑なに大幅な言語仕様の拡張を拒んできたJavaが、あっさりといくつもの言語仕様拡張を行うという話だったからです。しかも、拡張の内容は、まるでC#で見たような機能ばかり。

 以下は、この記事を軽く斜め読みした感想文であって、正しい技術解説や論評ではないことをお断りしておきます。実際に、正しく理解して書いている保証は何もなく、その上、言語仕様の正しさは、実際に使い込んでみないと分からないものです。ここでコンテンツで私が疑問を呈したからといって、それが本当に問題であるかどうかは分かりません。

Generics §

 C#では次バージョンで実装となるものですね。しかし、これが本当に実装することが良いかどうかは正直なところ分かりません。むしろ、この機能は要らない、と力強く断言することも、一種のプログラム言語に対する1つのあるべき態度ではないかと思います。

 そういう意味で、C#に追加されることがどの程度良いことか、慎重に見たいと思っていましたが、(正しいか誤っているかは別として)もっと理想主義的であるはずのJavaがサポートしようというのは驚きです。

 もちろん、この機能が欲しい気持ちは理解できます。

 しかし、欲しいものを何でも取り込んだら、プログラム言語は破綻します。入れるものと入れないものの線をどこで引くかが、プログラム言語設計の最も微妙かつ面白いところです。

Typesafe Enum §

 C#の列挙型よりも、もっと強力になろうとしているように見えます。C#の列挙型では記述できないような、メソッドを記述できたりします。少々過剰に強力すぎるような感じがしないでもありません。またC#の列挙型が結局はSystem.Enumクラスを継承した一種のクラスでしかないのに、Typesafe Enumはクラスとは別に新しい型を導入しようとしているようにも見えます。このあたりは、不必要に言語仕様を肥大化させているような印象を受けなくもありません。

 ただ、switch文で使った場合に、case部に型名を入れない値を記述できるのはちょっと良さそうに見えます。(case color.Red:ではなく、case Redと書ける)

Autoboxing/Auto-unboxing §

 ボックス化/ボックス化解除に相当するものですね。ラッパクラスを使えば良いのだから、こんな変なものは要らない、とJavaサイドの人達が言っていた機能そのものがJavaに入ってしまって、みんな納得しているのでしょうか?

 しかし、この機能が入っても、相変わらずプリミティブ型の変数のラッパクラスのメソッドは呼び出せないそうで、そのあたりの操作が直交していない「いけてなさ」は相変わらず残るようです。従来のJavaの仕様なら、その「いけてなさ」も、1つのストイックなダンディズムとして味わうことが出来ましたが、中途半端に出来ることが増えると味わいようが無くなっていく感じですね。

拡張for文 §

 C#のforeachに対応するものです。これで列挙がやりやすくなるのは、単純に進歩でしょう。しかし、こんなシンタックスシュガーみたいなものを入れるのは、Javaのシンプルさに対する魅力を削ぐことになるような気がします。

Static import §

 従来Math.sinと書いていたものをsinと書けるようにしたりする機能のようです。これを見て連想するのは、C#というよりは、Visual Basic .NETです。C#どころか、Visual Basic .NET的な機能も取り込んでいくのは、ストイックというよりは、無節操な感じを受けます。

可変長引数 §

 これまで使えなかった可変長引数が使えるようになるようです。Cのprintf関数のようなものを記述する場合には必須だったはずで、これまで無かったことの方が不思議な感じもします。しかし、こういう機能はとかく実装が複雑化したりするので、スパッと無いものとして扱うのも、男らしい態度です。Javaはもうスパッとできなくなってきたのでしょうか。

Metadata §

 C#でいう属性に対応するものです。しかし、C#なら[……]と書くところを、@……と書くあたりが、イマイチ見た目が綺麗ではないですね。それから、C#なら属性はSystem.Attributeクラスを継承したクラスとして実現しますが、Javaでは新しい@interfaceという型として記述するようです。これも不必要に言語仕様が膨らんでいるような感じを受けなくもないです。

驚くほどC#に寛容な言葉 §

 かつて、とげとげしくC#を「Javaの猿まね」とこき下ろしてきたJavaサイドの言論の論調と比較して、この記事の締めくくりは驚くほどC#に寛容に見えます。

 以下にそれを引用します。

なお、人によっては、今回の機能拡張を「C#に追従しているだけ」と見る向きもあるかもしれない。だが、C#自体、もともとJavaを参考にして作られたという経緯がある。両者は、今後も互いに影響を及ぼし合いなら進化していくのだろう。

 こういう寛容な言葉は、少し前にRelaxerの浅海さんからも聞いています。

 とても不思議なことですね。

 しかし、この寛容さには腹が立ちます。もちろん、これがJavaサイドからは最大限の譲歩であることは分かります。しかし、C#とJavaが同列で論じられる姉妹言語であるかのような態度というのは、実はC#を本来の立ち位置からJavaの土俵に落とし込む行為に他なりません。それはC#に泥塗る行為でしかありません。

 逆の言い方をすれば、これだけC#的な機能を大量に入れても、C#の本質的な存在位置に、Javaは全く近づけていないと思います。そして、JavaはJava本来の存在位置から離れることによって、逆により不安定な立場に落ち込もうとしているようにも見えます。

 Javaに足りないものは、こんなC#モドキの機能ではなかったはずだと思います。しかし、それを補うよりも、表面的にC#に負けているかのように(素人目に)見えてしまう機能を補って誤魔化しただけ、という感じがしました。とりあえず、こんなやり方が続くのであれば、Javaが自滅の道を辿るという可能性もありそうな気がしてきました。C#に負けるのではなく、自滅するということです。

 (実はC#にも自滅に匂いを感じつつあって、それも問題と言えば問題なのですが、それは別に機会に)

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2004年
03月
01日
C#からOutlookを制御して電子メールを送信させる
3days 0 count
total 16102 count
【技術雑記】の前のコンテンツ
2004年
02月
13日
静的ウェブページでのTrackBack受信
3days 0 count
total 3565 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20040225162142
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.