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

Множественное наследование в ActionScript. Язык Traits в RASE Beta 10

Adobe Flash
image

Пару дней назад мы опубликовали новую, десятую по счету бету нашей новой IDE для флэшеров. Эта статья рассказывает о языковом расширении Traits.

Action Script — современный OOP язык. На сегодняшний момент толкование OOP предполагает, что множественное наследование — это порочная практика. Средствами языка реализовать множественное наследование возможно только через интерфейсы. Это правильно и хорошо — спорить тут бессмыслено.

Но ведь хочется! Часто, из-за отсутствия возможности добавить функционал через наследование, нам, разработчикам, приходится городить уж слишком много огородов.
Читать дальше →
Total votes 39: ↑37 and ↓2 +35
Views1.6K
Comments 30

Языковые расширения RASE. Перегрузка операторов в ActionScript

Adobe Flash
image

Очередная бета Realaxy ActionScript Editor содержит несколько новых языковых расширений. Мы уже рассказали о языке Traits, позволяющем использовать преимущества множественного наследования, теперь же обратимся к другой, не менее важной возможности — перегрузке и создании операторов.
Читать дальше →
Total votes 28: ↑24 and ↓4 +20
Views1.1K
Comments 10

Создание языковых расширений в 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

Хорошие новости! Встречаем язык для коллекций ActionScript

Adobe Flash
Кто работает много с массивами и векторами (а это думаю почти все разработчики), порадуются новым возможностям: в Realaxy ActionScript Editor появилась поддержка Collections Language.

image

В свете того, что в будущем RASE научится выгонять AS3 в js/cpp/php/android/ios, этот языковой сахар полюбят и другие девелоперы.

Итак, язык для коллекций.

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

В этой статье коротко опишем несколько типичных примеров работы.
Читать дальше →
Total votes 48: ↑39 and ↓9 +30
Views1.1K
Comments 33

Язык для работы с ActionScript событиями

Adobe Flash
image

В текущем билде RASE мы зарелизили язык для коллекций. Сейчас трудимся над языком, который точно взорвет мозг флэш-разработчиков. Можно будет создавать специальные методы с аннотацией «Flow», код в котором будет выполняться ассинхронно. То есть код будет «останавливаться» — ждать события (или группы событий) и выполняться дальше, когда событие произойдет.



Также можно прыгать по точкам в коде — state, jump. И можно дождаться выполнения других flow-методов — chain.

В общем полноценный язык для работы Finite State Machine.
Total votes 33: ↑29 and ↓4 +25
Views857
Comments 9

Демонстрация работы Realaxy Editor Events Flow Language

Adobe Flash


В следующей бете Realaxy Editor появится специальный язык, который создан для создания конечных автоматов. Вы можете описывать «траектории» работы приложения.
Создав специальный метод с аннотацией flow, код будет «останавливаться» и дожидаться события или группы событий. Этот скринкаст демонстрирует подписку на события через конструкцию catch в «бесконечном» цикле. Второй пример описывает составное событие нажатия клавиатуры и мышки, где используются конструкции and и not.
Так же язык имеет возможности для декларации специальных меток state и условных переходов — jump. Есть механизм связывания разных flow методов через конструкцию chain (дождаться результата другого flow) Язык очень полезен для создания карт событий в играх и интерфейсах.
То что сейчас описывается кучей логически не связанных обработчиков событий, теперь можно вынести в один метод, и включать и выключать подписку на события просто войдя или выйдя из точки исполнения.

Код игры «кто хочет стать миллионером» на Events Flow:
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Views857
Comments 10

Realaxy приглашает флэш-разработчиков на конференцию в Черногорию

Self Promo
image

21-23 октября в г. Петровац на Мору (Черногория) мы проводим конференцию флэш-разработчиков, посвященную выходу в свет Realaxy ActionScript Editor.

В программе:
  • семинары, доклады и мастер-классы,
  • раздача бесплатных именных лицензий всем зарегистрировавшимся,
  • встречи с профессионалами из разных стран и регионов,
  • отдых на пляже (в Черногории сейчас теплое море и бархатный сезон), погода ожидается примерно такая

Россиянам, украинцам и белорусам для посещения Черногории не нужна виза — достаточно просто собрать вещи и поехать. Стоимость перелета туда-обратно из Москвы составляет около 350 евро, a из большинства европейских столиц — 160 евро (ближайшие аэропорты — Тиват и Подгорица). Одноместный номер в трехзвездочном отеле — от 25 евро.

