MPS へのファストトラック - 習得するための 10 のステップ
Welcome! This tutorial was designed specifically for developers who are completely new to MPS and prefer a guided tour through the MPS landscape. You will walk the beaten path one step at a time, following clear marks that show you where to go next. The information is structured so that you progress from simpler concepts to the more involved ones and at the end of the journey, you'll understand MPS and will be able to use it effectively on your projects.
We admit that there are easier tasks in the world than learning MPS. Language design is a complex domain and projectional editing needs some getting used to. It helps a lot if you have prior experience with DSLs or language workbenches, but it is not necessary for understanding this tutorial. Just expect more bumps on the road. There certainly will be a lot of them - partly also because MPS has its own problems and bugs. So you are in for a tough experience that may take a considerable amount of your time.
これまで多くの人がここを通って成功してきたことを忘れないでください。固執するなら、報われるでしょう - カスタムメイドの DSL を準備し、プロジェクトに統合しそして使って価値の高いソフトウェアを開発することができる言語デザイナーになるでしょう。
いい靴を履いて、しっかりとひもを締めて行きましょう。
ステップ 1 - なぜ MPS
未加工時間の見積もり -15 分
MPS を学ぶための動機から始めましょう。
まず最初に、MPS - なぜ JetBrains MPS(英語) についての 2 分間の概観ビデオをチェックしてください。そうすれば、このツールがあなたのプロジェクトに必要なものを提供しているかどうかを評価することができます。
当社の新しい VoiceMenu デモアプリケーション(英語)は、さまざまな専門分野の出身者に MPS の可能性をすばやく理解させるために作成されました。この短いビデオを参照してください。
学術研究に関心がある場合は、MPS ユーザーが時間をかけて公開した MPS にあるすべての学術出版物のリスト(英語)も確認してください。
ステップ 2 - 手を汚す
推定生時間 -120 分
今すぐ MPS をお試しください ! MPS Web サイトからダウンロードし、用意した実践コースに進んでください。無料のガイド付きオンラインチュートリアルに参加すると、すぐに MPS で遊んだり、コードを書いたり、言語定義ビットを改善したり、すべてがどのように機能するかを確認したりできます。MPS が自分に適しているかどうか、またそれに何を期待できるかを評価できるよう、実際に試してみることに重点が置かれています。理論の説明に費やす時間は最小限に抑えられます。MPS が自分にとって適切なツールであることがわかったら、後からいつでも MPS を深く掘り下げる時間があります。さあ、せっかちな人のための JetBrains MPS(英語) に移動し、MPS を学びましょう。
ステップ 3 - プログラマーの観点からの MPS
未加工時間の見積もり -15 分
Plain reading about MPS will never teach you as much as trying it for real yourself. You might have done this already, but if not, grab MPS from the download site and install it. With MPS installed, you will be able to continue on the ファーストトラック。
エディターを設定する
We are all different. If the default settings that MPS comes with do not fit your habits, you can always change them in the Preferences (macOS, press Ctrl+Alt+S) or Settings (Windows, press Ctrl+Alt+S , or go to the menu File -> Settings). One of the most likely settings to change is the font size in the Editor -> General section:

安全にシートベルトを着用する
Knowing keyboard shortcuts turns good developers into great ones. As you learn MPS you will internalize various key combinations that trigger useful MPS functionalities. There's one key combination that you should remember from the very beginning, though - Ctrl+Z . Once again - Ctrl+Z . It is the 元に戻す action. Whenever you either intentionally or by mistake do something wrong and you want to get back to functional code, turn to Ctrl+Z .
ちょっとした乗車
Since we programmers like trying things, how about taking the MPS editor for a simple test ride first? You may get the first impressions instantly, if you start MPS and open the ロボットカヤ sample project. This project defines an artificial language to command a virtual robot. The robot can move within a rectangular area, drop and collect marks and check the surrounding cells for walls and marks. You write Scripts using the built-in commands as well as new commands that you create on the fly. When you run the script, a simulator written in Java is started to visualize the execution of your program.
プロジェクトを開くには、新しい MPS を起動し、サンプルプロジェクトを開くボタンをクリックして robot_Kaja を選択します。サンプルプロジェクトは、ホーム /MPS サンプルフォルダーにインストールされています。

