MPS 2024.1 ヘルプ

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

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

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

これまで多くの人がここを通って成功してきたことを忘れないでください。固執するなら、報われるでしょう - カスタムメイドの DSL を準備し、プロジェクトに統合しそして使って価値の高いソフトウェアを開発することができる言語デザイナーになるでしょう。

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

ステップ 1 - なぜ MPS

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

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

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

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

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

ステップ 2 - 手を汚す

推定生時間 -120 分

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

ステップ 3 - プログラマーの観点からの MPS

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

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

エディターを設定する

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

EditorConfig.png

安全にシートベルトを着用する

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

ちょっとした乗車

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

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

Robot-open1.png

次のビデオは MPS 入門オンライントレーニング(英語)コースから借りたものです。この説明用スクリーンキャスト(英語)は、MPS の使用を開始できます。見てみな。

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

ステップ 4 - 基本を学ぶ

推定生時間 -25 分

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

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

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

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

ステップ 5 - 射影編集のヒントとコツ

推定生時間 -25 分

先に進む前に、MPS の最も特徴的な機能 - 射影エディター - を知っておく必要があります。ビデオをチェックする(英語)では、従来のテキストエディターと MPS 射影エディターの違いをすべて説明し、このアプローチの多数の利点について説明します。

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

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

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

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

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

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

ステップ 6 - 言語設計者の観点からの 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 フェーズが開始し、モデル内のすべてのノードをそれらのテキスト表現に変換し、結果のテキストソースファイルをディスクに保存します。

ステップ 7 - 図形チュートリアル

所要時間 - 2 時間

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

Tut1.png
Tut2.png

ステップ 8 - 計算機のチュートリアル

所要時間 - 8 時間

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

JavaScript での電卓のチュートリアル

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

ステップ 9 - 依存関係とインポートされた言語の管理

所要時間 - 30 分

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

ステップ 10 - Garage プロジェクトのチュートリアル

所要時間 - 5 時間

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

質問がありますか?

新しいテクノロジーを学ぶのと同じように、サポートが必要な質問があるかもしれません。心配しないでください。あなたの背中を持っています ! 質問への回答を得るために利用できるいくつかのオプションがあります。

進行状況を確認する

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

はしごを上がる

スキル獲得の Dreyfus モデル(英語)の次のステージは有能です。その段階に達すると、具体的なガイドラインや監督なしで自分で作業できるようになります。しかしこれが起こるためには、MPS に関する様々な問題を解決するためにより多くの時間を費やす必要があります。実装する言語のアイデアがすでにある場合は、先に進んでください。そうでなければ、役に立つ小さな言語を考え出すようにしてください。1 つ以上の MPS サンプルを再実装してみて、どれほど厳密に得られたかを確認することもできます。あるいは、出発点としてサンプルを選択して先に進めてください - 言語機能の追加、ジェネレーターの実装、型システム規則の追加、編集経験の磨きなど - あなたにとって正しい挑戦のように感じるものは何でも。

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

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

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

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

    • 型システム規則の定義

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

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

    • その他たくさんの

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

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

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

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

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

  7. スタンドアロンの 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 Language Workbench:VolumeI および VolumeII の本を執筆しました。これらは、電子的にもペーパーバックとしても購入できます。本は MPS の古いバージョンをカバーしていますが、それらの内容のほとんどはまだ関連しています。ここで入手してください。

MPS-Book-Cover-Volume1-small.png
cover-Volume-2-v3-thumbnail-website1-216x300.png

学術論文

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

クックブック

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

ユーザーガイド

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

    実証済みの機能 - 言語拡張、埋め込み言語、制約、型システム(推論規則)、データフロー、ジェネレーター。

  • 数学 - 複雑な数値、行列、区間、合計、積、その他の一般的な数学演算を自然な方法で入力できるように、Java の派手に見える数学言語拡張を提供します。

    実証済みの機能 - 言語拡張、ベクトルおよび行列表記、スコープ、重要なランタイムソリューション、重要なコードジェネレーター。

スタンドアロン言語

  • 言語パターン - MPS の共通言語パターンの実装を示すサンプル言語のセット。初心者が典型的な言語構成要素の具体的な実装を単独で見るのに役立ちます。このサンプルプロジェクトは徐々に新しいパターンで更新されています。

    実証済みの機能 - スコープ、高度な編集、コンテナーコンポーネント、カスタマイズされたプレゼンテーション、宣言参照、dot_expression、流暢な編集トリック、エディターコンポーネントのオーバーライド、シームレスなノード置換。

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

    実証済みの機能 - 言語の複数の表記法の定義。

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

    実証済みの機能 - 単一のモデルから Java コードと XML コードの両方を生成します。

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

    実証済みの機能 - カスタムアスペクト定義。

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

    実証済みの機能 - 生成計画。

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

    1. 原文の

    2. ダイアグラム

    この言語には XML ジェネレーターが付属しており、XML などの非命令型言語を生成する可能性を示しています。

    実証済みの機能 - 表形式の表記、グラフィカルな表記、表記の切り替え。

  • カスタマイズデバッガー - 言語が BaseLanguage に拡張も生成もされていない場合でも、Java デバッガーを使用して言語をフックする例。

    実証済みの機能 - デバッグ、デバッガー統合。

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

    実証済みの機能 - ダイアグラムのグラフィック表記を定義します。

  • DSL ブックのサンプル - ステートマシンテスト言語を含む、ステートマシン言語(シークレットコンパートメント言語)の例。

    実証済みの機能 - ランタイムソリューション、スコープ、テスト言語定義、テスト生成。

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

    実証済みの機能 - テスト生成、MPS テストランナーとの統合。

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

    実証済みの機能 - 言語定義の基本、ジェネレーター定義の基本。

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

    実証済みの機能 - 言語移行の定義、移行テスト。

  • ラムダ計算 - 射影エディターと Java への生成を伴う、ラムダ計算をシミュレートする言語

    実証済みの機能 - 関数型言語の定義、ランタイムソリューション、スコープ、重要な型システムの定義。

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

    実証済みの機能 - 高級言語(日付、期間、金額、通貨)の定義、複雑なランタイムソリューション、スコープ、アクセサーリモデル、代替メニュー、サイドトランスフォームメニュー、ノードファクトリ、ジェネレーター。

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

    実証済みの機能 - 型システム定義、型システムデバッグ。

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

    実証済みの機能 - 固定形式の言語定義、Java および XML の生成。

  • 高水準言語 - 他の上に構築する際に言語定義言語のカスタムセットを定義する例。言語の構造とエディターを体系化する独自の方法を定義する方法と、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 - JetBrains MPS せっかちなオンラインコース(英語)で使用される言語化学元素、複合、方程式を記述し、それらの妥当性をチェックすることができます。

    実証済みの機能 - 定義 - 参照、重要なエディターレイアウト(配置、下付き文字フォント)、カスタムスイングコンポーネント、チェックルール。

  • シェイプ - 入門図形チュートリアルの一部として作成された言語。

    実証済みの機能 - 言語定義、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...