Обзор языка Boo! – как средства организации DSL Вашего приложения

boo-logo-128_med

Одна из вещей, как известно, способная помочь вам стать лучше в качестве разработчика, заключается в изучении нового языка. Даже если Вы никогда не будете пользоваться этим языком в Вашей повседневной трудовой деятельности, он поможет Вам лучше понять языки, с которыми Вы работаете.

В последнее время меня так и тянет насесть на какой-нибудь новенький язык программирования, особенно что-нибудь на типа Ruby или Python, но в связи с моей привязанностью среде разработки (Visual Studio, неверно это не очень хорошо – зависеть от IDE ;)) и затруднительной ситуацией с разработкой на ней на динамических языках (надеюсь это временное затруднение) от них пока пришлось отказаться. В то же время меня интересуют такие области как метапрограммирование и реализация DSL (Domain-Specific Language == проблемно-ориентированный язык приложения), и в этой связи видится мне, что Boo является весьма интересным языком. К тому же Boo — язык CLR, что очень даже не плохо для изучения.

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

Что такое Boo?

Boo представляет собой open-source объектно-ориентированный статически типизированный язык программирования для CLR с Python’о-подобным синтаксисом, язык увидел свет в 2004 году из-под рук Rodrigo B. de Oliveira. В настоящее время последняя версия 0.8.2, но даже если нет еще версии 1.0, это действительно очень стабильной и зрелый язык, который можно использовать на производстве.

Основные концепции в Boo:

  1. Дать компилятору сделать большую часть работы, для того чтобы помочь языку выглядеть более динамическим с автоматическим объявлением переменных, выводом и приведением типов.
  2. В то же время он предоставляет возможности для выполнения статической компиляции, проверку ошибок во время компиляции.
  3. Boo также предоставляет функциональную составляющую в том, что функции могут использоваться в качестве возвращаемого значения, как аргументы, хранимые в переменных, а так же как объекты.
  4. Boo имеет первоклассные генераторы, это конструкций, способные производить более одного значения при использовании итерации цикла (“return a for a in apples if a.IsRipe”).
  5. Boo также поддерживает утиную типизацию (Duck Typing), которая позволяет отказаться от обеспечения безопасности статических типов и принимать любой объект, который просто имеет соответствующие методы и свойства, определяемые во время выполнения.
  6. Boo также имеет расширения методов и свойств (extension methods and extension properties).

Одним из наиболее интересных функций Boo является расширяемость процесса компиляции, которая позволяет управлять компиляцией и изменять или добавлять функции. Можно добавить подпрограмм для проверки конвенции кода, генерирования отчётов или преобразовывания кода. То, что Вы сможете сделать в C# с помощью тулзы посткомпиляции такой, как PostSharp и только ограниченный набор действий. В Boo Вы могли бы например автоматически преобразовать класс в одноэкземплярный (pattern Singleton), просто добавив атрибут следующим образом:

[singleton]
class MySingleton: pass

PostSharp просто не смог бы сделать этого, свойство экземпляра было бы обработано поздно. Это действительно открывает множество возможностей и Вы ограничиваетесь только Вашим пониманием внутренней функциональности компилятора и набора его возможностей.

В Boo пробелы имеют важное значение как в python, но есть возможность включить режим “Whitespace Agnostic”, позволяющий оканчивать выражение с помощью “end”, который избавит Вас от возможных проблем с пробелами.

Что нужно для начала работы с Boo?

Главным образом если Вы хотите узнать Boo, достаточно иметь последнюю версию Boo . В папке bin, Вы найдете файл “Booish.exe”, являющийся интерпретатором командной строки Boo, которая позволяет проиграться с синтаксисом языка.image

Для разработки нам необходима IDE, и следовательно у нас два варианта.

Большинство Boo разработчиков работают с SharpDevelop , и если Вы скачаете последнюю версию, в ней будет Boo полностью готовый к использованию. Эта IDE имеет преимущество, с точки зрения создания DSL, так как в ней легче добавить функции автозавершения кода и подсветки синтаксиса, в Visual Studio же потребуются написать лексер и парсер; в SharpDevelop можно сделать это с помощью XML-файла.

