Tag Archive for 'AOP'

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

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

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

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

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

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

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

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

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

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

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

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

onEnterFrame.ru #5

Первый посленовогодний выпуск подкаста. На этот раз темы следующие:

  • Новый год, новые перспективы
  • Немного о кризисе, банкротстве Circuit City и Обаме
  • Как 20го числа умер CS4
  • Фреймворк, Parsley, Spring Actionscript (ex-Prana), IoC, DI, MVC, AOP и другие страшные слова
  • AsUnit и асинхронные тесты
  • TheFWA и ecodazoo.com
  • TheFWA и книжка
  • TheFWA и valyard.ru
  • С кем дальше записывать подкасты?

Ссылки по теме:

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Скачать

Aspect Oriented Programming

Изучая документацию по Spring, наткнулся на реализацию концепции AOP. Об этой парадигме мне когда-то что-то рассказывали, но я особо этому значению не придал. Сейчас же, прочитав достаточно информации, я немножко вдохновился и стал смотреть что по этому поводу предлагает ActionScript.

А оказалось, что ничего.

An issue right now is that you can’t let an object implement an interface or a set of interfaces at runtime.

ActionScript would really benefit from having a dynamic proxy mechanism, similar to the Proxy class in Java: http://java.sun.com/javase/6/docs/api/java/lang/reflect/Proxy.html

This could be used for several interesting and powerful new concepts:
- adding new behavior to an object by proxying it with extra interfaces
- mock objects for unit testing
- Aspect Oriented Programming
- …

Если в ActionScript 2 и тем более в 1 мы могли переопределять методы объектов, сохраняя старые, то здесь такой трюк уже не проходит. А жаль.