linguagem boo: a wrist friendly language for cli

Post on 27-May-2015

1.541 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

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

top related