Но с другой стороны Visual Studio является зрелой IDE, и с BooLangStudio вы получите Boo интегрированный в Visual Studio. Люди жалуются, что проект является нестабильным и это лишь альфа выпуск, так же я встретился в нём с проблемами уникода (UTF8), которые пока не смог разрешить, но у меня пока нет весомых замечаний.

В настоящее время я буду пользоваться Visual Studio в силу привычки, но я могу изменить свой взгляд при продолжении этой статьи.

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

Продолжение следует…

Реклама

Стиляги

Ну, неужели! Неужели у нас научились снимать качественное, интересное, живое кино. Фильм пестрый, запоминающийся, оставляет после просмотра самые позитивные воспоминания.

Сюжетная линия выстроена вокруг Москвы 50-х и компании молодых людей, которые не хотели "быть как все" — стиляг и их главных врагов — комсомольцах.

Посмотреть советую всем. Фильм что ни на есть предновогодний!

Продолжительность 120 мин.; мюзикл-мелодрама от режиссёра Валерия Тодоровского.

Подробности здесь: http://www.stilyagifilm.ru/


Лоуренс Морони "Введение в Silverlight2"

image Ребята из команды Microsoft Россия подготовили нам новогодний подарок, и перевели книжку Лоуренса Морони «Введение в Silverlight2». Скачать её можно здесь.

Думаю стоит прочитать её, освежить свои знания по SL, тем более в следующем году предстоит с ним плотненько поработать.


Musthave: Windows Live Writer — в помощь блоггеру

Отличная уилита, позволяющая постить в блог «вживую», т.е. так как это делают WYSWYG редакторы, но с дополнительным преимуществом того, что Вы работаете с CSS’ами Вашего блога.

К примеру этот пост написан уже из него, и ИМХО это намного удобнее встроенного в WordPress редактора.

Иснтрумент очень удобен и абсолютно бесплатен. Дотсупен здесь.


Мартин Фаулер «Рефакторинг: улучшение существующего кода»

Рефакторинг: улучшение существующего кода

Оригинал книги:

«Refactoring: Improving the Design of Existing Code» by Martin Fowler датируется 2000 годом, но хотелось бы заметить, что книга ничуть не потеряла своей актуальности и по сей день.

Около нескольких месяцев хотел прочитать эту замечательную книгу, но почему-то всё не мог выделить время на это. Наконец это свершилось, прочитал буквально за день. Книга очень полезная, я бы даже занёс её в список обязательных к прочтению для любого разработчика программного обеспечения.

Автор выделяет и подробно рассматривает порядка 30 видов рефакторингов, а так же подробно описывает методологию проведения рефакторинга.

После прочтения невольно сел и поправил несколько мест в своём коде, которые «попахивали» описанным в книге «душком кода». Думаю буду делать это и впредь, чего и всем советую.


Sweet memories: «КуМИР для DOS»

КуМир

КуМир

На днях с замиранием сердца с коллегой вспомнали о тех далёких прекрасных временах, когда деревья были большие 😉 Привели эти воспоминания к огромному желанию окунуться в ту атмосферу, чему в помощь «КуМИР». О эти славные алгоритмы на русском языке, эти лабиринты, графики, вычисления и прочие детские удовольствия!

КуМир — это учебно-методический комплект на основе учебника А.Г.Кушниренко и др. «Основы информатики и вычислительной техники», а также методического пособия для учителей «Изучение основ информатики и вычислительной техники». Рекомендован Министерством образования Российской Федерации в качестве основного учебного материала по курсу информатики.

Слить можно здесь.

Пример цикла for на этом языке КуМир Аналог в C нотации
нц для i от 100 до 1 шаг -2
а[i]:=a[i-1]
кц
for (int i = 0; i >= 1; i—)
{
a[i] = a[i — 1];
}
Сама IDE )

Сама IDE )

Кстати, проект не умер, а продолжает развиваться:

«В настоящее время имеется разрабатываемая в НИИСИ РАН свободно распространяемая система КуМир, использующая библиотеку Qt и работающая в операционных системах GNU/Linux и Windows. »

я даже слил последнюю версию под win32.

Ожидал много худшего от новой версии, но проект не испорчен, даже наоборот не упадёт в глазах юных пользователей.


Отличная визуализация шаблона MVC