Programación Políglotaen la JVMJano GonzálezDesarrolladorhttp://janogonzalez.com
Sobre mi         @janogonzalez●   Desarrollando en Java desde    2000, enamorado de Ruby en    2010●   Co-organizador del ...
polígloto, ta o poligloto, ta.(Del gr. πολύγλωττος).1. adj. Escrito en varias lenguas.2. adj. Dicho de una persona: Versad...
El problema
Proyectos atrasados
Baja calidad del producto
Causado por
Requerimientos cambiantes
Exceso de complejidad en la       arquitectura
Vendor lock-in
Lenguajes “verbosos”
Abstracciones inadecuadas
<queja>Demasiado XML  </queja>
Programación Políglota al       rescate
Nivel de abstracción adecuado              :Dc     para cada problema
Estático v/s dinámico         :Dc
Estructurado v/sorientado :Dc           a objetos v/s       funcional
La JVM
Fuentes   <<se compila en>>    Bytecode                              <<ejecuta>>                   JVM                    ...
Multi-threading      :Dc
Garbage collector      :Dc
JIT:Dc
Multiplataforma      :Dc
Gran porcentaje de penetración             :Dc   en entornos “enterprise”
Lenguajes para la JVM
JRuby Jython Groovy ScalaClojure Rhino Mirah FantomGosu Kotlin Seph BeanShell           etc...
Ruby para la JVM      :Dc
Orientado a Objetos        :Dc
Dinámico   :Dc
Con algunas características       funcionales
Gran soporte para meta-     programación
Todo es un objeto# El clásico string“Hola Mundo”.upcase# No hay "tipos primitivos"!5.zero?# Hasta el nulo es un objetonil....
Hay muchos tipos de objetos# Rangos(1..10)# Arreglos[1, 2, 3, 4, 5]# Hashes{:jano => "Alejandro", :cote => "José"}# Expres...
Con métodos muy cool# En realidad + es un método, no un operador1.+(9)# Con un poco de azucar sintáctico1 + 9# En otros ob...
Bloques# Un método puede recibir un bloque de código5.times do  |n| puts nend# Para casos cortos como el anterior...5.time...
Bloques# El clásico map(1..100).map { |n| n * 2 }# El clásico select(1..100).select { |n| n % 3 == 0 }# El clásico reduce(...
Creando tus propias clases# Problem Java?class Persona  attr_reader :nombre, :apellido  def initialize(nombre, apellido)  ...
Modificando clases ya existentes# Monkey patchingclass Range  def even    self.select { |n| n % 2 == 0 }  endend(1..100).e...
Accediendo a clases Java# Importando clases Javarequire javajava_import java.util.dated = Date.newd.to_gmt_string
Accediendo a clases JavaDate d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_string
ComandosIntérprete$ jrubyREPL$ jirbAdministrador de paquetes$ jgem
GemasPrecaución: No todas funcionan en Jruby
Encontrando la gema adecuada
¡A programar!
Ejemplos de uso● Aplicaciones Web con Ruby on Rails● Servicios REST con Sinatra● Rspec/Capybara para probar aplicaciones● ...
Clojure
Dialecto de Lisp para la JVM            :Dc
Dinámico   :Dc
Funcional   :Dc
Concurrencia con STM        :Dc
Es un Lisp;; No sería un Lisp sin listas(list 1 2 3 4 5);; Un poco de azucar sintáctico(1 2 3 4 5)
No sólo con listas;; Vector(vector 1 2 3 4 5);; Con azúcar sintáctico[1 2 3 4 5];; Mapa(hash-map :jano "Alejandro" :cote "...
Funciones;; Creando funciones(def duplicar  (fn [n] (* 2 n)));; También existe una macro(defn duplicar [n] (* 2 n))
Recursividad;; Nadie se aburre de este ejemplo(defn factorial [n]  (if (<= n 1)      n      (* (factorial (dec n)) n)))
Clásicos funcionales de ayer y hoy;; Map(map (fn [n] (* n 2)) (1 2 3 4 5));; Con azucar sintáctico(map #(* % 2) (1 2 3 4 5...
Accediendo a clases Java;; Usando un método(.toUpperCase "Hola Mundo");; Usando un método estático(Math/pow 2 10)
¡A programar!
Estático
Orientado a Objetos
Funcional
Sintáxis parecida a Java, pero      menos “verbosa”
Concurrencia con actores
Conclusiones
Es posible atacar cada problema               :Dc con el lenguaje más adecuado
La JVM es una gran plataforma              :Dcpara la programación políglota
La programación políglota en la  JVM es factible en entornos         “enterprise”
Precaución: El exceso delenguajes puede aumentar al            caos
El resto...
Nos vemos en
Nos vemos en
Imágenes●http://commons.wikimedia.org/wiki/File:Espagueti_de_Pasta_Fresca_al_Huevo.jpg● http://www.startechconf.com/media/...
Jano GonzálezDesarrolladorhttp://janogonzalez.com@janogonzalez
Programación Políglota en la JVM
Programación Políglota en la JVM
Programación Políglota en la JVM
Programación Políglota en la JVM
Upcoming SlideShare
Loading in …5
×

Programación Políglota en la JVM

1,532 views

Published on

Mi charla sobre uso de múltiples lenguajes bajo la JVM, dictada en el Día del Software Libre en Curicó.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,532
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Programación Políglota en la JVM

  1. 1. Programación Políglotaen la JVMJano GonzálezDesarrolladorhttp://janogonzalez.com
  2. 2. Sobre mi @janogonzalez● Desarrollando en Java desde 2000, enamorado de Ruby en 2010● Co-organizador del Meetup de Lenguajes Dinámicos: http://www.meetup.com/dynla ngchile/● Publica el blog http://gemaroja.com● Músico frustrado
  3. 3. polígloto, ta o poligloto, ta.(Del gr. πολύγλωττος).1. adj. Escrito en varias lenguas.2. adj. Dicho de una persona: Versada en variaslenguas.(rae.es)
  4. 4. El problema
  5. 5. Proyectos atrasados
  6. 6. Baja calidad del producto
  7. 7. Causado por
  8. 8. Requerimientos cambiantes
  9. 9. Exceso de complejidad en la arquitectura
  10. 10. Vendor lock-in
  11. 11. Lenguajes “verbosos”
  12. 12. Abstracciones inadecuadas
  13. 13. <queja>Demasiado XML </queja>
  14. 14. Programación Políglota al rescate
  15. 15. Nivel de abstracción adecuado :Dc para cada problema
  16. 16. Estático v/s dinámico :Dc
  17. 17. Estructurado v/sorientado :Dc a objetos v/s funcional
  18. 18. La JVM
  19. 19. Fuentes <<se compila en>> Bytecode <<ejecuta>> JVM JVM Plataforma 1 Plataforma N
  20. 20. Multi-threading :Dc
  21. 21. Garbage collector :Dc
  22. 22. JIT:Dc
  23. 23. Multiplataforma :Dc
  24. 24. Gran porcentaje de penetración :Dc en entornos “enterprise”
  25. 25. Lenguajes para la JVM
  26. 26. JRuby Jython Groovy ScalaClojure Rhino Mirah FantomGosu Kotlin Seph BeanShell etc...
  27. 27. Ruby para la JVM :Dc
  28. 28. Orientado a Objetos :Dc
  29. 29. Dinámico :Dc
  30. 30. Con algunas características funcionales
  31. 31. Gran soporte para meta- programación
  32. 32. Todo es un objeto# El clásico string“Hola Mundo”.upcase# No hay "tipos primitivos"!5.zero?# Hasta el nulo es un objetonil.nil?
  33. 33. Hay muchos tipos de objetos# Rangos(1..10)# Arreglos[1, 2, 3, 4, 5]# Hashes{:jano => "Alejandro", :cote => "José"}# Expresiones regulares/^[a-z]+$/# Lambdaslambda { |n| n * 2 }
  34. 34. Con métodos muy cool# En realidad + es un método, no un operador1.+(9)# Con un poco de azucar sintáctico1 + 9# En otros objetos"Hola " + "Mundo"# Incluso con arreglos[1, 2, 3] + [4, 5]
  35. 35. Bloques# Un método puede recibir un bloque de código5.times do |n| puts nend# Para casos cortos como el anterior...5.times { |n| puts n }
  36. 36. Bloques# El clásico map(1..100).map { |n| n * 2 }# El clásico select(1..100).select { |n| n % 3 == 0 }# El clásico reduce(1..100).reduce { |sum, n| sum + n }# Incluso más corto(1..100).reduce(:+)
  37. 37. Creando tus propias clases# Problem Java?class Persona attr_reader :nombre, :apellido def initialize(nombre, apellido) @nombre = nombre @apellido = apellido endendjano = Persona.new("Jano", "González")jano.nombre
  38. 38. Modificando clases ya existentes# Monkey patchingclass Range def even self.select { |n| n % 2 == 0 } endend(1..100).even
  39. 39. Accediendo a clases Java# Importando clases Javarequire javajava_import java.util.dated = Date.newd.to_gmt_string
  40. 40. Accediendo a clases JavaDate d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_string
  41. 41. ComandosIntérprete$ jrubyREPL$ jirbAdministrador de paquetes$ jgem
  42. 42. GemasPrecaución: No todas funcionan en Jruby
  43. 43. Encontrando la gema adecuada
  44. 44. ¡A programar!
  45. 45. Ejemplos de uso● Aplicaciones Web con Ruby on Rails● Servicios REST con Sinatra● Rspec/Capybara para probar aplicaciones● DSLs para facilitar uso de bibliotecas Java
  46. 46. Clojure
  47. 47. Dialecto de Lisp para la JVM :Dc
  48. 48. Dinámico :Dc
  49. 49. Funcional :Dc
  50. 50. Concurrencia con STM :Dc
  51. 51. Es un Lisp;; No sería un Lisp sin listas(list 1 2 3 4 5);; Un poco de azucar sintáctico(1 2 3 4 5)
  52. 52. No sólo con listas;; Vector(vector 1 2 3 4 5);; Con azúcar sintáctico[1 2 3 4 5];; Mapa(hash-map :jano "Alejandro" :cote "José");; Con azúcar sintáctico{:jano "Alejandro", :cote "José"};; Conjunto(hash-set :hugo :paco :luis);; Con azúcar sintáctico#{:hugo :paco :luis}
  53. 53. Funciones;; Creando funciones(def duplicar (fn [n] (* 2 n)));; También existe una macro(defn duplicar [n] (* 2 n))
  54. 54. Recursividad;; Nadie se aburre de este ejemplo(defn factorial [n] (if (<= n 1) n (* (factorial (dec n)) n)))
  55. 55. Clásicos funcionales de ayer y hoy;; Map(map (fn [n] (* n 2)) (1 2 3 4 5));; Con azucar sintáctico(map #(* % 2) (1 2 3 4 5));; Filter(filter #(= 0 (mod % 2)) (1 2 3 4 5));; Reduce(reduce #(+ %1 %2) (1 2 3 4 5))
  56. 56. Accediendo a clases Java;; Usando un método(.toUpperCase "Hola Mundo");; Usando un método estático(Math/pow 2 10)
  57. 57. ¡A programar!
  58. 58. Estático
  59. 59. Orientado a Objetos
  60. 60. Funcional
  61. 61. Sintáxis parecida a Java, pero menos “verbosa”
  62. 62. Concurrencia con actores
  63. 63. Conclusiones
  64. 64. Es posible atacar cada problema :Dc con el lenguaje más adecuado
  65. 65. La JVM es una gran plataforma :Dcpara la programación políglota
  66. 66. La programación políglota en la JVM es factible en entornos “enterprise”
  67. 67. Precaución: El exceso delenguajes puede aumentar al caos
  68. 68. El resto...
  69. 69. Nos vemos en
  70. 70. Nos vemos en
  71. 71. Imágenes●http://commons.wikimedia.org/wiki/File:Espagueti_de_Pasta_Fresca_al_Huevo.jpg● http://www.startechconf.com/media/images/main-logo.png● http://2011.encuentrolinux.cl/wp/wp-content/uploads/2011/07/encuentro_linux.png● http://openjdk.java.net/projects/mlvm/images/leonardo_vm.png● http://upload.wikimedia.org/wikipedia/en/thumb/1/1a/Clojure-glyph.svg/500px-Clojure-glyph.svg.png● http://jruby.org/images/jruby-logo.png● http://upload.wikimedia.org/wikipedia/en/8/85/Scala_logo.png
  72. 72. Jano GonzálezDesarrolladorhttp://janogonzalez.com@janogonzalez

×