programación políglota en la jvm

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

Upload: jano-gonzalez

Post on 21-Jun-2015

1.172 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

  • 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 (