Intro to MPS

11
Введение в MPS Михаил Мухин JetBrains Старший разработчик, MPS [email protected]

description

 

Transcript of Intro to MPS

Page 1: Intro to MPS

Введение в MPS

Михаил МухинJetBrains

Старший разработчик, [email protected]

Page 2: Intro to MPS

LOP, или что плохо в существующем

подходе• Универсальные языки недостаточно

выразительны

Проблема – мы ограничены синтаксисом языка

Page 3: Intro to MPS

«Старый» подход к LOP

• Лексический анализатор

• Парсер (абстрактный синтаксис) – «как выглядит синтаксическое дерево?»

• Компилятор (семантика) – «а что это AST значит?»

load aload bcmp…

Page 4: Intro to MPS

Проблемы, которые мы решили

• Сложно «смешивать» языки (2 языка внутри одного выражения) - нет никаких гарантий, что удастся корректно распарсить

A: “String with {value}”B: “String with ${anotherValue}”A+B: “String with ${problemValue}”

• Отсутствие инструментария o editor o code completion o intentions o refactoringso ...

Page 5: Intro to MPS

AST (Abstract Syntax Tree)

editor

intentionscode

transformations

tools

typesystem generator

Подход MPS

Page 6: Intro to MPS

MPS• Быстрая разработка языков (а будет еще

быстрее!)• Неограниченное смешивание языков (нет

парсера)• Автоматический тулинг – editor, code

completion, refactorings• Лаконичное описание системы типов• Шаблонная кодогенерация• DSLи для создания тулов

Page 7: Intro to MPS

Языки MPS• Closures• Collections• Dates• Checked dots• Math• Tuples• Regexp

ClosuresCollectionsDatesChecked dotsMathTuplesRegexp

Page 8: Intro to MPS

Язык “Lazy”• Язык для

«ленивых» вычислений

• Интегрируется с Java

• Наш язык не будет работать в некоторых случаях (но мы знаем как это поправить!)

Page 9: Intro to MPS

Язык “Lazy”

AST тип lazy<Type>

EditorПредставление:

lazy < Type >

Generatorlazy<T> x;x = 1+1;print(x);

Typesystemlazy<T> :<: Tlazy<T> :>: T

Page 10: Intro to MPS

Demo• Будет 2 этапа

o Structure + editor – после этого можно писать на языке

o Generator – можно «скомпилировать» нашу программу в рабочий код на Java

Page 11: Intro to MPS

Just give it a try!• MPS бесплатен• Полностью открытый исходный код• Распространяется под лицензией Apache 2.0

(бери и продавай!)