次のビデオは MPS 入門オンライントレーニング(英語)コースから借りたものです。この説明用スクリーンキャスト(英語)は、MPS の使用を開始できます。見てみな。
If you like the video and if you are serious about learning MPS, you may consider enrolling in the MPS 入門オンライントレーニング (英語) . It will give you thorough guidance through numerous hands-on exercises and you will be able to discuss your progress and questions with a live trainer.
ステップ 4 - 基本を学ぶ
推定生時間 -25 分
Watch this video now: 初めての実行 (英語) . It gives you essential information on how MPS is organised, how it works and how users are supposed to interact with it.
If you are carefully evaluating MPS there must be many questions popping up in your head while watching videos or reading stories about MPS usages. I believe that some of these questions have already been answered in the MPS FAQ ページ . Check it out.
MikhailBarash による MPS の基礎に関する穏やかな紹介記事(英語)を参照してください。記事を読むとすぐにすべての原則を理解できるため、これは現時点で間違いなく時間をかける価値があります。
Stop for a minute now and skim through a short page listing the essential terms like node, Concept, AST in order to better understand the terminology used down the line.
ステップ 5 - 射影編集のヒントとコツ
推定生時間 -25 分
Before you continue, you should probably get to know the most distinctive feature of MPS - the projectional editor. ビデオをチェックする (英語) that explains all the differences between traditional textual editors and the MPS projectional editor and lists the numerous benefits of this approach.
When editing code in MPS you will run into situations when your coding habits interfere with the projectional nature of the MPS editor. I'm actually pretty confident that you have already discovered such surprises during your experiments. Code in MPS is not text, but instead it is a projection of the abstract syntax (AST). This gives several benefits to language designers and, at the same time, makes the editing experience slightly different and more restrictive than in the commonplace text editors. This may or may not be considered an advantage; nevertheless, there is a learning curve to projectional editing. In general, in projectional code you rely more on the assistance of the editor. Code-completion, block selection and intention actions should become your close friends in order to become an efficient projectional coder. There's a good and a bad side to it:
良い - in less than a week of programming in the MPS editor people typically get back to the full coding speed they had before in text-based IDEs
悪い - projectional editing is highly addictive and you may find text-based editors less compelling and less helpful than you thought they were
Since we are now about to get really serious about designing languages and I will need your full commitment to learning MPS, if you are still hesitant about investing more of your time in MPS, you may consider checking out the following materials before proceeding. If you are already convinced, just rush to the next step.
JetBrains MPS is an efficient and reliable development tool that has been adopted by software vendors on both commercial and academic projects. MPS-based DSLs have been adopted in a wide range of domains, such as legislation modelling, electrical engineering, insurance industry, embedded software, medicine systems, bio-informatics and data analysis. The "When MPS" section of the MPS home page lists several of the successful projects and gives a high-level overview of the technology used.
また、少し速度を落として、ミハイルバラシ(英語)を使用して、MPS の優れたドメイン固有の言語に関する物語(英語)で MPS の周囲に素晴らしいものを構築するための独自のアイデアを生み出すこともできます。どういたしまして !
ステップ 6 - 言語設計者の観点からの MPS
未加工時間の見積もり -20 分
Now you must be curious about how the robot sample language has been created. Please open the ロボットカヤ sample again project and play our explanatory screencast showing you round the language definition fundamentals(英語).
繰り返しになりますが、このビデオは MPS 入門オンライントレーニング(英語)コースから借用したもので、JetBrains が提供するこの有料コースを味わうことができます。
ビデオを読みながら、頻繁に一時停止して、サンプルプロジェクトを自分で参照してください。このようにして、典型的な言語構造を理解し、その個々の部分間の関係を確認できます。
この時点で、言語定義はいくつかの側面からなることを理解するべきです。これらのいくつかは必須です、いくつかはオプションです。
構造 - ユーザーモデルで使用できるノードの種類(コンセプトと呼ばれる)を定義します。プログラム(モデル)の各ノードは、その概念を参照します。概念 は、どのプロパティ、子、および参照ノードが持つことができるかを指定します。Concepts は、他の Concepts を拡張し、ConceptInterfaces を実装できます。
制約 - ノード間の関係と、構造で定義されたルールを超えてプロパティに許可される値を制限します。通常、制約は以下を定義します。
参照の対象スコープ (参照が指すことができる許可されたノードのコレクション)
あるノードが別のノードの子 / 親 / 祖先になることができる状況
プロパティの許容値
プロパティアクセサーメソッド (getter と setter)
動作 -OOP ホールドメソッドのクラスと同様に、Concepts は、ノードでポリモーフィックな方法で呼び出すことができるメソッドと静的メソッドを定義できます。したがって、ノードはそのプロパティと関係とともに動作を実行します。
Editor - Instead of defining a parser that would translate code from an editable form (that is, text) into the tree-like structure that a computer could manipulate, MPS offers the concept of projectional editor, which lets the user edit the AST directly. The エディター aspect enables language designers to create a UI for editing their concepts.
アクション -MPS エディターは基礎となる AST を直接操作するため、コピーアンドペーストやノードの別のノードへの置き換えなどの一部の編集アクションは、重要な AST の変更に変換されます。アクションアスペクトは、そのようなカスタマイズされた AST 変換の定義を保持します。
インテンション - すべての最新の IDE は、便利なキーショートカット(MPS の Alt+Enter)で利用可能なアクションを即座にコード操作することで開発者を支援します。言語の作成者は、インテンションの側面で、言語のこのような小さなコード変換を定義できます。
Typesystem - Languages that need to type-check their code need to provide type-system rules. The MPS type-system engine will evaluate the rules on-the-fly, calculate types for nodes and report errors, wherever the calculated type differs from the expectations. So-called checking rules may additionally be defined to verify non-typesystem assertions about the model.
Dataflow - The ability to understand the flow of values and the flow of control through language constructs helps languages report issues such as unreachable code or null ポインタエラーの可能性 . Language designers can leverage the データフロー aspect to define the flow for each concept, which MPS will then use to calculate the dataflow for the whole program.
ジェネレーター -1 つ以上の言語で記述されたモデルは、最終的に、Java などのターゲット汎用言語およびプラットフォームで実行可能なコードに変換されます。その過程で、モデルは徐々に変換され、概念は、最終的なレベルに到達するまで、より低いレベルの抽象化からの概念に繰り返し置き換えられます。概念の翻訳規則とその適切な順序は、生成プログラムアスペクトで定義されています。
TextGen - 生成プログラムが最終的な AST 表現に到達した後のコード生成中に、TextGen フェーズが開始し、モデル内のすべてのノードをそれらのテキスト表現に変換し、結果のテキストソースファイルをディスクに保存します。
ステップ 7 - 図形チュートリアル
所要時間 - 2 時間
図形チュートリアルを使用すると、独自の言語をすばやく作成できます。MPS エントリレベルの図形チュートリアルを確認し、非プログラマーがグラフィカルな形状のシーンを構築できるようにする言語を構築します。


