You are on page 1of 31

Баум Виталий

.NET Developer
butaji.wordpress.com
yafos@yandex.ru

.NET CLI Languages


Основные характеристики языка
 Открытая лицензия (схожа с
MIT/BSD)
 Совместим с Microsoft.NET, так же
с Mono
 Объектно-ориентированный язык
 Статическая типизация
 Python’ообразный синтаксис
 Расширяемый язык
 http://boo.codehaus.org/Download
«binary»:
 компилятор booc.exe
 интерпретатор booi.exe
 интерактивный интерпретатор
booish.exe
 #Develop
 Visual Studio
(Codeplex.com/BooLangStudio)
История развития
 Родриго Баррето де Оливейра
(Rodrigo Barreto de Oliveira) в 2003
году.
 В Python ему не хватало статической
типизации, проверки ошибок
времени компиляции и
инфраструктуры .NET.
 C# же порой был слишком
многословный.
 Желание расширять язык
собственными конструкциями, а
также интерактивный
Начинаем работать с Boo
 Классический
HelloWrold выглядит
следующим образом:

print "Hello World!"


 Booстроготипизированный язык,
поэтому следующий код не
скомпилится:

i as int
i = "Hello World!"
 Boo реализует Выведение типов
(Type Inference):
import System.Collections.Generic
// Infers i as type System.Int32
i = 21
i += 21
def Foo():
return Dictionary[of string,
List[of int]]()
h = Foo()
 Приведение типов (Auto casting):
// Auto casts i to double
i as int = 42.1
d as double = 42

// Errors
//d = i as double
//d = System.Exception()
 Отступ слева является
синтаксически значимым:
happyToday =
Convert.ToBoolean(Random().Ne
xt(2))
if happyToday:
print "Hello World!"
else:
for i in range(3):
print "Goodbye World!"
 Booобъектно-ориентированный язык
class Dessert:
public name as string
public foo as string
override def ToString():
return name
d = Dessert(foo: "foo", name:
"Crunchy Frog!")
print d.name
 Booреализует Common Type
System, что обеспечивает
совместимость с CLR
 Boo – это замечательно!
a = (1, 2, 3, 4)
b = (1, "two", 3.0, 4ms)
l = [42, "Silly", 1.618]
l.Add(true)
for i in range(l.Count):
print "${i}: ${l[i]}"
items = i for i in l if i isa int
min = 55m
hrs = 55h
 Boo использует регулярные
выражения (оператор match из
perl =~):
"Here is foo” =~ /foo/
m = /abc/.Match("123abc456")
if m.Success:
print "Found match at
position:", m.Index

!~ пока не реализован, можно


использовать not
 Boo как функциональный язык
 Замыкания в Boo:
p = print
// lambda expression
a1 = { s | p(s) }
// anonymous method
a2 = def(s as string):
a1(s)

a1("Action 1!")
a2("Action 2!")
 Boo – подручный язык
url, local =
"http://boo.codehaus.org",
"boo.html"
client = WebClient()
call =
client.DownloadFile.BeginInvoke
(url, local)
while not call.IsCompleted:
Console.Write(".")
 Boo поддерживает утиную
типизацию:
t=
Type.GetTypeFromProgID("Inter
netExplorer.Application")
ie as duck =
Activator.CreateInstance(t)
ie.Visible = true
ie.Navigate2("http://boo.codeha
us.org")
 ИнтерфейсIQuackFu позволяет
динамически добавлять
поведение в класс в реальном
времени
 Boo– расширяемый язык:
позволяет создавать макросы
так же макросы на основе
аттрибутов
 Booразработан для реализации
внутренних DSL

Specter.Framework для
BDD(behavior-driven development)
 Booрасширяет условия
компиляции:
class invalidClass:
pass

Class name 'invalidClass' should


start with an uppercase letter!
(BCE0000)
Куда слазить? Что почитать? Когда начать?
 Домашняя страница проекта
 Новости, FAQ, Guide, Cookbook и
многое другое
 Google
группа, последние
тенденции, проекты, новости,
практики
 http://boo.codehaus.org/BooManifesto.pdf -
манифест языка
 http://ayende.com/Blog/archive/2008/03/30/A-web-server-i
- веб-сервер в 30 строках кода
 http://www.manning.com/rahien/ - книга о
написании DSL на Boo
 http://mysite.mweb.co.za/residents/sdonovan/boo-book.htm
- неплохой справочник
 http://www.justnbusiness.com/ - статьи и примеры
кода
 http://www.script-coding.info/Boo.html - обзор на
русском
 http://www.developers.org.ua/archives/cleg/2007/08/03/sa
- обзор на русском
 http://progopedia.ru/language/boo/ - обзор в
Прогопедии
 Webness (
http://boo-lang.org/projects-using-boo/framewor
) фреймворк (куда же без него) для
быстрой разработки web-приложений
 Brail (
http://www.ayende.com/projects/brail.aspx)
– шаблонный движок для генерации
HTML
 Piorun (http://piorun.sztorm.net/) - Jabber
клиент
 http://code.google.com/p/dotnetopenid/ -
OpenID библиотека
 http://specter.sourceforge.net/ - BDD среда
Надеюсь было интересно ;)