Баум Виталий .NET Developer butaji.wordpress.com
[email protected]
.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 среда
Надеюсь было интересно ;)