17.04.2013 Views

Programação Concorrente em Scala - DCC - UFRJ

Programação Concorrente em Scala - DCC - UFRJ

Programação Concorrente em Scala - DCC - UFRJ

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Minicurso II – WSCAD 2012 (Petrópolis, RJ)<br />

<strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong><br />

Carlos Bazilio e Silvana Rossetto<br />

17 de outubro de 2012<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

1 Introdução<br />

Motivação e dificuldades programação concorrente<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

2 Conceitos básicos sobre <strong>Scala</strong><br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

3 Concorrência <strong>em</strong> <strong>Scala</strong><br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

4 Comparação e avaliação<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Motivação programação concorrente<br />

Com os avanços recentes das arquiteturas<br />

multiprocessadores o<br />

interesse pela programação concorrente<br />

ganha nova motivação como<br />

modelo fundamental para explorar<br />

o paralelismo do hardware <strong>em</strong> diversos<br />

cenários de aplicações<br />

1 Fonte: http://freshbooks.com<br />

Motivação e dificuldades programação concorrente<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Caracterização programação concorrente<br />

Motivação e dificuldades programação concorrente<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

A programação concorrente está relacionada com a<br />

impl<strong>em</strong>entação de programas de computador que inclu<strong>em</strong> linhas de<br />

controle distintas que pod<strong>em</strong> executar simultaneamente na mesma<br />

máquina ou <strong>em</strong> máquinas separadas<br />

2 Fonte: http://programmingforfuture.com<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong><br />

2


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Dificuldades da programação concorrente<br />

Motivação e dificuldades programação concorrente<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

Necessidade de definir as linhas de controle explicitamente<br />

Nos casos mais gerais, as linhas de controle precisam interagir<br />

e sincronizar suas ações ao longo da execução da aplicação<br />

Os mecanismos de interação inclu<strong>em</strong>: escrita/leitura de<br />

dados <strong>em</strong> m<strong>em</strong>ória compartilhada e troca de mensagens<br />

A necessidade de sincronização aparece por duas razões:<br />

1 controle de acesso a recursos compartilhados<br />

2 dependência lógica entre os fluxos de execução definida pela<br />

própria aplicação<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

Motivação e dificuldades programação concorrente<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

Apresentamos uma visão geral das abstrações de programação<br />

concorrente da linguag<strong>em</strong> <strong>Scala</strong><br />

A linguag<strong>em</strong> <strong>Scala</strong><br />

Criada por Martin Odersky (2003)<br />

Seu nome é um acrônimo para SCAlable LAnguage (projetada<br />

para ser estendida)<br />

Executa sobre a JVM (Java Virtual Machine) e é<br />

interoperável com Java<br />

Fusão de conceitos dos paradigmas funcional e orientado<br />

a objetos<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Uso comercial<br />

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Motivação e dificuldades programação concorrente<br />

<strong>Programação</strong> concorrente <strong>em</strong> <strong>Scala</strong><br />

Twitter: alternativa a Ruby por questões de des<strong>em</strong>penho<br />

Typesafe: <strong>em</strong>presa criada por Odersky para suporte à<br />

linguag<strong>em</strong><br />

Outros usuários: LinkedIn, EDFT, Novell, The Guardian,<br />

Xebia, Xerox, FourSquare, Sony, Si<strong>em</strong>ens, Thatcham,<br />

OPower, GridGain, AppJet, Reaktor, ...<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

Valores mutáveis e imutáveis<br />

scala> var v = 10<br />

v: Int = 10<br />

scala> v = v + 1<br />

v: Int = 11<br />

scala> val c = 10<br />

c: Int = 10<br />

scala> c = c + 1<br />

:6: error: reassignment to val<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Sist<strong>em</strong>a de tipos<br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

Modelo de tipag<strong>em</strong> estática com mecanismo de inferência de<br />

tipos:<br />

scala> val b = 20<br />

b: Int = 20<br />

scala> var c = 30<br />

c: Int = 30<br />

scala> c = "abc"<br />

:6: error: type mismatch;<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Funções: forma básica<br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

def nomeFunc (par1: Tipo1, par2: Tipo2) :<br />

TipoRet = { Corpo da Funç~ao }<br />

O valor retornado pela função é o valor da última expressão<br />

avaliada dentro do corpo da função<br />

Funções: atribuição de função anônima<br />

def nomeFunc = (par1: Tipo1, par2: Tipo2) =><br />

{ Corpo da Funç~ao }<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Passag<strong>em</strong> de parâmetros<br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

