24 июля 2009 в 09:24

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

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
Валентин Владимирович @valyard
карма
138,0
рейтинг 0,0
Самое читаемое

Комментарии (57)

  • +4
    Новость хорошая, но:

    >> Ведь мы имеем дело с самой настоящей революцией в мире программостроения
    >>… А главное, как часто вам хотелось бы расширить ваш любимый язык новыми конструкциями для ускорения разработки

    Советую посмотреть в сторону Лисп :) Там это есть с ~1959 г. Если быть ближе к реальности — взгляните на квазицитаты в Nemerle — один из самых простых и безболезненных для миграции языков с функциями метапрограммирования и изменения синтаксиса и AST-трансформеров.

    Конечно, MPS — это квинтэссенция техник метапрограммирования, да еще и, что называется, highly dedicated. Но в том виде, в котором это есть сейчас, скорее больше сложностей. Освоить MPS невероятно трудно, сделать дельный пример — еще труднее.

    И еще одна сложность осталась за бортом — проверка корректности. По этому параметру простейшая программа для MPS находится на одном уровне сложности с мощнейшими компиляторами, соответственно, проверка ее корректности будет очень трудным делом.
    • 0
      согласен что сложно, но чертовски интересно :)
      возможно идея на поверхности кажется старой (lisp etc), но у MPS убойный довод — редактор. современное программирование без нормального редактора, автокомплита и рефакторингов — просто красивая теория.
      • +2
        >>согласен что сложно, но чертовски интересно :)
        Так то оно так, но заказчика, как правило, не интересует, что именно мне интересно :) Возьмем к примеру, AspectJ или PostSharp или Loom.NET-- там все понятно: метапрограмма встраивается в код, и это легко ставится на поток в том же Hudsone или CruiseControl. В тоже самое время и автокомплит, и прочая доступны, потому что аспекты — это такой же код, как и все остальное.

        >> без нормального редактора, автокомплита и рефакторингов — просто красивая теория
        Ну как вам сказать. MSP — однозначно не «венец» IDE-строения. Тащить тулу, которая в 1GB памяти еле ворочается ради автокомплита и фенечек — не думаю, что это оправдано.

        В общем, интересно, но спорно, и имхо вряд ли потянет на революцию. MPS — далеко не enabling technology. Так же, как и Visual DSL и Oslo от M$
      • +1
        >>Даже мои хелпер классы для создания видеоплееров и простых сайтов-визиток умещаются в DSL.

        Тут главное не забывать, что MPS — это тоже инструмент, а не золотой молоток, поэтому overuse крайне нежелателен :)
      • +3
        Под Nemerle есть IDE на основе Visual Studio с поддержкой автокомплита.

        P.S. Это единственное приложение, которое держит меня на windows.
  • +2
    Присоединяюсь к предыдущему оратору. =)
    MPS прекрасен, но область его применения весьма ограничена по ряду причин.
    Проект, написаный на MPS будет очень тяжело передать другому специалисту. Собрать на другой платформе — вообще нереально.

    DSL — это хорошо, но пока инструменты типа MPS не получили массового распространения, internal DSL значительно более практичны. Имхо. =)
    • +1
      собрать на другой платформе? хм. думаю это устаревшая информация. посмотрите на свежий MPS за годы он сильно вырос.
      • +1
        Прошу прощения за криво выраженную мысль.

        Имелось в виду — для работы над MPS-проектом требуется собственно MPS, никакая другая среда разработки не подойдет. Это не смертельно, конечно, но в сумме с относительной сложностью и нетипичностью MPS представляет определенную проблему.
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            > Как, например, мне использовать расширение того же Actionscript

            — выгоняй в SWC и пользуй. Какой смысл куда-то гонять сырой код?
            Ну, уж если понадобится, выгони в голый AS и пользуй. Обратный переход скорее всего будет возможен, если сгенеренные расширениями куски кода не трогались.
            Ну и, мне кажется, что если присесть на правильный редактор, то на другой обратно пересаживаться просто сам не захочешь.
            • НЛО прилетело и опубликовало эту надпись здесь
          • +1
            И да, Костя, ты должен понимать, что ты задал такой вопрос: я всю жизнь программирую процедурно и без типизации. Смогу ли я, написав программу в OOP вернуть ее к процедурному стилю?
            — Разумеется можешь. Но нужно ли?
            • НЛО прилетело и опубликовало эту надпись здесь
              • +2
                Туговато тебя понимаю, но попробую ответить.

                Ты можешь выгнать свой AS проект с плюшками в чистый AS. Да, эта привязка есть.
                Хуже того, ты AS проект можешь выгнать в Java или под IPhone и т.п. — эти связки тоже есть.
                Из одного языка с плюшками выгоняешь в чистый язык или вообще в другие языки.
                Но компилишь проект с помошью SDK тех языков, в которые выгоняешь.

                Или тебе нужен тот же самый редактор в безоконном режиме и с командной строкой, чтобы сделать выгон в разные языки? Проблема что-ли?
                • НЛО прилетело и опубликовало эту надпись здесь
                  • +2
                    У нас планируется то, что заставит тебя забыть про мавен, как про страшный сон. Надеюсь так оно и получится.

                    Я не вижу проблем с выгоном из командной строки. Думаю, что всё это возможно.
                    Скажу больше: я бы выгонял в чистый AS при каждом сохранении документа, чтобы человек, который пишет код, мог в любой момент заглянуть в то, что получается.
                    Это и не накладно, и поможет жить при переходе на новый редактор, и лучше понимать что происходит.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • 0
                            build language переводится в ант скрипт
                            значит можно на нем написать скрипт, который будет компилить что тебе надо
                            например mps -> as code -> mxmlc
                            другой вопрос как компилить прямо без мпс?
                            а тогда вопрос нафига?
                            • 0
                              Ну нафига это понятно зачем, многие люди используют continous integration. Мы сами его тоже используем, но для удобства, конечно, нужна интеграция с maven/ant итп.
                • НЛО прилетело и опубликовало эту надпись здесь
                  • 0
                    Не забил я :)
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • 0
                        Понимаю твою озабоченность по поводу интеграции MPS в рабочий процесс и необходимости в генераторе из командной строки. В данный момент точно не могу ответить подождем ответа MPS-разработчиков.
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • 0
                            еще нет :(
                            • 0
                              А счас? :)
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • 0
                            скажем не актуальна. мы хотим собирать проект средствами MPS и писать для этого специальные языки.
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • 0
                                а нужно собирать? :)
                              • 0
                                мы хотим построить систему так, чтобы сборок всего приложения не было.
                                плагиная архитектура — она самая. проект — это плагин, а как там оно соберется — будет решать пользователь.
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • 0
                                    В нашем конкретном случае само ядро почти ничего из себя не представляет, практически только дает команду на загрузку конкретного плагина, который запрашивает необходимые ему ресурсы и плагины, и далее, по дереву зависимостей.
                                    Задача редактора в том, чтобы разработчик себе не морочил голову архитектурой, а просто юзал другие плагины как либы. А при компиляции всё это трансформируется в плагины.
                                    Грубо говоря — плагинный фреймворк, поддерживаемый редактором.

                                    Отсюда и некоторое невнимание к проблемам, на которые нарываются разработчики при использовании обычной архитектуры — мы эту проблему решаем в корне.
                                  • 0
                                    Ничего не мешает использовать расширения языков в ядре… Выгоняется то в «чисты as/mxml» расширения можно использовать где угодно.
                                    • НЛО прилетело и опубликовало эту надпись здесь
                          • 0
                            в общем запустить сейчас билд без MPS можно, но пока через одно место.
                            в MPS 1.1 обещают сделать все это красиво. так что чуть подождать, и все бедет.
          • +2
            Рантайм MPS-а можно запустить и без MPS. В MPS 1.1, который выйдет в октябре будет ant таска, позволяющая запускать генерацию оттуда. Поддержки maven-а у нас не планируется, но вобщем-то MPS опен сорс проект, и если есть желание, то можно сделать контрибьюшин.
            • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Почему будет сложно? Наш опыт показывает, что это не соответствует действительности. Изучить язык, соответствующий API проще, чем тот же самый API. Вы ведь не создаете новую парадигму программирования, а просто расширяете существующий язык новыми конструкциями.
      • 0
        Мой опыт показал обратное. Я сам не создаю новую парадигму, но мне надо изучить новую парадигму уже созданную Вами (MPS), плюс мне надо освоить новую среду разработки. Плюс, если я подбираю чей-то проект, а не создаю с нуля свой — мне нужно освоить его конструкции. Освоить новые конструкции языка (а также рефакторить их и код, на них написанный) — совсем не то же самое, что разбираться уже с существующим кодом с использованием хорошо знакомых конструкций.
  • +2
    Для тех кто не в теме, будет полезно это: www.rsdn.ru/article/philosophy/LOP.xml
    Автор, можешь добавить ссылку в свою статью.
  • +1
    Если есть у кого-нибудь инвайт на Хабр, то автор MPS сам бы ответил здесь на ваши вопросы. Слать инвайт на kostik@jetbrains.com
    • 0
      Еще актуально?
      • 0
        конечно
      • +1
        Спасибо за инвайт!
        • 0
          WELCOME!
          Щаз закидают вопросами (8
        • +1
          Не за что.
          Добро пожаловаться! :)
  • +2
    Да, на Хабре живет и царствует какой-то анонимный троллизм. Приходит какой-нибудь мудак и минусует. Не зря я сюда заглядываю не чаще чем раз в пол года, да и то, когда по делу просят высказаться.
    Мне конечно насрать с высокой колокольни на долбоебов, но вот ресурс от этого вменяемые люди стороной обходить начинают.
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Спасибо, интересно.
    Не хватает, правда, нормальных примеров — глядя на их туториал желание разобраться во всем этом поуменьшилось:
    www.jetbrains.com/mps/docs/tutorial.html
    • 0
      Туториал, конечно, большой, но он позволяет получить знания, которые будут достаточны для того, что создавать языки/расширения. Еще у нас есть user's guide: www.jetbrains.net/confluence/display/MPS/MPS+User's+Guide
      • 0
        У меня проблема, что юзер гайда не достаточно, вот я смотрю на реализацию base language, меня интересует что это за ячейка такая в эдиторе, я хочу посмотреть хэлп конкретно по этой ячейке, а вываливается страница про editor language. Не хватает доков.
        • 0
          Да, доки это проблема. Но во первых, ситуация существенно лучше, чем год назад. Над улучшением документации мы работаем.

          А во вторых, есть способы узнать, что и как работает и без доков. В этом случае можно было бы сделать вот что:
          1. Открыть декларацию концепта ячейки (в editor popup).
          2. Найти инстансы этого концепта.
          3. Увидев инстансы, понять как эта конструкция используется.
  • 0
    Ссылки на FLV файлы не работают.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.