MPS 2019.2ヘルプ

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

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

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

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

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

ステップ 1 - なぜMPS

所要時間 - 50分

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

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

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

ステップ 2 - MPSプロジェクションエディター

所要時間 - 30分

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

MPSの探索にさらに時間をかけるかどうか、まだ躊躇している場合は、次の資料をチェックしてください。

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

  • また、MPSで成功した方法を説明した文書を少し遅くして読むこともできます。MPSの周囲に素晴らしいものを構築することに関して独自のアイデアにあなたを刺激するかもしれないいくつかのケーススタディを集めました。

ステップ 3 - MPSをインストールして、基礎を学ぶ

所要時間 - 45分

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

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

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

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

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

所要時間 - 45分

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

エディターを設定する

皆違います。MPSに付属のデフォルト設定があなたの習慣に合わない場合、いつでも環境設定(MacOs、Cmd + ,を押す)または設定(Windows、Control + Shift + Spaceを押す、またはメニューファイル->設定に行く)で変更することができます。変更する可能性が最も高い設定の1つは、エディター->一般セクションのフォントサイズです。

EditorConfig

安全にシートベルトを着用してください

キーボードショートカットを知っていれば、優れた開発者は素晴らしい開発者に変わります。MPSを学ぶと、MPSの便利な機能を引き出すさまざまなキーの組み合わせを内部化します。ただし、Control/Cmd + Zという、最初から覚えておくべき重要な組み合わせが1つあります。もう一度 - Control/Cmd + Z。それが元に戻すアクションです。故意にまたは誤って何か悪いことをして、機能的なコードに戻りたいと思うときはいつでも、Control/Cmd + Zに目を向けてください。

ちょっとした乗車

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

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

Robot open1

次のビデオはMPS入門オンライントレーニング(英語)コースから借用しました。この教育用スクリーンキャスト(英語)はMPSを使い始めるのに役立ちます。見てみな。
ビデオが好きで、MPSの学習に真剣に取り組んでいるなら、MPS入門オンライントレーニング(英語)への登録を検討してください。それはあなたに多数の実地演習を通してあなたに徹底的な指導を与えるでしょう、ライブトレーナーとあなたの進歩と質問について話し合うことができるでしょう。

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

所要時間 - 30分

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

  • 良い - MPSエディターでのプログラミングの1週間足らずで、人々は通常テキストベースのIDEで以前経験したコーディングの全速に戻ります

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

ステップ 6 - 言語設計者の観点からのMPS

所要時間 - 40分

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

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

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

  • 制約 - 構造で定義されている規則を超えて、ノード間の関係とプロパティーの許容値を制限します。制約は通常次のように定義します。

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

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

    • プロパティーの許容値

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

  • 振る舞い - OOPのクラスがメソッドを保持するのと同じように、概念はノード上で多相的に呼び出すことができるメソッドと静的メソッドを定義することができます。ノードは、このようにその性質と関係と一緒に行動を運びます。

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

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

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

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

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

  • 生成プログラム - 1つ以上の言語で記述されたモデルは、最終的には、Javaなどの一部のターゲット汎用言語およびプラットフォームの実行可能コードに変換されます。その過程で、モデルは徐々に変換され、最終的なレベルに達するまで概念が繰り返し抽象度の低い概念から置き換えられます。概念を変換するための規則とそれらの正しい順序付けは生成プログラムの側面で定義されています。

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

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

所要時間 - 2時間

これはすぐに独自の言語を習得する機会です。MPSエントリーレベルの図形チュートリアルをチェックして、プログラマー以外の人がグラフィカルな図形のシーンを構築できるような言語を構築してください。

Tut1

Tut2

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

所要時間 - 8時間

MPSで言語デザインについてより多くの詳細を見つけることに興味があるにちがいありませんか?すべての基本的な情報とある程度の経験を与えてくれたため、入門チュートリアルはあなたを深く掘り下げてサンプル言語をゼロから完全に構築する良い立場にあなたを残すべきでした。計算機のチュートリアルは言語創造のプロセスを通してあなたを案内します。空のプロジェクトから始めて、Java Swingベースのビジュアルアプリケーションを構築するための言語に行き着きます。試してみて楽しみましょう。

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

MPSはJavaの生成に限定されないという実例として、計算を保持するHTMLページとJavaScriptプログラムを生成する同様の計算機サンプルプロジェクト電卓JS(英語)を用意しました。GitHubで確認でき(英語)ます。

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

所要時間 - 30分

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

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

