MPS 2020.3 ヘルプ

MPS へのファストトラック - 習得するための 10 のステップ

ようこそ ! このチュートリアルは、MPS にまったく慣れておらず、MPS の風景を見ながらのガイドツアーを好む開発者のために特別に設計されます。次に進むべき場所を示す明確なマークに従って、殴打された道を一度に 1 歩歩きます。情報は、より単純な概念からより複雑な概念へと進み、旅の終わりに MPS を理解し、あなたのプロジェクトでそれを効果的に使用できるようになるように構成されています。

私達は MPS を学ぶことよりも世界に簡単な作業があることを認めます。言語設計は複雑な領域であり、投影編集は慣れる必要があります。DSL または言語ワークベンチの使用経験がある場合は大いに役立ちますが、このチュートリアルを理解するのに必要というわけではありません。道路上でより多くのバンプを期待してください。確かにそれらの多くがあるでしょう - MPS がそれ自身の問題とバグを持っていることも理由の一つです。かなりの時間がかかるかもしれない厳しい経験を求めています。

多くの人が以前にここを通り抜けて成功したことを覚えておいてください。頑張れば報われるでしょう - カスタムメイドの DSL を準備し、プロジェクトに統合し、使って高負荷値のソフトウェアを開発することができる言語デザイナーになります。

いい靴を履いて、しっかりとひもを締めて行きましょう。

未加工時間の見積もり -15 分

MPS を学ぶための動機から始めましょう。

  1. まず最初に、MPS - なぜ JetBrains MPS(英語) についての 2 分間の概観ビデオをチェックしてください。そうすれば、このツールがあなたのプロジェクトに必要なものを提供しているかどうかを評価することができます。

  2. 当社の新しい VoiceMenu デモアプリケーション(英語)は、さまざまな専門分野の出身者に MPS の可能性を素早く理解させるために作成されました。この短いビデオを参照してください。

  3. 学術研究に関心がある場合は、MPS ユーザーが時間をかけて公開した MPS にあるすべての学術出版物のリスト(英語)も確認してください。

推定生時間 -120 分

今すぐ MPS をお試しください ! MPS の Web サイトからダウンロードするをクリックして、準備された実践コースに進みます。無料のガイド付きオンラインチュートリアルに参加して、MPS をすぐにプレイし、コードを記述し、言語定義ビットを改善して、すべてがどのように機能するかを確認します。MPS があなたのためであるかどうか、それから何を期待できるかを評価できるように、物事を試すことに焦点が当てられています。理論の説明に費やす時間は最小限です。MPS が自分に適したツールであることがわかったら、後で MPS について深く掘り下げる時間は常にあります。それでは、せっかちな人のための JetBrains MPS(英語) にアクセスして、MPS について学びましょう。

未加工時間の見積もり -15 分

MPS について簡単に読んでも、実際に試してみるほど多くのことを学ぶことはできません。すでにこれを行っているかもしれませんが、そうでない場合は、ダウンロードサイトから MPS を入手してインストールしてください。MPS がインストールされていると、ファーストトラックを続行できます。

皆違う: MPS に付属しているデフォルト設定が習慣に合わない場合は、設定 (MacO、Ctrl+Alt+S を押す)または設定(Windows、Ctrl+Alt+S を押す、またはメニューのファイル -> 設定に移動)でいつでも変更できます。変更される可能性が最も高い設定の 1 つは、エディター -> 一般セクションのフォントサイズです。

Editor config

キーボードショートカットを知っていると、優れた開発者が優れた開発者に変わります: MPS を学習すると、便利な MPS 機能をトリガーするさまざまなキーの組み合わせを内部化できます。ただし、最初から覚えておくべき重要な組み合わせが 1 つあります。- Ctrl+Z。もう一度 - Ctrl+Z元に戻すアクションです: 意図的または誤って何か間違ったことをして、関数型コードに戻りたいときはいつでも、Ctrl+Z に目を向けてください。