Для связи: blog.realaxy.com, info@realaxy.com, twitter: @RealaxyEditor @potapenko

Регистрационная форма здесь.
Total votes 21: ↑18 and ↓3 +15
Views516
Comments 15

Видео: Введение в MPS

Website development
В гостях у DevClub побывал Михаил Мухин из компании JetBrains, который рассказал о системе MPS (Meta-Programming System).

На хабре уже была парочка статей про MPS, а теперь это можно увидеть более наглядно на видео с живой демонстрацией кода: www.devclub.eu/2011/12/02/mihail-muhin-mps-intro

Под катом два видео об MPS
Total votes 16: ↑15 and ↓1 +14
Views2.5K
Comments 3

Дайджест новостей JetBrains с 26-го июля по 5 августа

JetBrains
После того как 26-го июля вышел долгожданный мажорный релиз ReSharper 7, произошел целый ряд событий, о которых мы не можем не упомянуть хотя бы в формате дайджеста.

Итак, перечислим важнейшие из них в обратном хронологическом порядке:
К остальным новостям
Total votes 20: ↑19 and ↓1 +18
Views4.8K
Comments 8

Аутсорсинг печатных процессов

«NBZ Computers»
Практика аутсорсинга применяется во многих сферах информационных технологий. Мы привыкли пользоваться предоставляемыми каналами связи, многие компании арендуют сервера или виртуальные платформы у хостинг-провайдеров, так почему же не передать на аутсорсинг и печать?

На первый взгляд кажется, что печать – это очень простая процедура. Казалось бы, краситель наносится на бумагу – достаточно посчитать стоимость бумаги и стоимость чернил, и получится стоимость отпечатка. Однако, как отмечает в своих материалах компания HP, «до 90% расходов на печать являются скрытыми». Понятно, что показатель в 90% сильно завышен, но сама идея действительно интересна – а что если оценить косвенные расходы, связанные с печатью?

Читать дальше →
Total votes 11: ↑5 and ↓6 -1
Views5.9K
Comments 16

Он-лайн трансляция с Дня открытых дверей JetBrains

JetBrains


Привет, Хабр!

Мы очень обрадовались тому, что все приглашения на наш День открытых дверей разошлись за считанные часы. Но после закрытия регистрации мы получили довольно много писем с просьбой сделать запись докладов или даже поднять он-лайн трансляцию. И вот пятничный подарок для тех, кто сегодня не смог попасть к нам или из-за огромного количества людей не может видеть презентацию :)

www.ustream.tv/channel/lektorium

Также мы обещаем выложить записи с докладов на Хабр, но чуточку позже. За новостями вы можете следить через твиттер по хештегу #jbopen.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views8.3K
Comments 14

Печать в компании: копейки, которые берегут миллионы

ГК ЛАНИТSystem administrationIT Infrastructure
Один из клиентов обратился к нам в «Онланту» за услугой сервиса печати, получил прайс и на некоторое время удалился. Чуть позже он вернулся и заявил, что посчитал потенциальные затраты, и у него получилось дешевле. То есть он зашел на Яндекс.Маркет, взял цены на офисные принтеры, выбрал тот, который ему понравился. Потом нашел срок службы принтера — 5 лет, или 60 месяцев. Разделил цену на месяцы — получил затраты на печать в месяц. Затраты, разумеется, его устроили, а наш прайс — не очень. Бывало с вами такое?



При этом клиент не учел ни затраты на обслуживание принтера, ни расходы на картриджи, ни даже стоимость бумаги. То есть у клиента максимально поверхностное представление о том, из чего состоит цена печати одной страницы в его компании. Ожидания по цене крайне заниженные. Да и вообще — разве печать может чего-то стоить компании в век победившего электронного документооборота?!

Ну, во-первых, не победившего — и вы в этом убедитесь. Во-вторых, может. Еще как может. Давайте посчитаем.
Читать дальше →
Total votes 42: ↑35 and ↓7 +28
Views29.9K
Comments 87

JetBrains MPS — IDE для разработки проблемно-ориентированных языков программирования

ProgrammingJava
Sandbox

Введение


MPS — это среда разработки языков программирования на платформе Intellij Idea. Она предоставляет возможность моделировать языки программирования, описывать структуры, сосредотачиваясь конкретно на дизайне и бизнес-логике, не отвлекаясь на парсеры, лексеры и различные сторонние фичи языка. Что нужно сразу обозначить: язык, который разрабатывается с помощью MPS, не компилируется в рабочую программу. Чаще всего он генерируется в модели других языков либо в текстовую форму.