<strong>Scala</strong> possui duas formas de passag<strong>em</strong> de parâmetros para funções:<br />

passag<strong>em</strong> por valor: o argumento na chamada de uma<br />

função é avaliado e seu valor é copiado para o parâmetro<br />

dentro da função chamada<br />

passag<strong>em</strong> por nome: a expressão passada como argumento<br />

é copiada s<strong>em</strong> avaliação para o parâmetro dentro da função<br />

chamada (a expressão só será avaliada quando for<br />

referenciada na execução da função chamada)<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

Ex<strong>em</strong>plo de passag<strong>em</strong> de parâmetro por nome<br />

def fwhile (cond: => Boolean)<br />

(corpo: => Unit) : Unit = {<br />

if (cond) {<br />

corpo<br />

fwhile(cond)(corpo)<br />

} }<br />

[...]<br />

var i = 5<br />

fwhile (i > 0) {<br />

println("Hello: " + i + "!")<br />

i = i - 1 }<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Funções de alta ord<strong>em</strong><br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

Funções são valores de primeira classe (pod<strong>em</strong> ser passadas<br />

como parâmetros ou retornadas por funções, atribuídas a variáveis<br />

e aninhadas a outras funções)<br />

scala>List(1,2,3) map { x => x + 1 }<br />

res0: List[Int] = List(2,3,4)<br />

scala>List("a", "abc", "abcd")<br />