私たちプログラマーは物事を試すのが好きなので、最初に MPS エディターを使って簡単な試乗をしてみませんか? MPS を起動してロボットカヤサンプルプロジェクトを開くと、すぐに第一印象を得ることができます: このプロジェクトは、仮想ロボットに命令するための人工言語を定義する: ロボットは長方形の領域内を移動し、マークをドロップして収集し、周囲のセルの壁やマークをチェックできます: 組み込みコマンドとその場で作成する新しいコマンドを使用してスクリプトを作成します : スクリプトを実行すると、Java で記述されたシミュレーターが起動して、プログラムの実行を視覚化する

プロジェクトを開くには、新しい MPS を起動し、サンプルプロジェクトを開くボタンをクリックして、robot_Kaja を選択します。サンプルプロジェクトはホーム /MPS サンプルフォルダーにインストールされています。

Robot open1

次のビデオは MPS 入門オンライントレーニング(英語)コースから借りたものです。この教育用スクリーンキャスト(英語)は、MPS の使用を開始できます。見てみな。
ビデオが好きで、MPS の学習に真剣に取り組んでいる場合は、MPS 入門オンライントレーニング(英語)への登録を検討してください。数多くの実践的な演習を通じて徹底的なガイダンスを提供し、ライブトレーナーと進捗状況や質問について話し合うことができます

推定生時間 -25 分

このビデオを見てください ! - 初めての実行(英語)それはあなたに MPS がどのように組織されているか、それがどのように働くか、どのようにユーザーが MPS とやり取りするべきかについての重要な情報を与えます。

  1. 注意深く MPS を評価しているなら、ビデオを見ている間、または MPS 使用箇所についての物語を読んでいる間あなたの頭の中に飛び出す多くの質問がなければなりません。これらの質問のいくつかがすでに MPS FAQ ページで答えられていると思います。見てみな

  2. Mikhail Barash による MPS の基礎に関する穏やかな紹介記事(英語)を参照してください。記事を読むとすぐにすべての原則を理解できるため、これは現時点で間違いなく時間をかける価値があります。

  3. ちょっと立ち止まって、ノード、コンセプト、AST のような本質的な用語をリストしている短いページをさっと読んで、よく使われる用語をさらによく理解してください。

推定生時間 -25 分

続行する前に、MPS の最も特徴的な機能であるプロジェクティブエディターについて理解しておく必要があります。従来のテキストエディターと MPS プロジェクティブエディターのすべての違いを説明し、このアプローチの多くの利点をリストしたビデオをチェックします(英語)

MPS でコードを編集するとき、あなたのコーディング習慣が MPS エディターの投影の性質を妨げる状況に遭遇するでしょう。実験の間にすでにそのような驚きを発見したと実にかなり確信しています。MPS のコードはテキストではありませんが、代わりに抽象構文(AST)の射影です。これにより、言語設計者にいくつかの利点があり、同時に、編集経験が一般的なテキストエディターとは若干異なり、制限が厳しくなります。これは利点であると考えられるかもしれないし、考えられないかもしれません。それにもかかわらず、射影編集への学習曲線があります。一般に、射影コードでは、エディターの助けを借りています。効率的な射影コーダになるためには、コード補完、ブロック選択、インテンションアクションがあなたの親友になるはずです。それには良い面も悪い面もあります。

  • 良い - MPS エディターでのプログラミングの 1 週間未満で、人々は通常、テキストベースの IDE で以前に経験したコーディングのフルスピードに戻ります。

  • 悪い - 投影編集は中毒性が非常に高く、テキストベースのエディターは以前に考えられていたよりも説得力がなく、役に立たないと感じるかもしれません。