Почему я решил написать этот пост? Я считаю, что это очень недооцененная возможность, а недооценена она потому что порог вхождения очень высок, плюс это один из самых непопулярных продуктов JetBrains.

Документация очень подробная, описывает все возможности, но если нет осознания «что я делаю и зачем мне это делать», то она вряд ли будет полезна. Также есть серия уроков от JetBrains на YouTube, но опять же, я более-менее начал понимать, что происходит, только после двух просмотров всей серии и досканального изучения предлагаемых sample проектов.

Я планирую написать серию постов об этой замечательной среде, чтобы по окончанию прочтения у энтузиастов оставалось как можно меньше вопросов «как сделать эту штуку», и как можно больше понимания структуры, чтобы можно было эффективно пользоваться документацией. Познавать MPS мы будем во время создания языка для описания закономерностей погоды. Почему, собственно говоря, и нет?
Читать дальше →
Total votes 26: ↑25 and ↓1 +24
Views12.3K
Comments 28

JetBrains MPS для интересующихся #1

ProgrammingJava
Tutorial

Введение


Спасибо всем за критику в комменте под первым постом, где я хотел попробовать написать про MPS, не затрагивая важные темы, чтобы можно было потом более качественно начать писать по порядку.


Зачем нам нужен язык Weather?


В комментариях к 1 посту было следующее высказывание


С этой точки зрения, DSL — это как фреймворк, только с более удобным интерфейсом. Ясное дело, под один проект фреймворк делать никто не будет, за исключением совсем уж монструозных случаев. А сделать его под конкретную предметную область — почему бы и нет?..

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


Синтаксис


Язык Weather, который мы хотим реализовать, должен выполнять следующую задачу: мы должны уметь лаконично выражать условия (погода сегодня, например) и следствия (погода завтра, послезавтра...).
В языке Weather мы будем делать наши прогнозы отталкиваясь от 1 фактора: от температуры на сегодняшний день(массив объектов время + погодные условия).

Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Views5.9K
Comments 17

JetBrains MPS для интересующихся #2

ProgrammingJava
Tutorial

Йо-хо-хо!


В прошлом посте мы остановились на том, что мы умеем добавлять массив входных погодных данных, а точнее данные "Время + температура", слегка попробовали использовать Behavior и разобрались с концептами.


Пришло время делать что-то полезное, ведь пока все, что мы реализовали, можно было реализовать на любом другом языке, за исключением прикольного синтаксиса.


Первым делом, введем ограничения на время. Сейчас мы ограничим его, чтобы часы были в пределе 0-24, а минуты 0-60, иначе будет выдаваться ошибка компиляции.


Constraints


Constraints это аспект языка, который отвечает за валидность реализации концепта. В нашем случае нам нужно ограничить property hours и minutes, поэтому мы создаем Constraints аспект концепта Time.


image


Здесь мы видим 3 пункта, которые отвечают за структуру AST.


  • can be child: получаем на вход данные об узле, родительском узле, дочернем и все, что только можно и решаем, может ли реализация концепта в данном контексте быть дочерней или нет
  • can be parent: то же самое, что и с child, только проверка на возможность быть родительским узлом
  • can be ancestor: все то же самое, что с parent, но более вложенно: в данном случае мы можем идти как угодно выше по AST, дословно — может ли узел быть предком
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Views4.6K
Comments 0

JetBrains MPS для интересующихся #3

ProgrammingJava
Tutorial

Бинго-бонго и Джимбо-джамбо, дорогие друзья!


У меня на дачке не было света 2 дня, я практически иссох и впал в спячку, но я снова здесь! В этом посте мы начнем писать предсказания погоды и немного напишем кода, а не потыкаем мышкой! Ура! Наконец-то!


Какие прогнозы мы хотим делать


Очень простые! Пока прогнозировать будем только следующий день, а правила придумаем сами; а точнее, правил не будет. Мы просто будем выводить температуру на следующий день, абсолютно такую же, как и сегодня. Сделаем один прикольчик, демонстрирующий возможности projectional editor.


Концепты


В данном случае мы прибегнем к крутой фиче — мы создадим концепт, который будет содержать только ссылку на исходные данные, а данные мы будем выводить как график на своем Swing компоненте. О как умеем, хотя swing я жуть как не люблю.


image

Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views3.6K
Comments 2
1