Официальный сайт языка -
http://boo.codehaus.org .
Boo похож на Python, поэтому сравнение с этим языком неизбежно. И, тем не менее, язык этот совершенно другой. Во-первых, он со статической типизацией, в отличие от Python. Это значит, что любая IDE будет радовать вас auto-completion'ом. Динамическая типизация в Boo поддерживается опционально, я об этом еще напишу. Во-вторых, Boo является и компилируемым (в MSIL) языком, и интерпретируемым, в отличие от Python (компиляция в pyc-файлы не считается).
Чем же Boo похож на Python, если в нем такое фундаментальное отличие?
1. Синтаксис.
2. Простые кортежи и разнотипные списки - на уровне языка. Также словари.
3. Функции как first class object.
4. Генераторы-итераторы.
Но корректнее было бы все-таки сравнивать не Boo с Python, a Boo с C#, как ни странно.
А теперь обо всем этом подробнее.
*** Фишечка1
Динамическая типизация. Для нее есть специальный тип duck.
- Код: Выделить всё
class Myclass():
public b as string = "18str"
class MySecondClass:
public b as Double = 3.0
instance as duck
rand = Random()
r = rand.Next(20)
if r < 10:
instance = Myclass()
else:
instance = MySecondClass()
print "insatnce b", instance.b
Этот код компилируется и выполняется именно так, как ожидается.
*** Фишечка 2.
Вывод типов.
Да, в Boo присутствует такая новомодная штучка, как вывод типов, наподобие Ocaml/F#.
Это значит, что такая результат такой функции:
- Код: Выделить всё
def somefunction(a as int):
if a < 10:
return "result"
else:
return "oh, my brain!"
будет правильно определен как string - на уровне IDE.
*** Фишечка 2.5.
Вывод типов работает не только для переменных, но и для функций.
Это значит, что можно написать такой код:
- Код: Выделить всё
def somefunction(a as int):
if a < 10:
return "result"
else:
return "oh, my brain!"
def anotherfunction(b as int):
return "4.0"
if rand.Next(20) > 10:
func = somefunction
else:
func = anotherfunction
res = func(19)
Так можно написать, потому что у somefunction и anotherfunction одинаковые сигнатуры. В C# для аналогичной операции нам бы пришлось еще отдельно объявлять делегат, в Boо компилятор делает это сам. Если же мы сделаем сигнатуры разными, будет ошибка компиляции. Разумеется, переменная res получается string.
*** Фишечка 3.
Вы же помните, как ловко в PHP можно засунуть переменную в строку? В Boo можно то же самое.
- Код: Выделить всё
res = func(19)
print "result is: $res"
*** Фишечка 4.
Регулярные выражения набираются прямо в коде, наподобие Perl. Но, поскольку я не спец по регулярным выражениям, ничего об этом писать не буду, сами прочитаете.
*** Фишечка 5.
Синтаксические макросы.
С ними я еще не разобрался. Но выглядит впечатляюще
http://boo.codehaus.org/Syntactic+MacrosНа этом, пожалуй, все. Думаю, этого достаточно, чтобы заинтересовать.