これから言語の設計に真剣に取り組むつもりです。MPS の学習に全力を注ぐ必要があるため、まだ躊躇している場合は、MPS の探索にさらに時間をかけるかどうかにかかわらず、先に進む前に次の資料を確認することを検討してください。すでに納得している場合は、次のステップに進んでください。

  • JetBrains MPS は、有償プロジェクトと学術プロジェクトの両方でソフトウェアベンダーに採用されている効率的で信頼性の高い開発ツールです。MPS ベースの DSL は、立法モデリング、電気工学、保険業界、組み込みソフトウェア、医療システム、バイオインフォマティクス、データ分析など、幅広い分野で採用されています。" MPS ホームページの「When MPS」セクション " 成功したプロジェクトのいくつかをリストし、使用されているテクノロジーの概要を示します。

  • また、少し速度を落として、ミハイルバラシ(英語)を使用して、MPS の優れたドメイン固有の言語に関する物語(英語)で MPS の周囲に素晴らしいものを構築するための独自のアイデアを生み出すこともできます。どういたしまして !

未加工時間の見積もり -20 分

ここで、ロボットのサンプル言語がどのように作成されたかについて知りたいと思うはずです。ロボットカヤサンプルプロジェクトをもう一度開いて、言語定義の基本を説明するスクリーンショット(英語)を再生してください。
繰り返しになりますが、このビデオは MPS 入門オンライントレーニング(英語)コースから借用しており、JetBrains が提供するこの有料コースを味わうことができます
ビデオを読みながら、頻繁に一時停止して、サンプルプロジェクトを自分で参照してください。このようにして、典型的な言語構造を理解し、その個々の部分間の関係を確認できます。

この時点で、言語定義はいくつかの側面からなることを理解するべきです。これらのいくつかは必須です、いくつかはオプションです。

  • 構造 - ユーザーモデルで使用できるノードの種類(コンセプトと呼ばれる)を定義します。プログラム(モデル)の各ノードは、その概念を参照します。概念 は、どのプロパティ、および参照ノードが持つことができるかを指定します。Concepts は、他の Concepts を拡張し、ConceptInterfaces を実装できます。

  • 制約 - ノード間の関係と、構造で定義されたルールを超えてプロパティに許可される値を制限します。通常、制約は以下を定義します。

    • 参照の対象スコープ (参照が指すことができる許可されたノードのコレクション)

    • あるノードが別のノードの子 / 親 / 祖先になることができる状況

    • プロパティの許容値

    • プロパティアクセサーメソッド (Getter および Setter)

  • 動作 -OOP ホールドメソッドのクラスと同様に、Concepts は、ノードでポリモーフィックな方法で呼び出すことができるメソッドと静的メソッドを定義できます。したがって、ノードはそのプロパティと関係とともに動作を実行します。

  • エディター - コードを編集可能なフォーム(つまりテキスト)からコンピューターが操作できるツリーのような構造に変換するパーサーを定義する代わりに、MPS は、ユーザーが AST を直接編集できるプロジェクションエディターの概念を提供します。エディターアスペクトを使用すると、言語設計者は概念の概念を編集するための UI を作成できます。

  • アクション -MPS エディターは基礎となる AST を直接操作するため、コピーアンドペーストやノードの別のノードへの置き換えなどの一部の編集アクションは、重要な AST の変更に変換されます。アクションアスペクトは、そのようなカスタマイズされた AST 変換の定義を保持します。

  • インテンション - すべての最新の IDE は、便利なキーショートカット(MPS の Alt+Enter )で利用可能なアクションを即座にコード操作することで開発者を支援します。言語の作成者は、インテンションの側面で、言語のこのような小さなコード変換を定義できます。

  • 型システム - 言語を必要に型システムの規則を提供するために、自分のコードの必要性を入力し、チェックすること。MPS 型システムエンジンは、ルールをオンザフライで評価し、ノードの型を計算してレポートします
    計算されたタイプが予想と異なる場合は常にエラー。
    モデルに関する非型システムアサーションを検証するために、いわゆるチェックルールを追加で定義できます。

  • データフロー - 言語構造を介した値のフローと制御のフローを理解する機能は、言語が到達不能コードnull ポインタエラーの可能性などの問題を報告できます。言語設計者は、データフローアスペクトを活用して、各概念のフローを定義できます。MPS は、このフローを使用して、プログラム全体のデータフローを計算します。

  • ジェネレーター -1 つ以上の言語で記述されたモデルは、最終的に、Java などのターゲット汎用言語およびプラットフォームで実行可能なコードに変換されます。その過程で、モデルは徐々に変換され、概念は、最終的なレベルに到達するまで、より低いレベルの抽象化からの概念に繰り返し置き換えられます。概念の翻訳規則とその適切な順序は、生成プログラムアスペクトで定義されています。

  • TextGen - 生成プログラムが最終的な AST 表現に到達した後のコード生成中に、TextGen フェーズが開始し、モデル内のすべてのノードをそれらのテキスト表現に変換し、結果のテキストソースファイルをディスクに保存します。

