Check Levi9 best QA positions to Backbase team!
×Закрыть

Say Boo!

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Одним из самых больших достоинств платформы .NET стала ее «мультиязычность», которая позволяет с легкостью использовать код на разных языках, обеспечивая его прозрачную для пользователя «стыковку».

Потому, появление большого количества компиляторов для различных языков под платформу .NET является практически закономерным явлением. Подробно описать их все — задача очень сложная и непростая, поэтому я буду давать маленькие статьи «для затравки», а если язык будет интересен — то развивать тему.

Сегодня я хочу рассказать про один вдвойне удивительный язык, который объединяет в себе черты нескольких весьма непохожих языков, этот язык — boo (boo.codehaus.org).

Как написано на главной странице сайта, boo — объектно-ориентированный, статически типизированный язык для платформы .NET, с Python-подобным синтаксисом, нацеленный на расширяемость языка и компилятора.

Поскольку синтаксис boo очень похож на таковой в Python, то останавливаться особо на нем я не буду, и постараюсь описать в основном отличия boo от двух его «старших братьев» — Python и C#.
Хотя, для начала, стоит сказать несколько слов об установке.
Получить свежую версию дистрибутива можно по адресу boo.codehaus.org/Download.

Распаковав архив в любую папку найдите в дистрибутиве программу booish.exe, это — интерактивный интерпретатор boo.
Работа в нем ничем не отличается от работы в аналогичном интерпретаторе Python. В ответ на приглашение «>>>» вы вводите свои команды, которые интерпретируются и тут же выводится результат.
Для компиляции исходных текстов программ на boo используется компилятор booc.

Для начального знакомства с языком этого вполне достаточно, а одну великолепную особенность, значительно облегчающую работу с boo я приберегу на конец статьи :-).

По сути своей boo очень Python-похож. Поэтому для базового знакомства с его синтаксисом можно прочесть любой учебник по основам Python. Хотя следует заметить что boo — не совсем Python, различия хоть и не многочисленны, но они весьма и весьма существенны.

Почти все они описаны на следующей странице (boo.codehaus.org/Gotchas for Python Users), я приведу основные из них.

Boo использует принцип .NET сборок, а не модулей как Python. Это позволяет ему взаимодействовать с другими CLI-совместимыми языками и использовать библиотеку классов .NET. Для GUI-проектов в boo имеются биндинги для библиотек Windows.Forms и Gtk#.

Boo — использует статическую типизацию вместо Python-овского duck-typing. Указывать тип переменной непосредственно не нужно (хотя и можно), его определит компилятор на этапе трансляции (в отличии от Python в котором тип переменной определяется во время выполнения). Хотя использовать механизм duck-typing boo все-таки позволяет, для чего необходимо объявить переменную как принадлежащую типу duck.

print может вызываться и как оператор и как функция.

