Nitraの紹介
ちょうど一年前、JetBrainsより数名がNemerle(関数、オブジェクト指向のハイブリッドの.Net向け言語)プロジェクトに参加しました。彼らはここ一年Nitraと呼ばれる新しい技術に注力してきました。
なぜNitraなのか
Nitraについて説明する前に触れておきたいのが、なぜ我々がこのプロジェクトに投資してきたのかということです。
JetBrainsでは様々な言語やフレームワーク向けのツールを開発しています。十数の言語や100近くに上るフレームワークをサポートしています。新しい言語が登場する度に我々はその言語や文法を学び、パーサーを開発してコードの解析やリファクタリングを可能にしています。
技術の進歩が非常に早く、またJetBrainsに対する期待も日々高まっている中この作業は簡単なものではありません。こういった問題に対処する中で生まれたのがNitraです。
Nitraとは何か
まず以下のコードをご覧ください
これが何かわかるでしょうか?これは実行可能な仕様を定義するフレームワークであるCucumberで使われるGherkin用のシンタックスモジュールです。
このシンタックスモジュールはNitraを使って定義されています。これをプロジェクトに追加し、Nitraに内蔵されているパーサーと組み合わせるとCucumberファイルをパースし、AST(Abstract Syntax Tree:抽象構文木)を取得することができます。つまり単に文法を定義するだけでパーサーが得られることになります。
そして重要なのは…
これは単なる「新しいパーサジェネレータ」ではない
Nitraは単に新しいパーサジェネレータではありません。Nitraを個性付ける様々な協力な機能があります。
Nitraは拡張可能
Nitraは既存の文法を静的にも動的にも拡張することができます。注目して欲しいのは、新しい言語を定義するだけでなく既存の言語を拡張することも出来ると言うことです。例えば以下の例はC#に新しいオペレータ .? を追加したものです。
Nitraはツール開発を爆速にする
Nitraは新しい言語を開発したり、既存言語を拡張したりできるだけではありません。言語の周辺ツールの開発も容易にします。シンタックスモジュールを定義することでシンタックスハイライト、コードの折りたたみ、静的解析、リファクタリング、ナビゲーション、シンボルの検索などJetBrainsのIDEが既に持っている強力な機能を活用できるようになります。
一般ユーザーにとって何がうれしいの?
NitraによりJetBrainsは新しい言語やフレームワークのサポートが容易になりました。
新しい言語が登場するたびにスクラッチでパーサーやツールサポートを開発する必要がなくなり、シンタックスモジュールを定義するという最小限の手間で良くなりました。
つまり究極的にはJetBrainsのIDEユーザーによりよい開発体験をもたらすことになります。
さらにNitraにより皆様はパーサーや言語実装のエキスパートでなくても独自のDSLを開発することが出来るようになり、同時にエラーチェックやシンタックスハイライトといったIDEの機能を活用することができます。
今後は?
Nitraはここ一年かけて基本的な開発をしてきました。もう少しやり残したことがありますが状況をお伝えできるところまではたどり着きました。もうしばらくすればより詳しい情報をお届けできるようになる見込みです。今後のアップデートに興味がある方は是非Nitra Twitterアカウントをフォローしてください。