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

Like this? Share it with your network

Share

Linguagem Boo: A wrist friendly language for CLI

  • 1,622 views
Uploaded on

Por Rodrigo Bambo: Linguaguem Boo ...

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,622
On Slideshare
1,622
From Embeds
0
Number of Embeds
0

Actions

Shares
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!