boo programming language
DESCRIPTION
my slides from the first seminar of spb alt.net groupTRANSCRIPT
.NET CLI Languages
Баум Виталий.NET [email protected]
Основные характеристики языка
Открытая лицензия (схожа с MIT/BSD)
Совместим с Microsoft.NET, так же с Mono
Объектно-ориентированный языкСтатическая типизацияPython’ообразный синтаксисРасширяемый язык
http://boo.codehaus.org/Download «binary»: компилятор booc.exe интерпретатор booi.exe интерактивный интерпретатор
booish.exe#DevelopVisual Studio
(Codeplex.com/BooLangStudio)
История развития
Родриго Баррето де Оливейра (Rodrigo Barreto de Oliveira) в 2003 году.
В Python ему не хватало статической типизации, проверки ошибок времени компиляции и инфраструктуры .NET.
C# же порой был слишком многословный.
Желание расширять язык собственными конструкциями, а также интерактивный интерпретатор, в котором можно быстро проверить фрагменты кода.
Начинаем работать с Boo
Классический HelloWrold выглядит следующим образом:
print "Hello World!"
Boo строготипизированный язык, поэтому следующий код не скомпилится:
i as inti = "Hello World!"
Boo реализует Выведение типов (Type Inference):import System.Collections.Generic// Infers i as type System.Int32i = 21i += 21
def Foo():return Dictionary[of string,
List[of int]]()
h = Foo()
Приведение типов (Auto casting):// Auto casts i to doublei as int = 42.1d as double = 42
// Errors//d = i as double//d = System.Exception()
Отступ слева является синтаксически значимым:happyToday = Convert.ToBoolean(Random().Next(2))if happyToday:
print "Hello World!"else:
for i in range(3):print "Goodbye World!"
Boo объектно-ориентированный языкclass Dessert:
public name as stringpublic 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 intmin = 55mhrs = 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 expressiona1 = { s | p(s) }// anonymous methoda2 = 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(".")Thread.Sleep(50ms)
Boo поддерживает утиную типизацию:t = Type.GetTypeFromProgID("InternetExplorer.Application")ie as duck = Activator.CreateInstance(t)ie.Visible = trueie.Navigate2("http://boo.codehaus.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-in-30-lines-of-code.aspx - веб-сервер в 30 строках кода
http://www.manning.com/rahien/ - книга о написании DSL на Boo
http://mysite.mweb.co.za/residents/sdonovan/boo-book.html - неплохой справочник
http://www.justnbusiness.com/ - статьи и примеры кода
http://www.script-coding.info/Boo.html - обзор на русском
http://www.developers.org.ua/archives/cleg/2007/08/03/say-boo/ - обзор на русском
http://progopedia.ru/language/boo/ - обзор в Прогопедии
Webness (http://boo-lang.org/projects-using-boo/frameworks/webbness-framework-tutorial/) фреймворк (куда же без него) для быстрой разработки 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 среда http://lazunin.com/tetris_boo.html - игра
Тетрис для Silverlight
Надеюсь было интересно ;)