Pull to refresh
  • by relevance
  • by date
  • by rating

Революция сейчас. jetBRAINS выпустила Meta Programming System

Lumber room
MPS вышел, господа! И странно, что по этому поводу в интернетах как-то все еще тихо. Ведь мы имеем дело с самой настоящей революцией в мире программостроения. Видимо, как в случае с переходом к OOP, переход к LOP будет медленным и болезненным.

Что за революция и что за LOP, спросите вы? Про Language Oriented Programming очень хорошо написано на английском здесь, про сам MPS здесь. А если коротко, то идея сама по себе проста — все давно знакомы с концепцией DSL (Domain-Specific Languages), ставим ее на новый уровень и получаем инструмент для создания новых, расширения существующих и с удобным кастомным IDE для разработки на этих языках.

Работая сразу с Абстрактным Синтаксическим Деревом (в которые любой текст программы все равно перегоняется при компиляции), а не с текстом, MPS позволяет создавать нетекстовые редакторы или использовать разного рода интересные контролы при редактировании текстовых программ. А главное, как часто вам хотелось бы расширить ваш любимый язык новыми конструкциями для ускорения разработки? Пришлось бы расширять грамматику языка, а что если бы кто-то другой придумал еще одно расширения и оба они бы ломали грамматику? MPS позволяет делать это изящно, но конечно сложновато, и нужно какое-то время чтобы научиться и понять что же ты толком делаешь. А взять, например, множество фреймворков и библиотек, которые по сути и являются этими DSL в узких областях. Почему бы их не переделать в расширение языка?

В общем, всем читать и качать MPS.

Каким боком тут я и почему я рад этому событию? Потому что замечательный человек, который показал мне какое-то время назад MPS, это Евгений Потапенко. И он уже долгое время пишет интересный редактор ActionScript 3 на этой системе, и раз за разом удивляет интересными скринкастами (описания спер у Ивана Дембицкого, надеюсь он не очень зол на меня за это):

Шаблоны для геттеров/сеттеров и филдов
www.potapenko.com/tmp/screencasts/templates.flv

Как делаются override method с автоматическим добавлением ключевого слова override и навигация
www.potapenko.com/tmp/screencasts/override.flv

Помощник по именованию методов/переменны/полей
www.potapenko.com/tmp/screencasts/naming.flv

Основная фича редактора — расширение языка — тут добавил ENUMS в AS
www.potapenko.com/tmp/screencasts/enums.flv

Ну редактор и что? А то, что детально изучив MPS, я прямо сейчас вижу, как в ActionScript легко добавляется AOP, как Spring-like IoC фреймворк с конфигурацией через XML файлы переделывается в простой DSL. Даже мои хелпер классы для создания видеоплееров и простых сайтов-визиток умещаются в DSL.

The future is now, господа!

Update! Из комментариев прилетела ссылка на русский текст (перевод предыдущей ссылки на английском, как я понимаю) про LOP.
http://www.rsdn.ru/article/philosophy/LOP.xml
Total votes 30: ↑26 and ↓4 +22
Views375
Comments 57

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

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

Читать дальше →
Total votes 31: ↑26 and ↓5 +21
Views3.5K
Comments 27

Примеры использования языкоориентированного программирования

Abnormal programming
Идея language oriented programming (LOP), состоит в том, что во время разработки программы, постоянно создаются миниязыки. Они могут как расширять основной язык разработки, так и быть отдельными языками. Лучшим языком для LOP является Common Lisp с его макросами, но здесь речь пойдёт не о нём. Примеры использования LOP с Common Lisp советую посмотреть в замечательной книге Peter Seibel Practical Common Lisp. Я считаю, что LOP один из самых простых и эффективных способов программирования. Мы описываем задачу и предметную область на самом подходящем для этого языке, а потом стараемся его реализовать.

Я разрабатываю браузерные игры на Ruby, поэтому часто использую LOP, как для расширения языка и встроенных DSL (Ruby позволяет делать это очень хорошо), так и для создания миниязыков связанных со сложной игровой механикой. В этой статье я рассмотрю простое расширение основного языка, встроенный мини-DSL и два не встроенных языка. Буду приводить примеры в близкой мне тематике, надеюсь они будут вполне понятны.

Читать дальше →
Total votes 35: ↑34 and ↓1 +33
Views1.6K
Comments 18

