linguagem boo: a wrist friendly language for cli
DESCRIPTION
Por Rodrigo Bambo: Linguaguem Boo Uma linguagem amigável aos pulsos para CLITRANSCRIPT
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!