Что вы знаете о Boo?

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


Вступление

Вы можете задаться вопросом, зачем принимать во внимание не самые распространённые языки программирования, особенно в условиях современных белорусских реалий? Что ж, вопрос действительно обоснованный, потому что где уж пытаться угнаться за всеми сколь-нибудь распространёнными языками и технологиями, если даже выспаться получается редко. Однако, что касается распространённости, то ведь и Java, и C#, которых сейчас считают самыми лучшими для трудоустройства языками, тоже не всегда были распространёнными. В ИТ-индустрии фавориты могут покинуть Олимп очень быстро, и нужно внимательно следить за ситуацией, чтобы знать, куда подует в ближайшее время ветер. И смотреть на разные языки программирования, хотя бы и издали, полезно уже хотя бы потому, что завтра один из них может оказаться новым "королём бала".

Что касается языка программирования Boo, то, забегая вперёд, скажу, что у меня создалось впечатление, что называть его принципиально новым или, паче того, революционным, было бы совершенно неправильно. И, в общем-то, это даже и хорошо - по крайней мере, хорошо для самого этого языка. Что бы там ни говорили, программисты - народ довольно-таки консервативный, а потому всякие радикальные изменения в синтаксисе и в подходе к написанию программы приживаются не так хорошо, как языки, развивающие принципы, представленные сообществу разработчиков программного обеспечения ранее. Это действительно так: ведь успех таких языков, как Java и C#, в значительной степени объясняется тем, что они весьма схожи с языком, бывшим хорошо знакомым программистам на момент их появления (я, конечно же, имею в виду C++). Да и сам C++, кстати говоря, тоже стал популярен не в последнюю очередь благодаря популярности своего предшественника, C, родства с которым никогда и не скрывал. Поэтому если вы однажды решите всё-таки попробовать Boo, я убеждён, что этот язык покажется вам удобным и знакомым (если, конечно, таким и покажется) именно благодаря тому, что его создатели знали, что для того, чтобы сделать инструмент удобным, его не следует делать слишком необычным.

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

 


Что за Boo такое?

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

Официальный сайт Boo располагается по адресу boo.codehaus.org, и на нём, конечно же, можно найти всё, что может потребоваться для написания программ на этом языке, включая документацию и примеры исходного кода. Как я уже упоминал, для того, чтобы программы, написанные на Boo, работали (да и для того, чтобы программировать на этом языке), вам понадобится среда исполнения .NET-приложений. В качестве оной может выступать как Microsoft .NET Framework, так и Mono.

Я говорил выше, что Boo имеет черты знакомых множеству программистов языков. Однако стоит уточнить, каких именно. Поскольку Boo изначально создавался как язык для платформы .NET, то ему волей-неволей положено иметь некоторые черты, доставшиеся в наследство от основного языка этой платформы, C#. Но основным предшественником Boo следует считать отнюдь не этот язык, а менее распространённый в силу своей экзотичности (а также в силу отсутствия мощного "продвигателя" в лице корпорации Microsoft) Python. Автор Boo, Родриго Баррето де Оливейра, говорит, что пытался создать такой язык, который не был бы столь многословен, сколь многословен C#, и при этом поддерживал бы, в отличие от "Питона", статическую типизацию, проверку ошибок на этапе компиляции и прочие прелести, доступные тем, кто пишет для .NET.

Стоит сказать, что Boo, несмотря на свою схожесть с "Питоном", не является очередной реализацией последнего для платформы .NET. Если вам нравится синтаксис Python и вы хотите, чтобы язык, который вы будете использовать для написания .NET-приложений, был именно Python'ом, а не каким-то из его потомков, то вам следует посмотреть в сторону IronPython. IronPython, кстати, тоже более чем заслуживает того, чтобы рассказать о нём читателям "Компьютерных вестей", но это уже лучше как-нибудь в другой раз.


Особенности Boo

Любой язык программирования имеет свои особенности. Язык, созданный на базе двух таких разных языков, как Python и C#, просто обязан иметь огромное их количество. Вот о них мы с вами сейчас и поговорим.

Как я уже говорил, Boo имеет статическую типизацию, что положительно влияет на скорость выполнения программы. Ведь Python достаточно часто подвергается критике именно за сравнительно низкую скорость работы написанного на нём программного кода. Boo в этом плане лучше своего предшественника. Но при этом нет необходимости в явном декларировании типов переменных: с этим компилятор вполне в состоянии разобраться самостоятельно, не напрягая программиста лишними записями. Впрочем, есть ещё такая вещь, как duck typing, которая позволяет расширить границы, вводимые статической типизацией в этом языке. Переменные типа duck позволяют вам использовать переменные разных статических типов внутри себя.

