InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

Project Coinによる2つ目の候補リストの発表

作者 Charles Humble , 翻訳者 南 伸二 投稿日 2009年6月28日

セクション
デベロップメント,
設計/アーキテクチャ
トピック
Java ,
プログラミング
タグ
Java SE

原文(投稿日:2009/6/17)へのリンク

Project Coinは、Java 7に対して小さな言語の変更を取り込むことで、開発者の日々のコーディング作業をシンプルにすることを目的としたプロジェクトである。以前InfoQの記事において、プロジェクトが作成した最初の"さらに考慮するための"カットについて見た。その提案は、switch文における文字列サポート、例外処理の改善、自動リソース管理、ジェネリック・インスタンス生成のための型推論の改善、Elvisおよびその他のnull安全な演算子、可変引数メソッド呼び出しの簡素化、で構成されている。それ以降、さらに5つの提案がリストに追加されている。

1. 整数定数をよりよくするための提案の組み合わせ。これは3つの別々の提案を組み合わせたものである。Bruce Chapman氏によって提起されたByte整数定数とShort整数定数の接尾辞は4個の新しい接尾辞、byteに対しては'y'および'Y'を、shortに対しては's'および'S'を導入することでbyte整数定数とshort整数定数のサポートを付け加えるものである。バイナリ定数はDerek Foster氏による1組の提案のうちの1つであり、数値定数を特定する形式としてすでに存在する"1"(10進数)、"01"(8進数)、"0x1"(16進数)に、新しい形式"0b1"(2進数)を付け加えるものである。Foster氏はさらに数値における下線のサポートも提案している。それにより、長い数字の列が分割され、可読性が改善される - 例えば、long creditCardNumber = 1234_5678_9012_3456L; のように。

2. JSR 292に対する言語サポートwiki)。John Rose氏によるこの提案は、JSR 292に由来する新しいJVM機能を利用するためのソースコードの文法を新たにつくるものである。その文法とは、invokeDynamic命令、メソッドハンドルの呼び出し、特定の変換の緩和、エキゾチック識別子、の4つである。この変更により、JavaがinvokeDynamic命令に依存している新しいJVM言語と相互に操作することができるようになるだろう。さらに、これによりjavacやJVMを新しいプログラミング言語や言語ランタイムを開発するためのプラットフォームとして利用する時に、バイトコード操作技術に頼る機会が減る。こういったものがあることで、Java言語上でのDSLの開発に目を向けている開発者にさらなる刺激を与えることに役立つはずである。

3. リストとマップに対するインデックスアクセス。Shams Mahmood Imam氏の提案は、Array、List、Mapの要素へのアクセスに対する一貫した文法を提供することを目的としており、それを使えば、次のように書くことができるようになる。
myList.get(0)の代わりにmyList[0]、そして、
myMap.get("key")の代わりにmyMap["key"]

4. コレクション定数。これはリストとマップに対するインデックスアクセスとあわせて採用されることを意図したものであり、また、2つ目のImam氏からの提案と同様のものであるが、Josh Bloch氏は、不変なリスト、セット、マップ定数に対して配列初期化子と同様の文法のサポートを追加することを提案している。例を仕様から引用する。

"以下は、不変なmapを生成するために現在書いているコード片である。

final Map<Integer, String> platonicSolids;
static {
solids = new LinkedHashMap<Map<Integer, String>;
solids.put(4, "tetrahedron");
solids.put(6, "cube");
solids.put(8, "octahedron");
solids.put(12, "dodecahedron");
solids.put(20, "icosahedron");
platonicSolids = Collections.immutableMap(solids);
}

以下は、map定数を利用するとどのようになるかを示したものである。

final Map<Integer, String> platonicSolids = { 4 : "tetrahedron",
6 : "cube", 8 : "octahedron", 12 : "dodecahedron", 20 : "icosahedron" };"

Bloch氏の提案はImam氏のものとは異なり、不変なコレクションのみを生成し、より簡潔で、小さなコレクションに対する最適化のためのコンパイラの作業を容易にするはずである。トレードオフとしては、実装の型を指定できないこと、そして本質的に柔軟性を欠くということがある。

5. 大きな配列(改訂版)。配列は現状int型のインデックスを持つが、開発者はその限界に到達しはじめている。James Lowden氏の提案は、32ビットint型に代わり、long型を配列のインデックスとして利用することを可能にするものである。2つの違った形も検討されている - 言語レベルの変更は、理想的かもしれないが、幾分影響が大きすぎて、それゆえにProject Coinの範疇を超えているかもしれない。ライブラリベースの変更は一時的な解決策として機能し、また、JVMレベルの変更を、もし言語に対して追加することができるようになればそのときに、利用することができるであろう。

Project Coinは計70ほどの提案を受け、そこからこの11の採用候補が載ったリストをつくった。この中から、5つか6つが、Java 7に取り込まれることが期待でき、マイルストーン6リリースで利用可能になるはずである。いったん最終カットがつくられたら、言語への変更を正式に承認するためのJSRが提出されるであろう。

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。