Pull to refresh

Языко-ориентированное программирование в действии. Примеры реального кода на JetBrains MPS

Website development *
Вчера на хабре я опубликовал свою статью про языко-ориентированное программирование, в которой описал, какие проблемы существуют в этой области, и как их решает систем JetBrains MPS. Сегодня я хочу показать реальные примеры того, как выглядит код в MPS, с небольшими комментариями. Мы посмотрим на язык для работы с базами данных, на язык для создания веб интерфейса, на наш javascript. Фрагменты кода взяты из приложения баг-трекера с кодовым именем Charisma, написанного на MPS.



Вот фрагмент кода на нашем языке для работы с базами данных. Здесь определяется сущность User:



Как видно, у нас есть специальные типы полей. Простые поля, с примитивными значениями, поля ассоциации. У полей есть множество опций: поля можно сделать индексируемыми, хэшированными (для хранения пароля), указать дефолтное значения… Ассоциации бывают одно и двухстороннии, на некоторых из них висит обработчик события. Как видно, код понятен и краток. Конструкция, в которой все содержится является расширением Java-вского класса.

Когда в базе данных что-то меняется, часто хочется как-то отреагировать на это. Для этого у нас есть язык бизнес правил. Вот пример бизнес правила:



Это бизнес правило посылается письмо пользователям, когда поменялась ишью, с которой они как-то связаны. Мы указываем, при каком условие оно вызывается, и что оно делает при этом событии. Язык для бизнес правил, представляет собой DSL, в которой вставлена.

Давайте теперь посмотрим на то, как пишутся html шаблоны. Вот шаблон используемый при добавлении нового комментария:



Здесь используется html, расширенный конструкциями для более краткой записи частых вещей. Писать обычные теги, конечно, тоже можно, но более доменно-специфичная запись выглядит гораздо приятней.

С каждым шаблоном у нас ассциируется клиент-сайд и сервер сайд контроллеры, где обрабатываются события, которые генерирует шаблон. Вот пример контроллера:



Как видно, языки расширяют друг друга, один язык часто вставлен в другой. Фактически, языки используются таким же образом, каким мы обычно используем библиотеки в языках типа Java. Благодаря этому, мы можем сильно поднять уровень абстракции.

Более подробно о MPS можно узнать здесь: jetbrains.com/mps

И это еще не все. Мы ищем старшего разработчика в проект MPS, в этой роли вы сможете принять участие в развитии MPS, и в создании языков на нем. Подробности в вакансии в моем профиле.
Tags:
Hubs:
Total votes 31: ↑26 and ↓5 +21
Views 3.5K
Comments Comments 27