Programación Políglota en la JVM

76
Jano González Desarrollador http://janogonzalez.com Programación Políglota en la JVM

description

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

Transcript of Programación Políglota en la JVM

  • 1. Programacin Polglotaen la JVMJano GonzlezDesarrolladorhttp://janogonzalez.com

2. Sobre mi @janogonzalez Desarrollando en Java desde2000, enamorado de Ruby en2010 Co-organizador del Meetup deLenguajes Dinmicos:http://www.meetup.com/dynlangchile/ Publica el bloghttp://gemaroja.com Msico frustrado 3. polgloto, ta o poligloto, ta.(Del gr. ).1. adj. Escrito en varias lenguas.2. adj. Dicho de una persona: Versada en variaslenguas.(rae.es) 4. El problema 5. Proyectos atrasados 6. Baja calidad del producto 7. Causado por 8. Requerimientos cambiantes 9. Exceso de complejidad en la arquitectura 10. Vendor lock-in 11. Lenguajes verbosos 12. Abstracciones inadecuadas 13. Demasiado XML 14. Programacin Polglota al rescate 15. Nivel de abstraccin adecuado:Dc para cada problema 16. Esttico v/s dinmico :Dc 17. Estructurado v/sorientado :Dc a objetos v/s funcional 18. La JVM 19. Fuentes Bytecode JVMJVM Plataforma 1 Plataforma N 20. Multi-threading:Dc 21. Garbage collector:Dc 22. JIT:Dc 23. Multiplataforma:Dc 24. Gran porcentaje de penetracin :Dc en entornos enterprise 25. Lenguajes para la JVM 26. JRuby Jython Groovy ScalaClojure Rhino Mirah FantomGosu Kotlin Seph BeanShell etc... 27. Ruby para la JVM:Dc 28. Orientado a Objetos:Dc 29. Dinmico :Dc 30. Con algunas caractersticas funcionales 31. Gran soporte para meta- programacin 32. Todo es un objeto# El clsico stringHola Mundo.upcase# No hay "tipos primitivos"!5.zero?# Hasta el nulo es un objetonil.nil? 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. Con mtodos muy cool# En realidad + es un mtodo, no un operador1.+(9)# Con un poco de azucar sintctico1 + 9# En otros objetos"Hola " + "Mundo"# Incluso con arreglos[1, 2, 3] + [4, 5] 35. Bloques# Un mtodo puede recibir un bloque de cdigo5.times do|n| puts nend# Para casos cortos como el anterior...5.times { |n| puts n } 36. Bloques# El clsico map(1..100).map { |n| n * 2 }# El clsico select(1..100).select { |n| n % 3 == 0 }# El clsico reduce(1..100).reduce { |sum, n| sum + n }# Incluso ms corto(1..100).reduce(:+) 37. Creando tus propias clases# Problem Java?class Personaattr_reader :nombre, :apellidodef initialize(nombre, apellido)@nombre = nombre@apellido = apellidoendendjano = Persona.new("Jano", "Gonzlez")jano.nombre 38. Modificando clases ya existentes# Monkey patchingclass Rangedef evenself.select { |n| n % 2 == 0 }endend(1..100).even 39. Accediendo a clases Java# Importando clases Javarequire javajava_import java.util.dated = Date.newd.to_gmt_string 40. Accediendo a clases JavaDate d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_string 41. ComandosIntrprete$ jrubyREPL$ jirbAdministrador de paquetes$ jgem 42. GemasPrecaucin: No todas funcionan en Jruby 43. Encontrando la gema adecuada 44. A programar! 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. Clojure 47. Dialecto de Lisp para la JVM:Dc 48. Dinmico :Dc 49. Funcional :Dc 50. Concurrencia con STM:Dc 51. Es un Lisp;; No sera un Lisp sin listas(list 1 2 3 4 5);; Un poco de azucar sintctico(1 2 3 4 5) 52. No slo con listas;; Vector(vector 1 2 3 4 5);; Con azcar sintctico[1 2 3 4 5];; Mapa(hash-map :jano "Alejandro" :cote "Jos");; Con azcar sintctico{:jano "Alejandro", :cote "Jos"};; Conjunto(hash-set :hugo :paco :luis);; Con azcar sintctico#{:hugo :paco :luis} 53. Funciones;; Creando funciones(def duplicar(fn [n] (* 2 n)));; Tambin existe una macro(defn duplicar [n] (* 2 n)) 54. Recursividad;; Nadie se aburre de este ejemplo(defn factorial [n](if (