所要時間 - 2 時間

図形チュートリアルを使用すると、独自の言語をすばやく作成できます。MPS エントリレベルの図形チュートリアルを確認し、非プログラマーがグラフィカルな形状のシーンを構築できるようにする言語を構築します。

Tut1

Tut2

所要時間 - 8 時間

MPS の言語設計の詳細を知りたいと思うはずですよね? すべての基本的な情報とある程度のエクスペリエンスを提供したため、入門チュートリアルでは、深く掘り下げてサンプル言語をゼロから構築するのに適した位置にいるはずです。計算機のチュートリアルは、言語作成のプロセスをガイドします。空のプロジェクトから始めて、Java Swing ベースのビジュアルアプリケーションを構築するための言語で終わります。ぜひお試しください。

MPS が Java の生成に限定されていないことを示すために、同様の Calculator サンプルプロジェクトを用意しました。- 計算を保持するための HTML ページと JavaScript プログラムを生成する CalculatorJS(英語): GitHub で確認(英語)できます。

所要時間 - 30 分

お気づきのとおり、MPS を使用すると、モデル間の依存関係を管理したり、言語をインポートしたりできます。これらを理解することが不可欠であるため、依存関係を正しくすることに関するユーザガイドの章を参照してください。それはあなたに依存関係とインポートされた言語との間の違いと設定 / 管理する方法を教えます。

所要時間 - 5 時間

電卓のチュートリアルでは、言語設計の全体的な知識が十分に得られているはずです。今こそ、より徹底的な運動の時です。ガレージプロジェクトでは、相互接続された複数の言語を作成し、再利用可能なプラグインとしてパッケージ化し、言語を積み重ねます。このチュートリアルの複雑さを処理するために、オンライン教育に Stepik プラットフォームを活用します。無料の MPS 初級コース(英語)に登録します。

おめでとう ! 上記のチュートリアルと演習を完了することで、言語デザインの世界に深刻な打撃を与えました。MPS の知識とコマンドは、スキル獲得の Dreyfus モデル(英語)上級初心者ステージの上のどこかで認定される可能性があります。これは間違いなく祝うのに良い時期であり、おそらくあなたの成功について私たちに知らせるのにも良い時期(英語)です。

スキル獲得の Dreyfus モデル(英語)の次のステージは有能です。その段階に達すると、具体的なガイドラインや監督なしで自分で作業できるようになります: しかし、これを実現するには、MPS のさまざまな問題を解決するためにより多くの時間を費やす必要があります。実装する言語のアイデアがすでにある場合は、先に進んでそれを実行してください: そうでない場合は、便利な小さな言語を考え出すようにしてください: 1 つ以上の MPS サンプルを再実装して、どれだけ近づいたかを確認することもできます。または、開始点としてサンプルを選択し、それを前に進めます - 言語機能の追加、ジェネレーターの実装、型システムルールの追加、編集エクスペリエンスの向上 - とって正しい挑戦のように感じるものは何でも。

