Sun Microsystemsで開催中の「JVM Language Summit」において、Googleの技術者Alex Eagle氏とJeremie Lenfant-Engelman氏が、Java仮想マシンで動作する新しいプログラミング言語「Noop」を発表した。旧、新の開発言語からの経験を教訓に、読みやすく、そしてメンテナンスしやすい言語を実現する。「2人以上のチーム向けの言語」だという。
Noopは"noh-awp"と発音する。機械命令のNOP(No Operation)に近い。Eagle氏らGoogle技術者を中心に、開発者同志が集まってNoopプロジェクトはスタートした。現在Google Code上でホストされている。
同プロジェクトのミッションを語る上でEagle氏らは、Michael Feathers氏の「Working Effectively With Legacy Code (レガシーコード改善ガイド)」の内容を引用した。同著でFeathers氏は、"テストのないコード"をすべてレガシーコードと定義し、その上で、コードを理解し、テストで保護するための手法をまとめている。Noopが目指すところも同じだ。たとえ、きれいな設計やコードであっても、手が加えられるに従って次第に分かりづらくなり、そして壊れていく。テストを用意し、元のきれいな設計やコードを維持しながら、プログラムを変更できる環境が望ましい。こうした特徴を言語レベルで備えるべきであるという考えがNoopプロジェクトの背景だ。
たとえばFeathers氏は、ユニット・テスティングを実現する上で、接合部を利用してSeamという、元のコードを編集することなくプログラムのふるまいを変える場所が重要になるとしている。Eagle氏らによると、Seamがないケースは言語機能に由来する。Noopでは、すべてのクラスのペアの間にSeamが設けられる。またプログラムの実行までコンポーネント同士が依存関係を持たないようにするDependency Injection (DI: 依存性の注入)が組み込まれている。
ほかにも、コードは書かれる以上に読まれるものという観点から"読みやすさ"を重視。プロジェクト・ページでは、不変性、実行可能なドキュメンテーション、プロパティ、実用的でモダンな標準ライブラリなどの特徴が挙げられている。
NoopはApache License 2.0の下で公開される。Noopのソースファイルの利用方法として、Javaソースを生成するJavaトランスレータ、インタープリタ、Javaバイトコードへのコンパイラの3つが検討されている。