ステップ 8 - 計算機のチュートリアル
所要時間 - 8 時間
MPS の言語設計の詳細を知りたいと思うはずですよね? すべての基本的な情報とある程度のエクスペリエンスを提供したため、入門チュートリアルでは、深く掘り下げてサンプル言語をゼロから構築するのに適した位置にいるはずです。計算機のチュートリアルは、言語作成のプロセスをガイドします。空のプロジェクトから始めて、Java Swing ベースのビジュアルアプリケーションを構築するための言語で終わります。ぜひお試しください。
JavaScript での電卓のチュートリアル
MPS が Java の生成に限定されないことを示すために、計算を保持するための HTML ページと JavaScript プログラムを生成する同様の Calculator サンプルプロジェクト CalculatorJS(英語) を用意しました。GitHub で確認(英語)できます。
ステップ 9 - 依存関係とインポートされた言語の管理
所要時間 - 30 分
すでにお気づきのとおり、MPS を使用すると、モデル間の依存関係を管理したり、言語をインポートしたりできます。これらを理解することが不可欠なので、依存関係を正しく取得するためのユーザーガイドの章を参照してください。依存関係とインポートされた言語の違いと、設定 / 管理する方法を説明します。
ステップ 10 - Garage プロジェクトのチュートリアル
所要時間 - 5 時間
電卓のチュートリアルでは、言語設計の全体的な知識が十分に得られているはずです。今こそ、より徹底的な運動の時です。ガレージプロジェクトでは、相互接続された複数の言語を作成し、再利用可能なプラグインとしてパッケージ化し、言語を積み重ねます。このチュートリアルの複雑さを処理するために、オンライン教育にコグニテラプラットフォームを活用します。無料の MPS 初級コース(英語)に登録します。
質問がありますか?
新しいテクノロジーを学ぶのと同じように、サポートが必要な質問があるかもしれません。心配しないでください。あなたの背中を持っています ! 質問への回答を得るために利用できるいくつかのオプションがあります。
緊急ではない質問については、フォーラム(英語)を使用できます。
コミュニティ Slack チャネル(英語)で質問すると、すぐに回答を得ることができます。常に新参者を喜んでヘルプくれる素晴らしいコミュニティを持っています。
また、コミュニティの経験豊富なメンバーが開催する無料の MPS 営業時間(英語)に参加することもできます。
進行状況を確認する
Congratulations! By completing the above tutorials and exercises you've made a serious dent into the language design world. Your knowledge and command of MPS could now be qualified somewhere above the 上級初心者 stage of the スキル獲得の Dreyfus モデル (英語) . This is definitely a good time to celebrate and perhaps also to let us know(英語) about your success.
はしごを上がる
スキル獲得の Dreyfus モデル(英語)の次のステージは有能です。その段階に達すると、具体的なガイドラインや監督なしで自分で作業できるようになります。しかしこれが起こるためには、MPS に関する様々な問題を解決するためにより多くの時間を費やす必要があります。実装する言語のアイデアがすでにある場合は、先に進んでください。そうでなければ、役に立つ小さな言語を考え出すようにしてください。1 つ以上の MPS サンプルを再実装してみて、どれほど厳密に得られたかを確認することもできます。あるいは、出発点としてサンプルを選択して先に進めてください - 言語機能の追加、ジェネレーターの実装、型システム規則の追加、編集経験の磨きなど - あなたにとって正しい挑戦のように感じるものは何でも。
さらに、MPS と言語デザインで有能になるためにこれらを試すべきです:
JetBrains で MPS 上級コース(英語)を申請してください。オンラインとオンサイトの両方のオプションがあります。上級コースでは、以下について学びます。
流暢でインテリジェントで使いやすいエディター
自明ではないジェネレーターの実装
型システム規則の定義
コード分析規則とクイックフィックスの指定
カスタマイズされた IDE と言語プラグインの構築
その他たくさんの
共通言語パターンを研究する
クックブックを勉強して、言語デザインのさまざまな側面についてのあなたの知識を深めてください。
引用符と反引用符について知る
ジェネレーターチュートリアルは MPS ジェネレーターが提供するより微妙なオプションをあなたに教えます。さまざまな種類のマクロ、ジェネレータースクリプト、ユーティリティモデルなどについて学びます。
クロージャ、コレクション、コンセプト関数、正規表現、タプル、smodel、ビルド言語など、MPS にバンドルされている言語をよく理解してください。
すぐに必要とする情報を見つけることができるようにユーザーガイドの感触を得てください
心からキーボードショートカットのいくつかを学ぶ
MPS コミュニティで積極的になり、MPS の習得への同じ道を進んでいる人々のフォーラムの質問に答えてみてください (英語)
After becoming 有能 you should definitely continue gaining experience. The more you work with MPS and the more diverse your projects are, the faster you'll be moving up on the スキル獲得の Dreyfus モデル (英語) scale. If you set yourself a goal to become 熟練した and ultimately an エキスパート in MPS, you might consider trying:
次のような高度なトピックを勉強し練習する
デバッガーの機能強化とカスタマイズ
カスタムデータフローアナライザー
Helping MPS expand into these areas by creating a base language for a different target language/platform - Python, Ruby, Haskell, Go, etc
イベントで MPS について話す
ドキュメントを進化させる手助け
貢献するコードから MPS プロジェクト
この経験レベルであなたをガイドするための詳細なドキュメントはそれほど多くなく、ほとんどの場合は自己主導でなければなりませんが、常にあなたに話し合い、助言を与え、協力します。
資料ソース
Here's a list of documentation sources that you may need on your path to MPS mastery.
ブック
Fabien Campagne は、MPS Language Workbench:VolumeI および VolumeII の本を執筆しました。これらは、電子的にもペーパーバックとしても購入できます。本は MPS の古いバージョンをカバーしていますが、それらの内容のほとんどはまだ関連しています。ここで入手してください。


