Your SlideShare is downloading. ×
Linguagem Boo: A wrist friendly language for CLI
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Linguagem Boo: A wrist friendly language for CLI

1,513
views

Published on

Por Rodrigo Bambo: Linguaguem Boo …

Por Rodrigo Bambo: Linguaguem Boo
Uma linguagem amigável aos pulsos para CLI

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,513
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Rodrigo B. de Oliveira déspota (rbo@acm.org)
  • 2. Era uma vez Um programador apaixonado pelo framework .net
  • 3. Era uma vez Um revoltado programador C# com Síndrome do Túnel do Carpo
  • 4. E ele experimentava... Python, Ruby, ... ●Tríade ●Linguagem ●Ambiente de Execução ●Bibliotecas ●
  • 5. Mas sua paixão... BCL ●CTS ●Metadados ●Reference and Value types ●Delegates ●Entre outras coisinhas ●CLI ●
  • 6. E estava decidido... Ele iria criar uma nova linguagem de programação. Por quê? Porque ele podia. Ele é um programador. É praticamente seu dever terminar com a palhaçada que é, hoje, utilizar a CLI.
  • 7. Interlúdio Programadores e suas idades Reusabilidade ●Extensibilidade ●Entre outras ●
  • 8. Mãe, eu quero Uma sintaxe leve ●Extensibilidade, Expressividade ●Produtividade! ●Trocar figurinhas com outras linguagens ●Uma biblioteca de classes bem pensada ●Ser multiplataforma ●
  • 9. Sintaxe Leve A vida é melhor sem amarras import System import System.Net import System.Threading url, local = argv client = WebClient() call = client.DownloadFile.BeginInvoke(url, local) while not call.IsCompleted: Console.Write(".") Thread.Sleep(50ms) Console.WriteLine()
  • 10. Sintaxe Leve A vida é melhor sem amarras import System.Web.Services [WebService] class Math: [WebMethod] def Add(a as int, b as int): return a+b [WebMethod] def Multiply(a as int, b as int): return a*b
  • 11. Sintaxe Leve Inferência de Tipos def one(): return 1 um = one() def one() as int: return 1 uno as int = one() def one(): return "1" ichi as int = one()
  • 12. Sintaxe Leve Construção de Objetos Simplificada import System.Windows.Forms form = Form(Text: "Hello, boo!") form.Controls.Add( Button(Text: "Click me!", Dock: DockStyle.Fill, Click: { print("clicked!") })) form.ShowDialog()
  • 13. Idades Atributos Sintáticos class Person: [getter(Name)] _name as string def constructor([required] name): _name = name
  • 14. Idades Atributos Sintáticos [singleton] class SomeSubSystem: [reader] def QueryData(): pass [writer] def WriteData(): pass [once] def QueryExpensiveData(): pass
  • 15. Idades Macro sintáticas using connection=OpenConnection(): // código protegido pass lock self: // código protegido pass
  • 16. Extensibilidade Pipeline de Compilação namespace StyleChecker import import import import Boo.Lang.Compiler Boo.Lang.Compiler.Ast Boo.Lang.Compiler.Steps Boo.Lang.Compiler.Pipelines class StyleCheckerStep(AbstractVisitorCompilerStep): override def Run(): Visit(CompileUnit) override def LeaveClassDefinition(node as ClassDefinition): if not System.Char.IsUpper(node.Name[0]): msg = "Class name '${node.Name}' should start with uppercase letter!" Errors.Add(CompilerError(node, msg)) class StyleCheckerPipeline(CompileToFile): def constructor(): self.Insert(1, StyleCheckerStep())
  • 17. Expressividade First Class Functions callable Function(item) def each(items, action as Function): for item in items: action(item) each([1, 2, 3], print) each([1, 2, 3], { item | print("item: ${item}") }) each([1, 2, 3]) do (item as int): print(item*2) sum = 0 each([1, 2, 3]) do (item as int): sum += item print(sum)
  • 18. Expressividade First Class Functions import System import System.Net import System.Threading url, local = argv client = WebClient() downloadFile = client.DownloadFile call = downloadFile.BeginInvoke(url, local) while not call.IsCompleted: Console.Write(".") Thread.Sleep(50ms) Console.WriteLine()
  • 19. Expressividade First Class Generators oddNumbers = i for i in range(10) if i & 1 def fibonacci(): a, b = 0, 1 while true: yield b a, b = b, a+b for index as int, element in zip(range(5), fibonacci()): print("${index+1}: ${element}")
  • 20. Produtividade Console Interativo
  • 21. Perguntas? http://boo.codehaus.org/
  • 22. Contribuindo http://boo.codehaus.org/Contributing
  • 23. Obrigado!