Баум Виталий
                     .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 среда
Надеюсь было интересно ;)

Boo Programming Language

  • 1.
    Баум Виталий .NET Developer butaji.wordpress.com yafos@yandex.ru .NET CLI Languages
  • 2.
  • 3.
     Открытая лицензия (схожа с MIT/BSD)  Совместим с Microsoft.NET, так же с Mono
  • 4.
     Объектно-ориентированный язык  Статическая типизация  Python’ообразный синтаксис  Расширяемый язык
  • 5.
     http://boo.codehaus.org/Download «binary»:  компилятор booc.exe  интерпретатор booi.exe  интерактивный интерпретатор booish.exe  #Develop  Visual Studio (Codeplex.com/BooLangStudio)
  • 6.
  • 7.
     Родриго Баррето де Оливейра (Rodrigo Barreto de Oliveira) в 2003 году.  В Python ему не хватало статической типизации, проверки ошибок времени компиляции и инфраструктуры .NET.  C# же порой был слишком многословный.  Желание расширять язык собственными конструкциями, а также интерактивный
  • 8.
  • 9.
     Классический HelloWrold выглядит следующим образом: print "Hello World!"
  • 10.
     Booстроготипизированный язык, поэтому следующий код не скомпилится: i as int i = "Hello World!"
  • 11.
     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()
  • 12.
     Приведение типов (Auto casting): // Auto casts i to double i as int = 42.1 d as double = 42 // Errors //d = i as double //d = System.Exception()
  • 13.
     Отступ слева является синтаксически значимым: happyToday = Convert.ToBoolean(Random().Ne xt(2)) if happyToday: print "Hello World!" else: for i in range(3): print "Goodbye World!"
  • 14.
     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
  • 15.
     Booреализует CommonType System, что обеспечивает совместимость с CLR
  • 16.
     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
  • 17.
     Boo используетрегулярные выражения (оператор match из perl =~): "Here is foo” =~ /foo/ m = /abc/.Match("123abc456") if m.Success: print "Found match at position:", m.Index !~ пока не реализован, можно использовать not
  • 18.
     Boo как функциональный язык
  • 19.
     Замыкания в Boo: p = print // lambda expression a1 = { s | p(s) } // anonymous method a2 = def(s as string): a1(s) a1("Action 1!") a2("Action 2!")
  • 20.
     Boo –подручный язык url, local = "http://boo.codehaus.org", "boo.html" client = WebClient() call = client.DownloadFile.BeginInvoke (url, local) while not call.IsCompleted: Console.Write(".")
  • 21.
     Boo поддерживаетутиную типизацию: t= Type.GetTypeFromProgID("Inter netExplorer.Application") ie as duck = Activator.CreateInstance(t) ie.Visible = true ie.Navigate2("http://boo.codeha us.org")
  • 22.
     ИнтерфейсIQuackFu позволяет динамически добавлять поведение в класс в реальном времени
  • 23.
     Boo– расширяемыйязык: позволяет создавать макросы так же макросы на основе аттрибутов
  • 24.
     Booразработан дляреализации внутренних DSL Specter.Framework для BDD(behavior-driven development)
  • 25.
     Booрасширяет условия компиляции: class invalidClass: pass Class name 'invalidClass' should start with an uppercase letter! (BCE0000)
  • 26.
    Куда слазить? Чтопочитать? Когда начать?
  • 27.
     Домашняя страница проекта  Новости, FAQ, Guide, Cookbook и многое другое
  • 28.
     Google группа, последние тенденции, проекты, новости, практики
  • 29.
    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/ - обзор в Прогопедии
  • 30.
     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 среда
  • 31.