Programação Concorrente em Scala - DCC - UFRJ
Programação Concorrente em Scala - DCC - UFRJ
Programação Concorrente em Scala - DCC - UFRJ
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>