さらに、MPS と言語デザインで有能になるためにこれらを試すべきです:

  1. JetBrains で MPS 上級コース(英語)を申請してください。オンラインとオンサイトの両方のオプションがあります。上級コースでは、以下について学びます。

    • 流暢でインテリジェントで使いやすいエディター

    • 自明ではないジェネレーターの実装

    • 型システム規則の定義

    • コード分析規則とクイックフィックスの指定

    • カスタマイズされた IDE と言語プラグインの構築

    • その他たくさんの

  2. 共通言語パターンを研究する

  3. クックブックを勉強して、言語デザインのさまざまな側面についてのあなたの知識を深めてください。

  4. 引用符と反引用符について知る

  5. ジェネレーターチュートリアルは MPS ジェネレーターが提供するより微妙なオプションをあなたに教えます。さまざまな種類のマクロ、ジェネレータースクリプト、ユーティリティモデルなどについて学びます。

  6. クロージャコレクションコンセプト関数正規表現タプルsmodelビルド言語などの MPS にバンドルされている言語をよく理解してください。

  7. コマンドラインから MPS プロジェクトを構築する方法、IntelliJ IDEA および MPS プラグインに言語をパッケージする方法、プラグインの使用方法、およびスタンドアロン DSL IDE の構築方法を学ぶ

  8. すぐに必要とする情報を見つけることができるようにユーザーガイドの感触を得てください

  9. 心からキーボードショートカットのいくつかを学ぶ

  10. MPS コミュニティで積極的になり、MPS の習得への同じ道を進んでいる人々のフォーラムの質問に答えてみてください (英語)

有能になった後、間違いなく経験を積むべきです。MPS を使って作業を進め、プロジェクトを流用すればするほど、スキル獲得の Dreyfus モデル(英語)スケールで早く上がることができます。MPS で熟練した、最終的にはエキスパートになるというゴールを自分で設定した場合は、次のことを検討してください。

  1. 次のような高度なトピックを勉強し練習する
    1. 使用箇所の検索

    2. MPS フレームワークを作る

    3. デバッガーの機能強化とカスタマイズ

    4. カスタム永続化

    5. 依存関係アナライザーおよびモジュール依存関係ツール

    6. カスタムデータフローアナライザー

    7. 拡張

  2. 異なるターゲット言語 / プラットフォームのベース言語を作成することにより、MPS がその領域に拡大するのを支援します - Python、Ruby、Dart、Haskell、Go など

  3. イベントで MPS について話す

  4. ドキュメントを進化させる手助け

  5. 貢献するコード(英語)から MPS プロジェクト

この経験レベルであなたをガイドするための詳細なドキュメントはそれほど多くなく、ほとんどの場合は自己主導でなければなりませんが、常にあなたに話し合い、助言を与え、協力します。

MPS マスタリーへの道のりに必要となるかもしれないドキュメントソースのリストはここにあります

Fabien Campagne が MPS 言語ワークベンチを作成しました: 電子的にもペーパーバックとしても購入できる第 I 巻と第 II 巻の本: 本は MPS の古いバージョンをカバーしていますが、それらの内容のほとんどはまだ関連しています: ここで入手してください。

Mps book cover volume1 small
Cover volume 2 v3 thumbnail website1 216x300

出版物(英語)のページには、MPS および関連フィールドに関するすべての関連論文が集められています。

実用的な情報や、言語設計の個々の側面に関するヒントやコツを少しだけ簡単にして、クックブックをいくつか試してみてください。

本格的なリファレンスドキュメントは、MPS に関する完全な情報を提供する: 言語デザイナーのユーザーガイドをチェックしてください。

JetBrains MPS パートナーによって作成された言語を構築および設計する方法に関する包括的なチュートリアルと情報: Heavy Meta TV は、JetBrains MPS の約 20 時間の詳細なチュートリアルをホストしています: ヘビーメタチュートリアル(英語)をぜひチェックしてください。