print "Hello"
print("Hi again")
В строках выполняется «подстановка» переменных.
a = 1
b = 2
print("a+b=${a+b}")
При импорте все содержимое добавляется в текущее пространство имен (аналогично C#).
import MyLibrary

print MyFunction() # аналогично MyLibrary.MyFunction()
Допускаются комментарии в С-стиле: // и /* */

Вместо таплов необходимо использовать С-подобные массивы фиксированной длины. Все хэши являются экземплярами класса Boo.Lang.Hash, который порождается от System.Collections.Hashtable, но добавляет Python-специфичные методы.

В функциях-членах класса не нужно всегда использовать self, для обращения к полям класса, и так же нет необходимости передавать self первым параметром в каждый метод класса. В boo использование self возможно, при неободимости и аналогично использованию this в C#.

Вместо __init()__ и __del()__ используются методы constructor() и destructor() соответсвенно.

Строки документации должны начинаться на том же уровне отступа что и документируемый объект.

Переменные командной строки передаются в скрипт как массив строк argv.

А также ряд других «.NET-специфичных особенностей».

Отдельно следует заметить что boo великолепно интегрирован в бесплатные среды разработки MonoDevelop (www.monodevelop.com) и SharpDeveloper (icsharpcode.com/...​penSource/SD/Default.aspx), что позволяет с легкостью использовать его как язык быстрого прототипирования и реализации небольших кросплатформенных проектов для платформ .NET и Mono, в том числе и с визуальным интерфейсом.

Из всех проектов реализованых на boo можно порекомендовать ознакомиться со следующими:

— Webness (boo-lang.org/...​bness-framework-tutorial) фреймворк (куда же без него) для быстрой разработки web-приложений
— Brail (www.ayende.com/projects/brail.aspx) — шаблонный движок для генерации HTML
— Piorun (piorun.sztorm.net) — Jabber клиент

И отдельной номинацией следует отметить конвертер из C# в boo и наоборот, который входит в поставку SharpDevelop-а. :-) На первых порах, при изучении языка — просто незаменимая вещь.

Вот в принципе для начала все что я хотел сказать. Если данная будет тема интересна, то на всех boo-специфичных особенностях можно остановиться подробней.

👍НравитсяПонравилось0
В избранноеВ избранном0
Подписаться на автора
LinkedIn

Похожие статьи




Підписуйтесь: iTunes | Google Podcast | YouTube


23 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

да вполне жив. «2.6 released 12/11/2009»

Все бы ничего, только ошибки есть досадные в интегрировании Boo в SharpDeveloper. Поэтому нормальной работы с ним не получается: ((

Boo кстати не скриптовый язык. Всё таки строгая типизация, virtual / override и все дела.

ну он может использоваться и зачастую используется как скриптовый. даже на оффсайте есть статья.

Boo кстати не скриптовый язык. Всё таки строгая типизация, virtual / override и все дела.

Ну раз так значит можно смело сносить написанное ранее и двигаться вперед вместе с новым языком. Благо обе его новые фичи того стоят.Никто так и не ответил на главный вопрос.А зачем мне это?

вам — не надо абсолютно!!! но многим кажется удобным подход со смешиванием языков.http://www.infoq.com/articles/...на скриптовых языках очень удобно выполнять тестирование, мактирование, прототипирование и т.д.

Никто так и не ответил на главный вопрос.А зачем мне это? Об этом кратко сказано в манифесте с офсайта, но, честно говоря, звучит неубедительно.

Если появился такой вопрос — оно вам скорее всего не надо.

А свете последних событий, — прорыв Google, — я имею ввиду, все говорит о том, что империя Microsoft пошатнётся.

Интересно, а много ли найдется программистов, которые будут саппортить после вас код, написанный на COBOL для.NET??? Вот и я о том, что для бизнеса.NET многоязычность в убыток. .NET — это продукт. J2EE — спецификация.т.е. нету Microsoft, нету и.NET. А если нету Sun, то есть Bea, IBM и другие.

все языки (соответсвующие CLI) интегрируются абсолютно прозрачно и без проблем.вот гады, а?: -) что ж за свинство такое, реализовывать бесплатный проект на любимом языке! я без проблем использовал в C# приложении код для работы с OpenID реализованный на Boo.

языки интегрируются нормально.библиотек опен-сорсных мало. потому как microsoft это дело не прельщает.к примеру, мы не могли найти достаточно распространенный для других платформ компонент. была пара кривых коммерческих и очень-очень кривой опен-сорсный. сначала пытались изменить опен-сорсный, но он был написан через... как бы это покультурнее выразиться... плохо был написан. в конце концов это стало одной из причин кардинального изменения архитектуры.А компонент был написан на C++.NET.Использовать хороший код не проблема, проблема менять имеющийся код, написанный на другом языке. И я об этом черным по-белому написал.

По boo я приводил ссылки, на сайте boo их (приложений) еще больше описано. IronPython вообще активно пордвигается майкрософтом в связи с SilverLight. Так что не надо троллить

Не знал, что все 3 чудесных программы, указанных Вами выше, написаны на boo.Ну раз так значит можно смело сносить написанное ранее и двигаться вперед вместе с новым языком. Благо обе его новые фичи того стоят.Никто так и не ответил на главный вопрос.А зачем мне это? Об этом кратко сказано в манифесте с офсайта, но, честно говоря, звучит неубедительно.

В.NET реально используются 2 языка — VB.NET и C# (все остальное — понты для приезжих). ИМХО, это больше головная боль чем преимущество.

все языки (соответсвующие CLI) интегрируются абсолютно прозрачно и без проблем.

Также немногочисленные на.NET open-source библиотеки реализованы на разных языках.

вот гады, а?: -) что ж за свинство такое, реализовывать бесплатный проект на любимом языке! я без проблем использовал в C# приложении код для работы с OpenID реализованный на Boo.И тесты на boo очень приятно писать за счет интеграции с NAnt/NUnit: -)

Очень интересно было бы узнать какие именно реально работающие приложения реализованы на «левых» языках типа Boo, IronPython

По boo я приводил ссылки, на сайте boo их (приложений) еще больше описано. IronPython вообще активно пордвигается майкрософтом в связи с SilverLight. Так что не надо троллить: -)

