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

Linguagem Boo: A wrist friendly language for CLI

on

  • 1,518 views

Por Rodrigo Bambo: Linguaguem Boo

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

Statistics

Views

Total Views
1,518
Views on SlideShare
1,518
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Linguagem Boo: A wrist friendly language for CLI Linguagem Boo: A wrist friendly language for CLI Presentation Transcript

    • Rodrigo B. de Oliveira déspota (rbo@acm.org)
    • Era uma vez Um programador apaixonado pelo framework .net
    • Era uma vez Um revoltado programador C# com Síndrome do Túnel do Carpo
    • E ele experimentava... Python, Ruby, ... ●Tríade ●Linguagem ●Ambiente de Execução ●Bibliotecas ●
    • Mas sua paixão... BCL ●CTS ●Metadados ●Reference and Value types ●Delegates ●Entre outras coisinhas ●CLI ●
    • 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.
    • Interlúdio Programadores e suas idades Reusabilidade ●Extensibilidade ●Entre outras ●
    • Mãe, eu quero Uma sintaxe leve ●Extensibilidade, Expressividade ●Produtividade! ●Trocar figurinhas com outras linguagens ●Uma biblioteca de classes bem pensada ●Ser multiplataforma ●
    • 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()
    • 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
    • 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()
    • 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()
    • Idades Atributos Sintáticos class Person: [getter(Name)] _name as string def constructor([required] name): _name = name
    • Idades Atributos Sintáticos [singleton] class SomeSubSystem: [reader] def QueryData(): pass [writer] def WriteData(): pass [once] def QueryExpensiveData(): pass
    • Idades Macro sintáticas using connection=OpenConnection(): // código protegido pass lock self: // código protegido pass
    • 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())
    • 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)
    • 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()
    • 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}")
    • Produtividade Console Interativo
    • Perguntas? http://boo.codehaus.org/
    • Contribuindo http://boo.codehaus.org/Contributing
    • Obrigado!