Upload
alessandro-binhara
View
1.538
Download
1
Embed Size (px)
DESCRIPTION
Por Rodrigo Bambo: Linguaguem Boo Uma linguagem amigável aos pulsos para CLI
Citation preview
Rodrigo B. de Oliveira déspota
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 Boo.Lang.Compiler import Boo.Lang.Compiler.Ast import Boo.Lang.Compiler.Steps import 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
http://boo.codehaus.org/
Perguntas?
Contribuindo
http://boo.codehaus.org/Contributing
Obrigado!