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.
10. Mãe, eu quero
Uma sintaxe leve
●Extensibilidade, Expressividade
●Produtividade!
●Trocar figurinhas com outras linguagens
●Uma biblioteca de classes bem pensada
●Ser multiplataforma
●
11. 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()
12. 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
13. 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()
14. 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()
18. 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())
19. 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)
20. 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()
21. 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}")