В языке имеется встроенная (на уровне синтаксиса) поддержка списков и ассоциативных массивов - типов коллекций, которые используются программистами не просто часто, а очень часто. Однако их поддержка не так впечатляет, как наличие в синтаксисе языка поддержки регулярных выражений. Регулярные выражения - это мощное средство оперирования с текстом без "изобретения велосипеда" и написания своих собственных парсеров. Вот какой пример использования регулярных выражений приводят сами разработчики языка:

fname, lname = /(\w+)/.Matches(" Eric Idle ")
print(fname)
print(lname)

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

Присутствуют в языке также довольно любопытные конструкции для "разрезания" строк, массивов и списков (обещают, что появится поддержка и пользовательских типов данных). Например, чтобы вырезать из строки, которую содержит переменная a, первый символ, можно применить следующую конструкцию: a[0:1]. А чтобы вырезать символы с пятого до конца, нужно сделать так: a[5:]. Как видите, очень просто и удобно.

Есть в Boo и такая любимая многими программистами вещь, как макросы. Мне лично сложно сказать, за что их многие так уж сильно любят, потому что и без них живётся прекрасно во многих языках программирования. Но раз уж их нам предлагают, то неплохо хотя бы ознакомиться с тем, что это, собственно говоря, такое и в каких случаях может пригодиться. Макрос в Boo - это некоторая языковая конструкцию, которую программист может написать самостоятельно и затем использовать в своих программах (или продать за большие деньги кому-то ещё, если ему улыбнётся удача). Макрос - это класс, который реализует интерфейс Boo.Lang.Compiler.IAstMacro, и, соответственно, отвечает некоторым требованиям, которые язык программирования выдвигает к макросам. В целом, макросы достаточно сложны, чтобы приводить здесь примеры их написания, так что если вам понадобится их когда-нибудь написать, лучше вам обратиться напрямую к руководствам на официальном сайте Boo.

Несмотря на свою полную объектную ориентированность, Boo поддерживает и "простые" функции, которые, на самом деле, являются также объектами и поддерживают специальные методы, позволяющие контролировать их выполнение. Это довольно интересная и в ряде случаев совершенно незаменимая особенность языка. Не менее, впрочем, интересны и итерационные конструкции, названные создателями Boo генераторами. Чтобы понять их суть, достаточно посмотреть на такую конструкцию: oddNumbers = i for i in range(10) if i % 2. Здесь, как видите, переменная oddNumbers содержит внутри себя генератор, который, фактически, перечисляет нечётные числа от одного до десяти (да, десять - число чётное, но если вы посмотрите на конструкцию внимательнее, вы поймёте причину употребления мною такого оборота). С генераторами надо быть осторожным, поскольку есть некоторые особенности их использования, с которыми следует ознакомиться, прежде чем приступать к этому самому использованию. Кроме того, генераторы в Boo бывают разными, а не только такими, какой я вам продемонстрировал выше. Впрочем, если вы будете программировать на этом языке, вы в скором времени с ними освоитесь.

В Boo есть так называемые "вызываемые типы" (callable types), которые, как пишут разработчики языка, реализуют концепцию делегатов. Объектные ссылки могут вызываться для таких типов как простые функции, что, впрочем, ничуть не удивительно, так как "функции" и есть объекты.


Компилятор и интерпретатор

В завершение рассказа об особенностях языка стоит сказать пару слов об особенностях компиляции и интерпретации программ, написанных на нём. Да-да, это действительно так, и возможны как компиляция, так и интерпретация. Интерпретатор предлагается для тестирования кода, который нужно быстро запустить после внесённых правок без перекомпиляции программы. Но, как полноценный .NET-язык, Boo позволяет вам компилировать написанные на нём программы в промежуточный язык, с которым работает среда выполнения .NET.

Что касается среды разработки для Boo, то для Visual Studio есть BooLangStudio (www.codeplex.com/BooLangStudio). Но, вообще, я бы порекомендовал пользоваться бесплатной средой (свободной, если точнее, но от этого термина ничего не меняется, и проще смотреть на неё как на просто бесплатную) #Develop (www.icsharpcode.net), в которой есть встроенная поддержка работы с этим языком программирования.


Резюме

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

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

08 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!