Об F# для архитекторов

.NET
Translation
Данная статья выросла из доклада, сделанного Крисом Смитом, одним из разработчиков F# на конференции DevLink. В целом она носит обзорный характер, однако несмотря на это, и на то, что усилиями shwars, mezastel и отчасти вашего покорного слуги F# уже не раз мелькал на Хабре, думаю что этот язык программирования не стал еще настолько очевиден всем, чтобы эта статья полностью потеряла смысл. Более того, здесь Крис пытается ответить на главный вопрос, который, думаю, мучает всех, кто хоть раз слышал о F#. Где же все-таки его применять? Получилось у него или нет – вам судить. Надеюсь после прочтения у вас хоть что-то относительно всего этого прояснится. Если так, я буду считать свою миссию перевыполненной :)
P.S. Первый перевод, поэтому не обессудьте за некоторые возможные баги.
image
Читать дальше
Total votes 66: ↑52 and ↓14 +38
Views7.5K
Comments 33

Создание языковых расширений в RASE. Часть 1. Язык Intentions

Adobe Flash

RealaxyСуществует укоренившееся мнение, что языковые расширения являются чем-то вроде фигур высшего пилотажа в программировании. Число публикаций на эту тему постоянно растет, однако доля русскоязычных среди них по понятным причинам ничтожна. Цель настоящего цикла статей — показать несложные и эффективные способы автоматизации обычных повседневных задач с помощью функционала для языковых расширений, доступного в средах разработки, основанных на JetBrains MPS.



В нашем случае такой средой будет Realaxy ActionScript Editor, бета-версию которого можно загрузить здесь. Впрочем, все изложенное ниже за несколькими несущественными частностями также применимо и для написания языковых расширений под Java в редакторе MPS.



С чего начать?
Total votes 31: ↑24 and ↓7 +17
Views943
Comments 5

Создание языковых расширений в RASE. Часть 2. Создаем выражение

Adobe Flash
imageНашей исходной точкой будет проект, получившийся при написании прошлой статьи.
Итак, мы имеем в своем распоряжении маленький модуль, написанный на AS (две строки обрамленные разными кавычками), язык myLanguages.escapedStrings, в котором есть пока только два скрипта для автоматизации, относящиеся к аспекту Intentions: один обрабатывает строку в одинарных кавычках, а другой — строку в двойных кавычках.

Скриншот

Пожалуй, реализацию этого кода нельзя назвать идеальной, но зато она является действующим примером простого и эффективного решения поставленной перед нами задачи: с помощью языка Intentions мы можем легко добавить новый функционал в редактор. Тот же самый путь можно реализовать чуть по другому, но именно Intentions — самый быстрый и простой.

С легкой печалью смотрим мы на нашу подопытную строку, сдобренную большим количеством слэшей. С одной стороны, задача решена, но с другой — как-то некрасиво, неправильно. Почему бы не предложить какой-нибудь несложный способ, при котором наша строка осталась бы прежней, но не вызывала бы ошибку «Incorrect string literal»? Нет ничего проще. Вспомним, что в некоторых других языках присутствует подобный функционал — например, в C# для таких имеется удобная конструкция @"… ", которая вполне подошла бы нам для портирования в качестве языкового расширения в ActionScript.
Читать дальше →
Total votes 32: ↑25 and ↓7 +18
Views558
Comments 3

Language Oriented Programming (LOP) в действии

Лаборатория тестированияProgrammingSystem Analysis and Design
Tutorial


В продолжении предыдущей публикации по теме Domain Driven Design, где Николай Гребнёв последовательно свёл тему проектирования при помощи DDD к необходимости использования языка предметной области, — в данной публикации будет обсуждаться практика проектирования и разработки как самих языков, так и программирование на них (опыт компании JetBrains).

Доклад smax Максима Мазина с прошлогодней конференции архитекторов ПО Application Developers Days

Видео доклада:




Скачать

ftp.linux.kiev.ua/pub/conference/peers/addconf/2011/1a1-language-oriented-programming-mazin.avs.avi

Презентация




docs.google.com/present/view?id=dccwwvbq_729dxjj82gc

Текстовка доклада (выполнена Belonesox)



Читать дальше →
Total votes 53: ↑45 and ↓8 +37
Views2.6K
Comments 42