filter { x => x.length() List(1,2,3) reduceLeft {<br />

(x,y) => x+y }<br />

res2: Int = 6<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Classes e objetos<br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

class Empregado(val nome : String,<br />

private var salario : Double)<br />

[...]<br />

val <strong>em</strong>p = new Empregado("Jo~ao", 1500)<br />

println(<strong>em</strong>p.nome + ", " + <strong>em</strong>p.salario)<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Casamento de padrões<br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

<strong>Scala</strong> não possui o comando de seleção case/switch comum<br />

<strong>em</strong> linguagens de programação<br />

Como alternativa, possui um mecanismo mais poderoso de<br />

“casamento de padrões” (pattern matching)<br />

match { }<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Ex<strong>em</strong>plo de casamento de padrões<br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

def process(msg : Any) = {<br />

msg match {<br />

case "hello" => println("hello")<br />

case x : String => println(x)<br />

case (a, b) => println("Tupla")<br />

case 22 => println("22 recebido")<br />

case x : Int if x < 0 => println(x)<br />

_ => println("Padrao desconhecido")<br />

}<br />

}<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Conceitos básicos de <strong>Scala</strong><br />

Valores e tipos<br />

Funções e passag<strong>em</strong> de parâmetros<br />

Classes e casamento de padrões<br />

Case classes<br />

Classes especiais usadas frequent<strong>em</strong>ente nas expressões case<br />

(permit<strong>em</strong> o uso de objetos no casamento de padrões s<strong>em</strong> exigir a<br />

impl<strong>em</strong>entação de uma classe inteira para tal fim)<br />

abstract class Expr<br />

case class Var(name: String)<br />

extends Expr<br />

case class Number(num: Double)<br />

extends Expr<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Actors<br />

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

Um actor (ator) é uma entidade de execução distinta (uma<br />

thread) associada a um mailbox para o recebimento de<br />

mensagens (mecanismo de comunicação entre dois ou mais<br />

actors)<br />

Mecanismo principal para a programação concorrente <strong>em</strong><br />

<strong>Scala</strong>: permite tornar a programação concorrente mais<br />

abstrata (se comparada à programação clássica baseada <strong>em</strong><br />

threads)<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Ex<strong>em</strong>plo de criação de Actor<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

import scala.actors._<br />

object AtorSimples extends Actor {<br />

def act() {<br />

for (i


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Outra forma de criar um Actor<br />

import scala.actors.Actor._<br />

val AtorSimples1 = actor {<br />

for (i


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Comunicação entre actors<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

<strong>Scala</strong> provê primitivas de troca de mensagens para<br />

comunicação entre actors<br />

A s<strong>em</strong>ântica padrão é envio não-bloqueante e recebimento<br />

bloqueante (caso não exista mensag<strong>em</strong> na caixa postal)<br />

Variante: o método receiveWithin(miliseconds) define um<br />

t<strong>em</strong>po limite de espera por uma mensag<strong>em</strong><br />

Ex<strong>em</strong>plo de envio de mensagens<br />

AtorSimples ! "Ola"<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Comunicação entre actors<br />

Ex<strong>em</strong>plo de recebimento de mensagens<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

import scala.actors._<br />

object AtorSimples2 extends Actor {<br />

def act() {<br />

receive {<br />

case msg => println(msg)<br />

} } }<br />

A referência ao objeto enviado <strong>em</strong> uma mensag<strong>em</strong> passa a ser<br />

compartilhada (i.e, o actor que recebe o objeto pode invocar os<br />

métodos do objeto e alterar seus atributos). Desse modo, para<br />

evitar os probl<strong>em</strong>as de acesso concorrente, o objeto enviado <strong>em</strong><br />

uma mensag<strong>em</strong> deve ser thread-safe, ou o programador deve fazer<br />

uma cópia do objeto antes de enviá-lo.<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

Interoperabilidade com Java e Threads<br />

Em função da “interoperabilidade com Java”, recursos de<br />

concorrência da JVM também pod<strong>em</strong> ser usados <strong>em</strong> <strong>Scala</strong><br />

Ex<strong>em</strong>plo: pod<strong>em</strong>os usar threads ao invés de actors:<br />

new Thread {<br />

println("Este bloco eh uma thread!")<br />

}<br />

Qualquer classe do pacote java.util.concurrent pode ser<br />

diretamente usada nos programas <strong>Scala</strong><br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

Interoperabilidade com Java e Threads<br />

Outra forma de disparar nova linha de execução<br />

import scala.concurrent.ops._<br />

println("linha de execuç~ao principal")<br />

spawn {<br />

println("nova linha de execuç~ao")<br />

}<br />

Possível forma de impl<strong>em</strong>entação<br />

def spawn(p: => Unit) {<br />

val t = new Thread() {<br />

override def run() = p }<br />

t.start()<br />

}<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Futures<br />

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Actors<br />

Interoperabilidade com Java<br />

Futures<br />

Future é um mecanismo que permite execução assíncrona de uma<br />

função, método ou bloco de comandos<br />

Ex<strong>em</strong>plo de uso de future<br />

import scala.actors.Futures._<br />

val a = future(comput_intensa1())<br />

val b = future(comput_intensa2())<br />

continuacao_da_computacao(...)<br />

combinacao_resultados(a(), b())<br />

Uma execução que chama um future só é interrompida quando<br />

tenta utilizar o valor retornado pela future<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Multiplicação de matrizes<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Comparações<br />

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Identificador do Modelo: MacBookPro5,5<br />

Nome do Processador: Intel Core 2 Duo<br />

Velocidade do Processador: 2,53 GHz<br />

Número de Processadores: 1<br />

Número Total de Núcleos: 2<br />

Cache de L2: 3 MB<br />

M<strong>em</strong>ória: 4 GB<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Comparação Java X <strong>Scala</strong> (concorrente)<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Comparação Java X <strong>Scala</strong> (concorrente)<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Comparação <strong>Scala</strong> sequencial X concorrente<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Considerações finais<br />

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Mistura programação OO e funcional de maneira natural<br />

Vantag<strong>em</strong> de interoperação com Java<br />

Ser flexível e sucinta não necessariamente implica ser simples<br />

de programar<br />

Prompt de linha de comando facilita a depuração<br />

Comunidade ativa<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Contatos<br />

Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

carlosbazilio@puro.uff.br<br />

silvana@dcc.ufrj.br<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>


Sumário<br />

Introdução<br />

Conceitos básicos sobre <strong>Scala</strong><br />

Concorrência <strong>em</strong> <strong>Scala</strong><br />

Comparação e avaliação<br />

Referências bibliográficas<br />

Java X <strong>Scala</strong><br />

<strong>Scala</strong> sequencial X concorrente<br />

Considerações finais<br />

1 Concurrent Programming — Principles and Practice,<br />

Andrews, Addison-Wesley, 1991<br />

2 Programming Language Pragmatics, M. L. Scott,<br />

Morgan-Kaufmann, ed. 2, 2006<br />

3 Programming in <strong>Scala</strong>, M. Odersky, L. Spoon and B. Venners,<br />

Artima, 2008<br />

4 <strong>Scala</strong> By Example, M. Odersky, Programming Methods<br />

Laboratory, EPFL, Switzerland, 2011<br />

5 http://www.scala-lang.org (site oficial da linguag<strong>em</strong> <strong>Scala</strong>)<br />

Carlos Bazilio e Silvana Rossetto <strong>Programação</strong> <strong>Concorrente</strong> <strong>em</strong> <strong>Scala</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!