時間の経過とともに、MPS チームは、MPS の使用と言語設計の多くの側面をカバーするスクリーンキャストの大規模なコレクションを作成してきました。MPS スクリーンキャストページで、または JetBrains TV の MPS チャンネル(英語)で直接、すべてうまくソートされたものをチェックできます。

MPS チームは、実践的な有償トレーニングを提供しています: 詳細を確認してください:

MPS ドキュメントページはあなたにケーススタディ、チュートリアル、FAQ と MPS ドキュメントの他の部分へのすべての残りのポインターを与える

MPS には、言語開発をよりよく理解するために遊ぶことができるいくつかのサンプルプロジェクトが付属しています: おそらく以下の順序で試してみることをお勧めする: それらが何をし、どのように実装されているかを参照してください: 彼らはあなたに重要な教訓を教えるかもしれません: 特定の機能がどのように実装されているかがわからない場合でも心配しないでください: ほとんどの場合、次の演習のいずれかで答えが見つかります。その後、サンプルに再度アクセスすると、すぐにクリックするだけです。

これがあなたのために用意したサンプルのリストです:

  • SampleJavaExtensions - ステートメント、Money リテラルデシジョンテーブル定数定義を除いて並列 for ループなどの便利な Java 拡張機能のコレクション: サンプルでは、カスタム構造を使用して既存の汎用言語を拡張する方法を説明する: 個々の拡張機能を紹介する短いスクリーンキャストを見る(英語)もお勧めです。

  • Complex- 複素数を処理する Java 拡張機能を定義します

  • XML リテラル - XML リテラルを Java コードでファーストクラスの言語要素として直接使用できるようにします。この言語は .xml の上に構築され、org.jdom.* API に生成されます。ユーザーが挿入した XML コードは、周囲の Java コンテキストを参照して、簡単にパラメーター化できます。

  • math -Java に見栄えのする数学言語拡張機能を提供します。これにより、複素数、行列、間隔、合計、積、その他の一般的な数学演算を自然な方法で入力できます。

  • LanguagePatterns - MPS での一般的な言語パターンの実装を示すサンプル言語のセット: 初心者にとって、典型的な言語構造の具体的な実装を単独で見ることは有用です。このサンプルプロジェクトは、新しいパターンで徐々に更新されています。

  • MultipleProjections - 概念ごとに複数の射影のメカニズムに焦点を当てた単純なステートマシン言語の例。この言語を使用するプログラマーは、ステートマシンの定義を進めるにつれて、事前定義されたいくつかの表記法をその場で切り替えることができます。利用可能な表記法はすべて言語またはその拡張で定義されています。

  • MultiTarget - 単一の言語を複数の異なるターゲット言語に生成する方法を示します。

  • カスタムアスペクト - 言語定義のカスタムアスペクトを定義する方法を示します。詳細については、カスタム言語アスペクトクックブックを確認してください。

  • クロスモデル生成 - カスタムジェネレータープランを使用してクロスモデル生成を実現する方法を示します。

  • コンポーネントの依存関係 - システムのコンポーネント間の依存関係を表現するための言語の最小限の例。これは、3 つの代替エディター表記を提供します。
    1. 原文の

    2. ダイアグラム

    この言語には XML ジェネレーターが付属しており、XML などの非命令型言語を生成する可能性を示しています。
  • カスタマイズデバッガー - 言語が BaseLanguage に拡張も生成もされていない場合でも、Java デバッガーを使用して言語をフックする例。

  • マインドマップ - カスタマイズされたグラフィカルシンボルのセットを含む、ダイアグラム表記法を定義する直感的な例

  • ステートマシン(シークレット区画言語 / DSL 本のサンプル) - ステートマシンテスト言語を含むステートマシン言語の例。始めるのを手助けするための概要スクリーンキャストが利用可能です(英語)

  • カスタムテストケース - 独自のテストを構築して MPS から実行する最小の例です。

  • 最も簡単な言語 - カスタマイズされたメッセージを出力する Hello World アプリケーションを生成する最小限の例です。言語生成の非常に基本を示します。

  • 移行 -smodelAPITransformStatement の両方を使用して相互接続された 2 つの言語を移行する移行スクリプトの簡単な例。

  • ラムダ計算 - プロジェクションエディターと Java への生成を伴う、ラムダ計算をシミュレートする言語

  • 契約 - ビジネス指向の DSL の例

  • - 型システム型システムトレースツールで遊ぶことができるようにする簡略化された式言語。この言語は、最小限のエディターサポートを備えながら、構造化された型システムルールを備えた最低限の式言語を提供します。これは、MPS が型を計算する方法のコアを学習できます。詳細については、型システムのデバッグのドキュメントを参照してください。

  • 固定長リーダー - バイナリデータ形式を記述するための言語の作成方法を示します。提供されたデータ形式の説明(設定と呼ばれる)を使用してバイナリデータから要素を抽出する仮想のランタイムライブラリ用のスタブが付属しています。

  • 高水準言語 - 言語定義言語のカスタムセットを定義する例。言語の構造とエディターを体系化するための独自の方法を定義する方法を説明します。

  • サンプル言語 - 彼らに定義と参照を含むルート概念の一般的なパターンを実装する方法を示す非常に直感的で最小限の例。このサンプルでは、Java クラス、メソッド定義、メソッド呼び出しをシミュレートします。ただし、このようなパターンは多くの言語で非常に頻繁に発生するため、調査に時間を費やすことは価値があります。また、このサンプルを見て回っている短いスクリーンキャストをチェックすることもできます。

  • 式言語 - エディターアクションやジェネレーターを含む式言語のサンプル定義

  • 主催者 - タスク / タスクリストをシミュレートするビルドスクリプトを含む IntelliJ IDEA のサンプル DSL プラグイン。タスクにはさまざまな優先順位、状態、カテゴリを設定でき、それら自体をカスタマイズすることもできます。タスクリストは、いくつかの種類の Swing UI コンポーネントを使用してフィルタリングでき、ユーザーはタスクリストのいくつかの代替視覚化から選択できます。フィルタリングノードコレクション、代替エディター、Swing コンポーネントのフォームのような表記への直接組み込みの例として示します。

  • 状態チャート - SCXML(英語) 規格の状態図を生成する状態図定義言語の例。

  • 要求追跡 (新規) - 言語にとらわれない普遍的な要件追跡言語の例。ソフトウェアプロジェクトのゴールは、提供されている要件追跡言語を使用して作成された仕様書に取り込むことができます。関連する要件のメンションは、これらの要件を実装する場所のコードに挿入できます。メンションは、任意の MPS 言語を使用するコードで使用できます。このサンプルは、ノード属性、重要なスコープ、単一の概念のための複数の切り替え可能なエディターを備えています。

  • 属性 -text-gen およびジェネレーターでの属性の透過的な処理を示すサンプル。2 つの CommentAttribute ノード属性の概念は、text-gen がテキストに変換できるように、変更されずにジェネレーターを通過します。

  • サンプルファセット - make プロセスをインターセプトする単純な make ファセットを示しています。

  • 軽量 DSL - BaseLanguage クラスに埋め込まれた内部「軽量」DSL を構築するための jetbrains.mps.baselanguage.lightweightDSL 言語の使用例。

  • 加熱コントローラー - 架空の家庭用暖房コントローラーの暖房計画を指定するための 2 つの表記法を提供する単純な言語。デフォルトの表記ではテキスト表現が可能ですが、言語拡張では代替の表形式の表記が提供されます。

  • 進捗インジケータ - アクションのプログレスバーを処理する適切な方法、アクションをキャンセル可能にしてバックグラウンドで実行できるようにする方法を説明する一連のアクション。

  • プロパティの永続性 - カスタム形式のスタブモデル実装の重要な例。このサンプルプロジェクトのカスタムモデルルートとカスタムモデルの実装により、プレーンプロパティファイルがモデルとして MPS にロードされます。詳細については、カスタム持続クックブックを参照してください。

  • XML の永続性 - ModelFactories とカスタムモデル実装を使用してカスタム永続性を実装する重要な例。プラグインには、3 つのソリューション(ビルドスクリプト、永続化実装、プラグイン記述子)が含まれています。カスタム永続性の実装は、XML ドキュメントをロード / 保存します。詳細については、カスタム持続クックブックを参照してください。

