Google発の新言語、Noopとは

Noop とは

Google の技術者である Alex氏と Christian氏が中心となり開発されている新しい言語です。プロジェクトは Google code でホストされています。
http://code.google.com/p/noop/

開発がアナウンスされた直後にも関わらず結構話題になっているのは、さすが Google のブランド力といったところです。Google code のプロジェクトページでは以下のように紹介されています。

Noop とは?

Noop('noh-awp'と発音)は新旧の言語の経験から得た教訓を取り込む新しい言語です。良い習慣とされているコーディングを促し、悪い習慣を防ぎます。Noop は Java 仮想マシン上で動作することを最初の目的とします。

Noop の現状は?

現在は設計・開発の初期段階にあり、Noop のコードで何か面白いことを行うことはまだできません。

なぜ新しい言語なの?

我々の経験では、開発者はしばしばテストが困難なコードやメンテナンスに問題のあるコードを意図せず作成してしまいます。これは、大きな開発プロジェクトにおいて、チーム全体の問題となります。この問題を分析すると、根本原因の多くは言語機能によるものが大きいことが分かりました。例えば、グローバル変数の使用や不正なサブクラス化、そして安易に不正利用されるAPIなど。Noop ではこれらの問題を防ごうとしています。

Noop の支援は?

Noop は同志の開発者と寄付によるサイドプロジェクトです。我々は Google に限らず数社の企業に所属するメンバで構成されています。

Noop は独断的です

Noop の開発者は、ソフトウェア開発におけるグッドプラクティス・バットプラクティスについて強く意識しています。そのため Noop では、グッドプラクティスを支援し、バットプラクティスを阻止することになるでしょう。例えば、Noop では以下を Yes とします。

  • 依存性注入の言語レベルでの組み込み
  • テスト容易性-すべてのクラス間のseam(縫い目,合わせ目)
  • 不変性
  • 可読性の高い言語構文
  • 決して陳腐化しない実行可能なドキュメンテーション
  • プロパティ、強い型付け、実用的な近代的標準ライブラリ

逆に、Noop では以下を No とします。

  • どんなスタティックでも
  • 継承による実装
  • プリミティブ型
  • 不必要なお決まりコード
なぜ Noop か?

依存性注入(DI)はソフトウェアの書き方を変えました。Spring は思慮深いエンタープライズ分野において EJB に追いついていると言えます。そして、GuicePicoContainer は多くのアプリケーションの重要な構成要素となっています。
ユニットテストに代表される自動化テストもまた、ソフトウェアの構築、ソフトウェアの生涯における保守と変更において、信頼性を確保する重要な要素です。どんなソフトウェアでもいくらかのテストが書かれるべきですが、より良いのはテスト駆動による開発と高いカバレッジを実現することです。
Noop は Java 仮想マシンで動作する新しい言語で、見た目は Java のコードと似ています。依存性注入とテスト容易性は、他の言語でそうであるように、サードパーティーによるライブラリで実現されるのではなく、始めから言語組み込みます。
不変性と最小限の変数スコープは、デフォルトの振る舞いを final/const とすることで推奨し、関数スタイルでの簡単なアクセスを可能とします。テスト容易性は、言語レベルのDIと、コンパクトなコンストラクタインジェクションの構文で推奨します。
Noopソースファイルの3つの使い方が提案されています。

  • Javaコードへの変換:Javaソースを生成します。コードベースの変更なしにNoopを利用できますが、言語の動的な特徴は提供されません。
  • インタプリタインタプリタを通してNoopコードを読み込み、評価します。低速ですが、コマンドラインインターフェースを持ちます。
  • コンパイル:Javaバイトコードへ直接変換します。

現在の状況

プロジェクトのWikiにてプロポーザルが検討されている状態です。
http://code.google.com/p/noop/w/list

言語仕様の大枠は、以下で確認できます。
http://code.google.com/p/noop/wiki/Features