Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Programación Políglota
en la JVM




Jano González
Desarrollador
http://janogonzalez.com
Sobre mi
         @janogonzalez
●   Desarrollando en Java desde
    2000, enamorado de Ruby en
    2010
●   Co-organizador...
polígloto, ta o poligloto, ta.
(Del gr. πολύγλωττος).

1. adj. Escrito en varias lenguas.
2. adj. Dicho de una persona: Ve...
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/s
orientado :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 Scala
Clojure Rhino Mirah Fantom
Gosu 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 ob...
Hay muchos tipos de objetos
# Rangos
(1..10)

# Arreglos
[1, 2, 3, 4, 5]

# Hashes
{:jano => "Alejandro", :cote => "José"}...
Con métodos muy cool

# En realidad + es un método, no un operador
1.+(9)

# Con un poco de azucar sintáctico
1 + 9

# En ...
Bloques


# Un método puede recibir un bloque de código
5.times do
  |n| puts n
end

# Para casos cortos como el anterior....
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...
Creando tus propias clases
# Problem Java?
class Persona
  attr_reader :nombre, :apellido

  def initialize(nombre, apelli...
Modificando clases ya existentes

# Monkey patching
class Range
  def even
    self.select { |n| n % 2 == 0 }
  end
end

(...
Accediendo a clases Java


# Importando clases Java
require 'java'
java_import 'java.util.date'

d = Date.new
d.to_gmt_str...
Accediendo a clases Java



Date d = new Date(); => d = Date.new
d.toGMTString() => d.to_gmt_string
Comandos

Intérprete
$ jruby

REPL
$ jirb

Administrador de paquetes
$ jgem
Gemas




Precaució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 aplicaci...
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" ...
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)) ...
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 ...
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
              :Dc
para la programación políglota
La programación políglota en la
  JVM es factible en entornos
         “enterprise”
Precaución: El exceso de
lenguajes puede aumentar al
            caos
El resto...
Nos vemos en
Nos vemos en
Imágenes
●

http://commons.wikimedia.org/wiki/File:Espagueti_de_Pasta_Fre
sca_al_Huevo.jpg
● http://www.startechconf.com/m...
Jano González
Desarrollador
http://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
×

of

Programación Políglota en la JVM Slide 1 Programación Políglota en la JVM Slide 2 Programación Políglota en la JVM Slide 3 Programación Políglota en la JVM Slide 4 Programación Políglota en la JVM Slide 5 Programación Políglota en la JVM Slide 6 Programación Políglota en la JVM Slide 7 Programación Políglota en la JVM Slide 8 Programación Políglota en la JVM Slide 9 Programación Políglota en la JVM Slide 10 Programación Políglota en la JVM Slide 11 Programación Políglota en la JVM Slide 12 Programación Políglota en la JVM Slide 13 Programación Políglota en la JVM Slide 14 Programación Políglota en la JVM Slide 15 Programación Políglota en la JVM Slide 16 Programación Políglota en la JVM Slide 17 Programación Políglota en la JVM Slide 18 Programación Políglota en la JVM Slide 19 Programación Políglota en la JVM Slide 20 Programación Políglota en la JVM Slide 21 Programación Políglota en la JVM Slide 22 Programación Políglota en la JVM Slide 23 Programación Políglota en la JVM Slide 24 Programación Políglota en la JVM Slide 25 Programación Políglota en la JVM Slide 26 Programación Políglota en la JVM Slide 27 Programación Políglota en la JVM Slide 28 Programación Políglota en la JVM Slide 29 Programación Políglota en la JVM Slide 30 Programación Políglota en la JVM Slide 31 Programación Políglota en la JVM Slide 32 Programación Políglota en la JVM Slide 33 Programación Políglota en la JVM Slide 34 Programación Políglota en la JVM Slide 35 Programación Políglota en la JVM Slide 36 Programación Políglota en la JVM Slide 37 Programación Políglota en la JVM Slide 38 Programación Políglota en la JVM Slide 39 Programación Políglota en la JVM Slide 40 Programación Políglota en la JVM Slide 41 Programación Políglota en la JVM Slide 42 Programación Políglota en la JVM Slide 43 Programación Políglota en la JVM Slide 44 Programación Políglota en la JVM Slide 45 Programación Políglota en la JVM Slide 46 Programación Políglota en la JVM Slide 47 Programación Políglota en la JVM Slide 48 Programación Políglota en la JVM Slide 49 Programación Políglota en la JVM Slide 50 Programación Políglota en la JVM Slide 51 Programación Políglota en la JVM Slide 52 Programación Políglota en la JVM Slide 53 Programación Políglota en la JVM Slide 54 Programación Políglota en la JVM Slide 55 Programación Políglota en la JVM Slide 56 Programación Políglota en la JVM Slide 57 Programación Políglota en la JVM Slide 58 Programación Políglota en la JVM Slide 59 Programación Políglota en la JVM Slide 60 Programación Políglota en la JVM Slide 61 Programación Políglota en la JVM Slide 62 Programación Políglota en la JVM Slide 63 Programación Políglota en la JVM Slide 64 Programación Políglota en la JVM Slide 65 Programación Políglota en la JVM Slide 66 Programación Políglota en la JVM Slide 67 Programación Políglota en la JVM Slide 68 Programación Políglota en la JVM Slide 69 Programación Políglota en la JVM Slide 70 Programación Políglota en la JVM Slide 71 Programación Políglota en la JVM Slide 72 Programación Políglota en la JVM Slide 73 Programación Políglota en la JVM Slide 74 Programación Políglota en la JVM Slide 75 Programación Políglota en la JVM Slide 76
Upcoming SlideShare
Jano Gonzalez - jruby
Next
Download to read offline and view in fullscreen.

1 Like

Share

Download to read offline

Programación Políglota en la JVM

Download to read offline

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

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Programación Políglota en la JVM

  1. 1. Programación Políglota en la JVM Jano González Desarrollador http://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 varias lenguas. (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/s orientado :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 Scala Clojure Rhino Mirah Fantom Gosu 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 objeto nil.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]+$/ # Lambdas lambda { |n| n * 2 }
  34. 34. Con métodos muy cool # En realidad + es un método, no un operador 1.+(9) # Con un poco de azucar sintáctico 1 + 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ódigo 5.times do |n| puts n end # 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 end end jano = Persona.new("Jano", "González") jano.nombre
  38. 38. Modificando clases ya existentes # Monkey patching class Range def even self.select { |n| n % 2 == 0 } end end (1..100).even
  39. 39. Accediendo a clases Java # Importando clases Java require 'java' java_import 'java.util.date' d = Date.new d.to_gmt_string
  40. 40. Accediendo a clases Java Date d = new Date(); => d = Date.new d.toGMTString() => d.to_gmt_string
  41. 41. Comandos Intérprete $ jruby REPL $ jirb Administrador de paquetes $ jgem
  42. 42. Gemas Precaució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 :Dc para 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 de lenguajes 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_Fre sca_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ález Desarrollador http://janogonzalez.com @janogonzalez
  • arodriguezt

    Jun. 6, 2017

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

Views

Total views

1,683

On Slideshare

0

From embeds

0

Number of embeds

13

Actions

Downloads

10

Shares

0

Comments

0

Likes

1

×