関連ページ:

よくある質問 (FAQ)

DSL、LOP、プログラミング:ここでは、MPS に関して最もよくある質問に対する答えを見つけることができます。DSL とは何ですか? 「本物の」プログラミング言語とどう違うのですか。DSL は特定の種類の問題に最適化された言語です。通常、Java、C、Ruby などの汎用言語よりも複雑さは少なくなります。DSL はチューリング完全ではないかもしれず、関心のあるフィールドについての事実だけを述べています。通常 DSL は、DSL が設計されているフィールドの専門家である人々と密接に連携して開発...

基本的な考え方

この章では、基本的な MPS の概念(ノード、概念、および言語)について説明します。これらは、MPS がどのように機能するかを正しく理解するための鍵です。それらはすべて他のものと組み合わせたときにのみ意味をなすため、それらすべてについて一緒に話し合う必要があります。このセクションは、各要素の本質を説明することを目的としています。詳細については、ノード、概念(構造言語)、言語(プロジェクト構造)に関するセクションを確認することを検討してください。抽象構文ツリー (AST):MPS は、テキスト形式...

用語集

MPS 用語集:BaseLanguageJava 6 のプロジェクティブクローン(Java 7 および 8 のオプションの拡張機能付き)。これは、Java の仕様に従っており、1:1 Java 6. との互換性に加え、MPS は、日付、コレクション、閉鎖やその他多くの BaseLanguage には、いくつかの便利な拡張機能を提供します。コード生成あるモデル(AST)から別のモデルへのコードの変換プロセス。例: 一連のビジネスルールを記述するコードをプレーン Java に変換して、javac でコン...