所要時間 - 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 Language Workbench:Volume IとVolume IIの本を書きました。これらは電子的にもペーパーバックとしても購入できます。ここで入手してください。

MPS Book Cover Volume1 small(英語)
cover Volume 2 v3 thumbnail website1 216x300(英語)

学術論文

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

クックブック

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

ユーザー・ガイド

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

スクリーンキャスト

MPSチームはMPSの使用と言語設計の多くの側面を網羅したスクリーンキャストの大規模なコレクションを作成しました。それらをすべてMPSスクリーンキャストページでまたはJetBrains TVのMPSチャンネル(英語)で直接うまく分類されてチェックアウトすることができます。

ガイド付きトレーニング

MPSチームは実践的なトレーニングを提供します。詳細をチェックしてください。

一般的なドキュメント

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

その他のサンプルプロジェクト

MPSには、言語開発の理解を深めるために一緒にプレイできるサンプルプロジェクトがいくつか付属しています。以下にリストされているようにおそらく順序で試してみることをお勧めします。彼らが何をしているのか、それらがどのように実装されているのか調べましょう。彼らはあなたに重要な教訓を教えるかもしれません。特定の機能がどのように実装されているのかわからない場合もあります。たぶん、以下の演習のうちの1つで答えを見つけるでしょう、、サンプルを再び訪れることができ、事はただクリックするでしょう。

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

言語拡張:

  • SampleJavaExtensions - ステートメント、金リテラルデシジョンテーブル定数定義を除き 、ループのための並列処理など、便利で小さなJavaの機能強化のコレクション。このサンプルでは、既存の汎用言語をカスタム構文で拡張する方法を説明します。個々の拡張機能を紹介する短いスクリーンキャストを見る(英語)も好きかもしれません。

  • 複合 - 複素数を扱うためのJava拡張を定義する

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

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

スタンドアロン言語

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

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

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

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

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

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

    2. ダイアグラム

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

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

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

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

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

  • マイグレーション - smodel APIとTransformStatementの両方を使用して相互接続された2つの言語を移行するための移行スクリプトの簡単な例。

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

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

  • - 型システム型システムトレースツールで遊ぶことを可能にするために単純化された表現言語。この言語は、最小限のエディターサポートで、はっきりと構造化された型システム規則を使用して、MPSが型を計算する方法の中核を学ぶのに役立つことができる裸骨式の言語を提供します。型システムのデバッグ のドキュメントを参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

  • xmlPersistence - 新しいOpen APIを使用してカスタム永続化を実装する簡単な例。プラグインには3つの解決策(ビルドスクリプト、永続化実装、およびプラグイン記述子)が含まれています。カスタム永続化実装はXML文書をロード/保存します。詳細はカスタム持続クックブックを参照してください。

チュートリアルのサンプル:

最終更新日: 2019年8月30日

関連ページ:

よくある質問 (FAQ)

DSL、LOP、プログラミング、DSLとは何ですか? 「本物の」プログラミング言語とどう違うのですか。DSLの利点は何ですか?なぜ気にする必要がありますか?、DSLと通常のコードはどのように連携していますか?、言語指向プログラミングとは、なぜ言語を拡張したいのですか?ライブラリーは十分ではないですか...

基本的な考え方

この章では、MPSの基本的な概念(ノード、概念、および言語)について説明します。これらはMPSがどのように機能するかを正しく理解するための鍵です。それらはすべて他のものと組み合わされたときに意味をなさないため、それらについてすべて一緒に話さなければなりません。このセクションでは、各要素の本質について...

用語集

MPS用語集BaseLanguageJava 6の投影クローン(Java 7および8のオプションの拡張子を持つ)。これは、Java仕様に準拠し、Java 6と1:1の互換性があります。さらに、MPSは、日付、コレクション、クロージャなど、BaseLanguageに対するいくつかの便利な拡張機能を提供...

図形 - MPS入門チュートリアル

MPSに不慣れですぐにそれを試してみたいなら、これはあなたのための正しいチュートリアルです。2時間以内に、新しい言語とその言語を使用する機能コードを入手できます。このチュートリアルでは、最初から始め、安全で便利な道を歩むことで、新しい言語のコア要素を設計します。すぐにフィニッシュラインに到達するため...

依存関係を正しくする

目的、便利なキーボードショートカット、ソリューション、ソリューションモデル、プロジェクトへの外部Javaクラスとjarの追加 - ランタイムソリューション、言語、言語モデル/側面、生成プログラム、目的:モジュールとモデルは通常、さまざまなタイプの依存関係のネットワークによって相互接続されています。M...

共通言語パターン

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