Собирать программу из обрывков кода на форумах это отличный подход =) Проблема определенно не в многоязыности.NET

Язык, быть может, интересный. Однако преимущества его использования хотя бы по сравнению с тем же Python не очевидны.А вообще говоря о мультиязычности в.NET, то фича эта довольно спорная.Мне больше нравится как подобная вещь реализована на платформе Java.Там тоже вроде есть мультиязычность, поскольку существует общий байт-код (прообраз MSIL) и несколько разнообразных языков для самой платформы. Но централизовано поддерживается лишь один — собственно Java.В.NET реально используются 2 языка — VB.NET и C# (все остальное — понты для приезжих). ИМХО, это больше головная боль чем преимущество.В моей бывшей команде из-за этого были частые неприятности. Часто находили на форумах подходящие фрагменты кода, а они оказывались на бейсике. Приходилось «переводить».Также немногочисленные на.NET open-source библиотеки реализованы на разных языках. Все бы ничего, но иногда приходилось править код (библиотеки не всегда были предназначены для расширения).Ну и еще конечно надоедало постоянно галочки убирать после того как МСДН показывал help для всез языков. Большинство туториалов написано для VB.NET, а не для C#, хотя последний у нас используется чаще.Была куча подобных мелких неудобств.Язык VB.NET сам по себе простой, но довольно мутный, там полно всяких подводных камней для C#-программистов. Причина появления на свет — такжже не совсем логична: он не является обратно совместимым с Visual Basic. Понятно, что MS хотела собрать сливки VB community, но таким образом в накладе остались разработчики на C#.Короче такая мультиязычность больше проблема, чем фича.Очень интересно было бы узнать какие именно реально работающие приложения реализованы на «левых» языках типа Boo, IronPython и других BrainFuck’ах.

> разве есть другой язык для.NET с optional duck typing, макросами и вдохновленный питоном (отступы, всё такое)? IronPython?

Denis, ну как же, разве есть другой язык для.NET с optional duck typing, макросами и вдохновленный питоном (отступы, всё такое)? Нету больше таких.

Очень всё как-бы замечательно. Но вопрос в том, зачем нужен ещё один язык? Для каких задач он «заточен»? По моему учить этот язык только потому что он есть, когда уже знаешь тот-же C# или Python, бессмысленное дело.

замечательная идея — делать ставки на различные ЯП: -) только порой ждать «победы» или «конца» приходится долго::)

+1 ставка на то, что Java победит

По-моему у Java больше шансов победить в борьбе с dot Net. Всё-таки OpenSource сейчас находит всё больше и больше сторонников.

дык Boo он не «против».NET выступает, он наоборот — «за». от если бы Jython до ума довлеи, тогда можно было бы думать...: -), а так за.NET выступают и Boo и IronPython: -)

По-моему у Java больше шансов победить в борьбе с dot Net. Всё-таки OpenSource сейчас находит всё больше и больше сторонников.

Бу это прикольный язычок, но ему не хватает консервативности Пайтона. В итоге он уже давно перенасыщен фичами и продолжает разрастаться дальше. К сожалению он совсем не проходит тест на соответствие Python Zen.

> нет необходимости передавать self первым параметром в каждый метод класса.Зря это они, определённо зря...> Вместо init () и del () init () и del ()

Подписаться на комментарии