図形

MPS を初めて使用し、すぐに試してみたい場合は、これが適切なチュートリアルです。2 時間以内に、新しい言語とその言語を使用する関数型コードを入手できます。チュートリアルでは、最初から始め、安全で便利なパスに沿って進めることで、新しい言語のコア要素を設計します。フィニッシュラインにすばやく到達するために、高度な概念、複雑な構成、暗いコーナーは避けます。最後に、MPS とは何か、MPS がどのような原則に基づいているかがわかります。シートベルトを締めてください。高速に走ります。前提条件:MPS...

依存関係を正しくする

目的:モジュールとモデルは通常、さまざまな型の依存関係のネットワークによって相互接続されています。MPS プロジェクト構造のページに従って、モジュールとモデルの基本的な原則と分類を理解していると仮定すると、私達は今やすべての詳細を学ぶようにさらに深く掘り下げることができます。MPS で依存関係を正しく取得することは、経験の浅いユーザーやベテランのベテランの間でもフラストレーションの頻繁な原因です。このページは、問題を一度に解決することを目的としています。さまざまなモジュールと依存関係の種類によ...

共通言語パターン

この章では、MPS を学ぶ初心者がよく遭遇するであろう共通言語設計パターンについて説明します。私達は MPS ユーザーがオンラインフォーラムで確認する最も頻繁な質問としてこれらの時間を経て特定したため私達は容易な参照のために一箇所に答えをまとめることにした。言語パターン付きのサンプルプロジェクト:MPS にはサンプルプロジェクトがバンドルされています。ここで説明するパターンの多くは、languagePatterns サンプルプロジェクトに実装されています。MPS で開き(MPS のウェルカム画面...