Un lenguaje para la era del multiprocesador
Octavio Luna @tavo_luna
Presentación: http://goo.gl/YmA6G
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Scala es como el Toruk de Avatar:
Va a tratar de matarte, pero una vez que lo dominas
puedes alcanzar grandes alturas
@tavo_luna +octavio.luna http://goo.gl/YmA6G
@tavo_luna +octavio.luna http://goo.gl/YmA6G
¿Por qué SCALA?
Orientado a Objetos
Funcional Reactivo
EscalableTipos Seguros
JVM y
.NET*
@tavo_luna +octavio.luna http://goo.gl/YmA6G
La escalabilidad es Horizontal
@tavo_luna +octavio.luna http://goo.gl/YmA6G
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Parallels Collections
@tavo_luna +octavio.luna http://goo.gl/YmA6G
//Secuencial:
object SequentialImplementation extends Computation
{ def compute(list:List[Data]):Int =
list.map{f}.max}
//Paralelizadoobject ParallelImplementation extends
Computation { def compute(list:List[Data]):Int =
list.par.map{f}.par.max}
list.par.map{f}.par.max}
list.par.map{f}.par.max}
@tavo_luna +octavio.luna http://goo.gl/YmA6G
DEMOSTRACION
@tavo_luna +octavio.luna http://goo.gl/YmA6G
La escalabilidad es Horizontal
@tavo_luna +octavio.luna http://goo.gl/YmA6G
La escalabilidad es Horizontal
@tavo_luna +octavio.luna http://goo.gl/YmA6G
ACTORES - AKKA
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Lineal (tradicioNAL)
Iterador de LíneasWebService
Main.scala
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Lineal (tradicioNAL)
Iterador de LíneasWebService
Main.scala
@tavo_luna +octavio.luna http://goo.gl/YmA6G
def readXLS(){ import java.io._ val writer = new PrintWriter(new File("output.csv
val sheet = new HSSFWorkbook(
new FileInputStream("WalmartForGEOCODING.xls")).getSheetAt(0)
val r0 = sheet.getFirstRowNum val r1 = sheet.getLastRowNum tr
for(i <- r0 to r1){ val r = sheet.getRow(i)
val addr = r.getCell(1) val city = r.getCell(2)
val state = r.getCell(3) val zip = r.getCell(4)
val (gLat, gLong) = callWS(s"$addr, $city, $state, $zip") va
outTxt = s"$fullAddr, $gLat, $gLongn" print(outTxt)
writer.write(outTxt) } }catch{ case e:Excep
=> e.printStackTrace() }
writer.close()}
writer.close()}
writer.close()}
@tavo_luna +octavio.luna http://goo.gl/YmA6G
def readXLS(){ import java.io._ val writer = new PrintWriter(new File("output.csv
val sheet = new HSSFWorkbook(
new FileInputStream("WalmartForGEOCODING.xls")).getSheetAt(0)
val r0 = sheet.getFirstRowNum val r1 = sheet.getLastRowNum tr
for(i <- r0 to r1){ val r = sheet.getRow(i)
val addr = r.getCell(1) val city = r.getCell(2)
val state = r.getCell(3) val zip = r.getCell(4)
val (gLat, gLong) = callWS(s"$addr, $city, $state, $zip") va
outTxt = s"$fullAddr, $gLat, $gLongn" print(outTxt)
writer.write(outTxt) } }catch{ case e:Excep
=> e.printStackTrace() }
writer.close()}
writer.close()}
writer.close()}
Punto de Mejora
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Lineal (tradicioNAL)
Iterador de LíneasWebService
Main.scala
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Con Actores (concurrente)
Iterador de Líneas
WebService
Master.actor
receive
Geolocate
Escribe en Archivo
Geolocation
WorkerRouter
WorkerWorkerWorkerWorkerWorkerN
@tavo_luna +octavio.luna http://goo.gl/YmA6G
DEMOSTRACION
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Actores en la JVM
Akka: Java & Scala
Kilim: Java
Jetlang: Java
Actors Guild: Java
ActorFoundry: Java
Actorom: Java
Functional Java: Java
GParallelizer: Groovy
Fan Actors: Fan

Scala un lenguaje para multiprocesador