学術論文
出版物(英語)のページには、MPS および関連フィールドに関するすべての関連論文が集められています。
クックブック
To get slightly simplified practical information as well as some tips and tricks on individual aspects of language design, you may try some of the cookbooks.
共通言語パターン - 特定の機能を実装する方法に関するガイドラインが必要な場合
説明コメント - a cookbook showing how to leverage attributes to add support for description comments attached to arbitrary nodes
モデルを照会する方法を示す SModel 言語リファレンスドキュメント
解決方法を見つける - どこかで立ち往生しているときに前進するのを手助けするべきであるガイドラインの簡単なコレクション。
ユーザーガイド
本格的なリファレンスドキュメントは MPS に関する徹底的な情報を提供します。言語デザイナーのユーザーガイドをチェックしてください。
ヘビーメタ
JetBrains MPS パートナーによって作成された言語を構築および設計する方法に関する包括的なチュートリアルと情報。Heavy Meta TV は、JetBrains MPS の約 20 時間の詳細なチュートリアルをホストしています。ヘビーメタチュートリアル(英語)をぜひチェックしてください。
スクリーンキャスト
MPS チームは MPS の使用と言語設計の多くの側面を網羅したスクリーンキャストの大規模なコレクションを作成しました。それらをすべて MPS スクリーンキャストページでまたは JetBrains TV の MPS チャンネル(英語)で直接うまく分類されてチェックアウトすることができます。
ガイド付きトレーニング
MPS チームは、実践的な有償トレーニングを提供しています。詳細を確認してください:
一般的なドキュメント
MPS ドキュメントページはあなたにケーススタディ、チュートリアル、FAQ と MPS ドキュメントの他の部分へのすべての残りのポインターを与えます。
その他のサンプルプロジェクト
MPS には、言語開発をよりよく理解するために使用できるいくつかのサンプルプロジェクトが付属しています。おそらく以下にリストされている順序で、試してみることをお勧めします。それらが何を行い、どのように実装されているかを調べましょう。彼らはあなたに重要な教訓を教えてくれるかもしれません。特定の機能がどのように実装されているかわからなくても心配しないでください。ほとんどの場合、次の演習のいずれかで答えを見つけることができます。その後、サンプルに再度アクセスすると、すぐにクリックすることができます。
これが用意したサンプルのリストです:
言語拡張:
サンプル Java 拡張機能 - ステートメント、Money リテラル、デシジョンテーブル、定数定義を除いて、並列 for ループなどの小さな便利な Java 拡張機能のコレクション。このサンプルでは、既存の汎用言語をカスタム構造で拡張する方法を説明します。
実証済みの機能 - 言語拡張、表形式の表記、スコープ、ビルドスクリプト。
Complex- 複素数を処理する Java 拡張機能を定義します
実証済みの機能 - 言語拡張、ランタイムソリューション、型システム(推論、サブタイプルール)、サイドトランスフォームコントリビューションメニュー、ジェネレーター。
XML リテラル - allows XML literals to be used directly in Java code as first-class language elements. The language builds on top of .xml and generates into the org.jdom.* API. The user-inserted XML code may refer back to the surrounding Java context to easily parametrize.
実証済みの機能 - 言語拡張、埋め込み言語、制約、型システム(推論規則)、データフロー、ジェネレーター。
数学 - 複雑な数値、行列、区間、合計、積、その他の一般的な数学演算を自然な方法で入力できるように、Java の派手に見える数学言語拡張を提供します。
実証済みの機能 - 言語拡張、ベクトルおよび行列表記、スコープ、重要なランタイムソリューション、重要なコードジェネレーター。
スタンドアロン言語
言語パターン - MPS の共通言語パターンの実装を示すサンプル言語のセット。初心者が典型的な言語構成要素の具体的な実装を単独で見るのに役立ちます。このサンプルプロジェクトは徐々に新しいパターンで更新されています。
実証済みの機能 - スコープ、高度な編集、コンテナーコンポーネント、カスタマイズされたプレゼンテーション、宣言参照、dot_expression、流暢な編集トリック、エディターコンポーネントのオーバーライド、シームレスなノード置換。
複数の射影 - an example of a simple state machine language that focuses on the mechanism of multiple projections per concept. The programmer, who uses the language, can on-the-fly switch between several pre-defined notations as they progress with their state-machine definition. All the available notations are defined in the language or its extensions.
実証済みの機能 - 言語の複数の表記法の定義。
マルチターゲット - 単一の言語を複数の異なるターゲット言語に生成する方法を示します。
実証済みの機能 - 単一のモデルから Java コードと XML コードの両方を生成します。
カスタムアスペクト - 言語定義のカスタムアスペクトを定義する方法を示します。詳細については、「カスタム言語アスペクトクックブック」を参照してください。
実証済みの機能 - カスタムアスペクト定義。
クロスモデル生成 - は、カスタムジェネレータープランを使用してクロスモデル生成を実現する方法を示しています。
実証済みの機能 - 生成計画。
コンポーネントの依存関係 - システムのコンポーネント間の依存関係を表現するための言語の最小限の例。これは、3 つの代替エディター表記を提供します。
原文の
表
ダイアグラム
この言語には XML ジェネレーターが付属しており、XML などの非命令型言語を生成する可能性を示しています。
実証済みの機能 - 表形式の表記、グラフィカルな表記、表記の切り替え。
カスタマイズデバッガー - 言語が BaseLanguage に拡張も生成もされていない場合でも、Java デバッガーを使用して言語をフックする例。
実証済みの機能 - デバッグ、デバッガー統合。
マインドマップ - カスタマイズされたグラフィカルシンボルのセットを含む、ダイアグラム表記法を定義する直感的な例
実証済みの機能 - ダイアグラムのグラフィック表記を定義します。
DSL ブックのサンプル - ステートマシンテスト言語を含む、ステートマシン言語(シークレットコンパートメント言語)の例。
実証済みの機能 - ランタイムソリューション、スコープ、テスト言語定義、テスト生成。
カスタムテストケース - 独自のテストを構築して MPS から実行する最小の例です。
実証済みの機能 - テスト生成、MPS テストランナーとの統合。
最も簡単な言語 - カスタマイズされたメッセージを出力する Hello World アプリケーションを生成する最小限の例です。言語生成の非常に基本を示します。
実証済みの機能 - 言語定義の基本、ジェネレーター定義の基本。
移行 -smodelAPI と TransformStatement の両方を使用して相互接続された 2 つの言語を移行する移行スクリプトの簡単な例。
実証済みの機能 - 言語移行の定義、移行テスト。
ラムダ計算 - 射影エディターと Java への生成を伴う、ラムダ計算をシミュレートする言語
実証済みの機能 - 関数型言語の定義、ランタイムソリューション、スコープ、重要な型システムの定義。
契約 - ビジネス指向の DSL の例
実証済みの機能 - 高級言語(日付、期間、金額、通貨)の定義、複雑なランタイムソリューション、スコープ、アクセサーリモデル、代替メニュー、サイドトランスフォームメニュー、ノードファクトリ、ジェネレーター。
式 - 型システムと型システムトレースツールで遊ぶことができるようにする簡略化された式言語。この言語は、最小限のエディターサポートを備えながら、構造化された型システムルールを備えた最低限の式言語を提供します。これは、MPS が型を計算する方法のコアを学習できます。詳細については、型システムのデバッグのドキュメントを参照してください。
実証済みの機能 - 型システム定義、型システムデバッグ。
固定長リーダー - バイナリデータ形式を記述するための言語の作成方法を示します。提供されたデータ形式の説明(設定と呼ばれる)を使用してバイナリデータから要素を抽出する仮想のランタイムライブラリ用のスタブが付属しています。
実証済みの機能 - 固定形式の言語定義、Java および XML の生成。
高水準言語 - an example of defining a custom set of language definition languages building on top of each other. Illustrates how to define your own way to codify structure and editor for a language as well as how to make language debuggable in MPS.
実証済みの機能 -textgen、言語拡張、言語デバッガー定義、カスタム生成計画。
式言語 - エディターアクションとジェネレーターを含む、式言語のサンプル定義。
実証された機能 - 重要な言語定義、ジェネレーター定義。
メモオーガナイザー - タスク / タスクリストをシミュレートするビルドスクリプトを含む IntelliJ IDEA のサンプル DSL プラグイン。タスクにはさまざまな優先順位、状態、カテゴリを設定でき、それら自体をカスタマイズすることもできます。タスクリストは、いくつかの種類の Swing UI コンポーネントを使用してフィルタリングでき、ユーザーはタスクリストのいくつかの代替視覚化から選択できます。フィルタリングノードコレクション、代替エディター、Swing コンポーネントのフォームのような表記への直接組み込みの例として示します。
実証済みの機能 - 言語の構築、IDEA プラグインの構築、カスタムスイングコンポーネント、高度な編集機能、textgen。
状態チャート - SCXML(英語) 規格の状態図を生成する状態図定義言語の例。
実証済みの機能 -XML コード生成、スコープ、重要なエディター定義。
要求追跡 - 普遍的で言語に依存しない要件追跡言語の例。ソフトウェアプロジェクトのゴールは、提供されている要件追跡言語を使用して作成された仕様書に取り込むことができます。関連する要件のメンションは、これらの要件を実装する場所のコードに挿入できます。メンションは、任意の MPS 言語を使用するコードで使用できます。このサンプルは、ノード属性、重要なスコープ、単一の概念のための複数の切り替え可能なエディターを備えています。
実証済みの機能 - 複数のエディター、コードに依存しないノード属性でコードにアノテーションを付けます。
属性 -text-gen およびジェネレーターでの属性の透過的な処理を示すサンプル。2 つの CommentAttribute ノード属性の概念は、text-gen がテキストに変換できるように、変更されずにジェネレーターを通過します。
実証済みの機能 - ノード属性、ジェネレーターでの属性の処理。
サンプルファセット - make プロセスをインターセプトする単純な make ファセットを示しています。
実証済みの機能 - ファセットを作成します。
Money -BaseLanguage の単純な拡張機能を提供します。これにより、Money リテラル(10EUR や 25USD など)の定義と数式での使用が可能になります。
実証済みの機能 - ランタイムソリューション、型システム、ジェネレーター。
BL リファレンス - 値のボックスと日付リテラルという 2 つの BaseLanguage 拡張機能を定義します。LValue 式で動作する言語拡張機能 (単項 ++ や -- など) を作成し、BaseLanguage に生成する方法を示します。詳細については、「BaseLanguage の拡張機能用のジェネレーターを実装する」を参照してください。
デモされた機能 – 制約、型システム、ジェネレーター。
軽量 DSL - Jetbrains.mps.baselanguage.lightweightDSL 言語を使用して、BaseLanguage クラスに埋め込まれた内部の「軽量」 DSL を構築する例。
実証済みの機能 - 軽量 DSL 言語。
加熱コントローラー - 架空の家庭用暖房コントローラーの暖房計画を指定するための 2 つの表記法を提供する単純な言語。デフォルトの表記ではテキスト表現が可能ですが、言語拡張では代替の表形式の表記が提供されます。
実証された機能 - 複数の表記法、表形式の表記法、制約、動作。
ツールチップのサンプル - エディター定義の一部としてツールチップを使用するわかりやすい例。
実証済みの機能 - エディターのツールチップ。
進捗インジケータ - アクションのプログレスバーを処理する適切な方法、アクションをキャンセル可能にしてバックグラウンドで実行できるようにする方法を説明する一連のアクション。
実証済みの機能 - アクション、プラグインソリューション、キャンセル可能でバックグラウンド対応のアクション、プログレスバーレポート。
プロパティの永続性 - カスタム形式のスタブモデル実装の重要な例です。このサンプルプロジェクトのカスタムモデルルートとカスタムモデルの実装により、プレーンプロパティファイルがモデルとして MPS にロードされます。詳細については、「カスタム持続クックブック」を参照してください。
実証済みの機能 - カスタム永続性、カスタムスタブモデル。
サンプル XML - XML 言語の大幅に簡素化された実装。主に XML 永続サンプルプロジェクトのために機能します。
デモされた機能 – textgen。
XML の永続性 - ModelFactories とカスタムモデル実装を使用してカスタム永続性を実装する簡単な例です。プラグインには 3 つのソリューション (ビルドスクリプト、永続化実装、プラグイン記述子) が含まれています。カスタム永続性の実装は、XML ドキュメントをロード / 保存します。詳細については、「カスタム持続クックブック」を参照してください。
デモされた機能 – カスタム永続性。
チュートリアルのサンプル:
ChemMastery - the language used in the JetBrains MPS せっかちなオンラインコース (英語) . It enables writing chemical elements, compounds and equations and some checking of their validity.
実証済みの機能 - 定義 - 参照、重要なエディターレイアウト(配置、下付き文字フォント)、カスタムスイングコンポーネント、チェックルール。
シェイプ - 入門図形チュートリアルの一部として作成された言語。
実証済みの機能 - 言語定義、Java 生成。
ロボットカヤ - 導入されているスクリーンキャストの多くで使用されている仮想ロボットを指揮するための言語。今コンテキストアシスタント実装のサンプルが含まれています。
実証済みの機能 - ランタイムソリューション、スコープ、Java 生成、言語定義、インテンション、チェックルール、クイックフィックス。
電卓 - 計算機のチュートリアルの一部として作成された言語。
実証済みの機能 - 言語定義、Java 生成。
ジェネレーターデモ - ジェネレーターチュートリアルの一部として開発された一連の言語。
実証済みの機能 - 高度なジェネレーター機能。
関連ページ:
よくある質問 (FAQ)
ドメイン固有言語、プロジェクショナルエディターおよび MPS:ここでは、MPS に関して最もよくある質問に対する答えを見つけることができます。ドメイン固有言語(DSL)とは何ですか? それらは「実際の」プログラミング言語とどう違うのですか? DSL は、特定の問題領域向けに最適化された言語です。通常、Java、C、Ruby などの汎用言語ほど複雑ではありません。DSL は通常、DSL が設計されているドメインまたはフィールドの専門家と緊密に連携して開発されます。多くの場合、DSL は、DSL が対...
基本的な考え方
この章では、基本的な MPS の概念であるノード、概念、言語について説明します。これらは、MPS の仕組みを正しく理解するための鍵となります。これらはすべて、他の要素と組み合わせることで初めて意味を成すため、すべて一緒に説明する必要があります。このセクションの目的は、各要素の本質を説明することです。詳細については、ノード、概念 (構造言語)、言語 (プロジェクト構造) に関するセクションを確認することを検討してください。抽象構文木 (AST):MPS は、テキスト形式を避けることによって他の多く...
用語集
MPS 用語集:抽象構文木 (AST) ノードの階層を記述するツリーフォレストの形をしたメモリ(およびディスク)内のコードの論理表現。これらのノードは、親子関係という概念を持ちます。さらに、2 つのノードは、階層構造を横断する明示的な参照によって相互に接続できます。BaseLanguageJava 6 の射影クローン (Java 7 および 8 のオプションの拡張機能付き)。Java 仕様に準拠しており、Java 6 と 1:1 互換性があります。さらに、MPS は、日付、コレクション、クロージ...
図形
MPS に不慣れですぐにそれを試してみたいなら、これはあなたのための正しいチュートリアルです。2 時間以内に、新しい言語とその言語を使用する機能コードを入手できます。このチュートリアルでは、最初から始め、安全で便利な道を歩むことで、新しい言語のコア要素を設計します。すぐにフィニッシュラインに到達するために、高度な概念、複雑な構成要素、暗いコーナーを避けます。最後に、MPS とは何か、MPS がどのような原則に基づいているのかを理解できます。シートベルトを締めてください。高速に走ります。前提条件...
依存関係を正しくする
目的:モジュールとモデルは通常、さまざまな型の依存関係のネットワークによって相互接続されています。MPS プロジェクト構造のページに従って、モジュールとモデルの基本的な原則と分類を理解していると仮定すると、私達は今やすべての詳細を学ぶようにさらに深く掘り下げることができます。MPS で依存関係を正しく取得することは、経験の浅いユーザーやベテランのベテランの間でもフラストレーションの頻繁な原因です。このページは、問題を一度に解決することを目的としています。さまざまなモジュールと依存関係の種類によ...
共通言語パターン
この章では、MPS を学習する初心者が頻繁に遭遇する一般的な言語設計パターンについて説明します。これらは、MPS ユーザーがオンラインフォーラムで最も頻繁に確認する質問であることが長年にわたり判明しており、簡単に参照できるように回答を 1 か所にまとめることにしました。言語パターン付きのサンプルプロジェクト:MPS にはサンプルプロジェクトがバンドルされています。ここで説明するパターンの多くは、languagePatterns サンプルプロジェクトに実装されています。これを MPS で開き (M...