Boo Programming Language

Preview:

DESCRIPTION

my slides from the first seminar of spb alt.net group

Citation preview

.NET CLI Languages

Баум Виталий.NET Developerbutaji.wordpress.comyafos@yandex.ru

Основные характеристики языка

Открытая лицензия (схожа с 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

Надеюсь было интересно ;)

Recommended