半年前に Meta-Programming System (MPS) version 1.0 が JetBrainsからリリースされた。この続報として、 バージョン 1.1へのアップグレード が12月にあった。 InfoQは、 Apache 2.0 のライセンスの元で、オープンソース製品として提供されている language workbench の現状を確認した(例外的にオープンソースでないのは、 IntelliJ IDEA から抜き出されたJetBrains IDEフレームワークである)。
MPSには、すでにたくさんの構成ブロックがあり、以下のようなツールを使い始めることができる:
- ベース言語(Java言語を基にしている)は、既に拡張され( クロージャ、コレクション、dates、regexp が使える)そして、更にカスタマイズできる
- 特定のパーツで言語をモジュール化し、組み立てることができる
- バージョンコントロールとの統合( subversion, gitそして IDEAによってサポートされているVCS )
- 内部のMPSモデル(例えば、外部のソースからコンテントをインポートする)とやりとりできる API
- 更に タイプシステム の定義を増やすことができる
- 作成された言語上で、データフロー解析を行えるツール
MPSの実際の状況をよく理解するために、 InfoQは、 Markus Völter 氏に彼の最近の経験について聞いた。氏は、 Software Engineering Radio Episode on MPS を公表し、最近JetBrainsの Konstantin Solomatov 氏といっしょに、製品化が近い language workbenchとしてMPSを評価していた:
簡単に言語をモジュール化し、拡張し、組み立てることができます。1つのDSLでは、普通、充分でありません。言語セットを(参照によってそして構文的に)組み合わせることができなければなりません。MPSだとこれがシームレスにできます。
氏は、MPSで開発する際の生産性の側面についても話した:
MPSは、非常にうまく統合されています。言語構造やシンタクスをサポートしているだけでなく、タイプシステム、早い修正、ランタイムのサポートそして(モデル) 変形 も提供しています。
MPSの評価と lock
ステートメントを使って ベース言語を拡張し 、それから Javaコードを生成する 例を見せるようなスクリーンキャストを提供するのに加えて、氏は、ツール内で新しい言語を作成している最中でもある:
私は、現在Cをベースにした組込みソフトウェア開発用の言語モジュールセットを開発中です。この拡張には、ステートマシン、コンポーネント、フィーチャの可変性そして安全なコードが含まれています。 Lego Mindstorm ロボット で OSek ベースの実演ソフトを開発中です。
現在のMPSバージョン1.1にはいくつもの 改善が含まれている:
- パフォーマンスとメモリ消費が最適化された
- ジェネレータによって付加されたデバッグ情報により、より簡単にエラーのトレースとスタックトレースの分析ができる
- 他のIDEのように多重実行のプロファイルを保存でき、使うことができる
- 自動生成ワークフローを走らせる antタスク (Antスクリプト)が提供されているので、連続統合環境で使うことができる
MPSを始める
tree editor に慣れるにはちょっと時間がかかる( JetBrainsによると1,2週間)。MPSの 既存の構造化要素 を理解することは、特に重要だ、何が、どこで、なぜ定義できるのかを知らなければならないからである。終了やエラーメッセージそして意志は大いに助けとなるが、いかにシンタクス ツリーが言語の異なった側面のために、構造化されているかを理解することは、非常に重要である。
パーサーのドメイン、 シンタクス ツリー、文法、言語定義などに慣れるのは、確かにMPSの概念をよりよく理解するのに助けとなる。
オンラインの calculator-building tutorial が、唯一、何ができるか、そしてどのように作り上げるかの横断的な理解を提供してくれる。 Markus Völter 氏によるスクリーンキャストは、言語拡張のもっと包括的な 例である。MPSで開発する人は、皆、非常に貴重な情報がある ユーザガイド と ディスカッション・フォーラム を読むべきである。 Jens Nerche 氏は、いかに異なった概念がMPSで達成できるかを研究するために、MPSによるサンプルプロジェクトを集めて githubに提供している。
現在の開発
Jetbrainsは、MPSを使って、それ自身の Issue Tracker (YouTrack) を作った、そしてMPSを使ってもっとアプリケーション作るようだ。ソフトウェア開発コミュニティにProjectional (投影的)ツリーエディタをもった最初のIDEがもしリリースされたら面白い。
現在開発されている、デバッグ機能により、あらゆる抽象レベルで、定義された言語から、今走っている生成されたコードにおいて、コードのステップ動作ができるようになる。このことが可能になる のは、提供されるデバッグ機能と言語生成プロセスとともに、生成されたバックトラック情報によってである。
JetBrainsは、また、定義されたシンタクスツリーのカスタムな永続化マネージャをサポートする計画である。ノードをXMLや提供されるVCSに保存するのは、1つのオプションにすぎない。カスタマイズできる永続化が、次のバージョンのいずれかで計画されている。その後に、ASTをカスタムなフォーマット(テキストとしてさえ)にして、例えば、グラフデータベース( neo4j のような)に保存することもできるようになる。