a Clojure y por qué usar programación funcional Una intro a Clojure y por qué usar programación funcional Denis Fuenzalida – Junio de 2013 Denis Fuenzalida – Junio de 2013 [email protected][email protected]
siguiente observación: observación: El verdadero legado de Java será El verdadero legado de Java será la plataforma, no el lenguaje... la plataforma, no el lenguaje...
de 200 lenguajes que corren sobre la JVM lenguajes que corren sobre la JVM y y es inevitable que uno de ellos es inevitable que uno de ellos llegue a superar a Java llegue a superar a Java como la como la mejor forma de programar la JVM.” mejor forma de programar la JVM.” – – Neal Ford en “ Neal Ford en “Java.next Java.next” ” http://nealford.com/pub.html http://nealford.com/pub.html
aprender Lisp por la la profunda experiencia de profunda experiencia de iluminación iluminación que obtendrás que obtendrás cuando finalmente lo entiendas... cuando finalmente lo entiendas...
un mejor por programador el resto de tus por programador el resto de tus días, incluso si en realidad nunca días, incluso si en realidad nunca lo utilizas mucho.” lo utilizas mucho.” – – Eric S. Raymond en “ Eric S. Raymond en “Como convertirse en Hacker Como convertirse en Hacker” ” http://www.catb.org/esr/faqs/hacker-howto.html http://www.catb.org/esr/faqs/hacker-howto.html
programación funcional • • Simbiótico con una plataforma probada Simbiótico con una plataforma probada • • Diseñado para programación concurrente Diseñado para programación concurrente … … pero no lo encontró, pero no lo encontró, así que lo hizo él mismo así que lo hizo él mismo http://clojure.org/ http://clojure.org/rationale rationale
\d projects; Table "public.projects" Table "public.projects" Column | Type Column | Type ------------+----------------------------- ------------+----------------------------- id | integer id | integer user_id | integer user_id | integer enabled | boolean enabled | boolean created_at | timestamp without time zone created_at | timestamp without time zone updated_at | timestamp without time zone updated_at | timestamp without time zone
Una secuencia de 1000 números repartidos en 100 vectores de 10 números cada uno vectores de 10 números cada uno • • 10 10 threads threads manipularán estos números manipularán estos números • • Cada thread selecciona 2 posiciones al azar entre dos Cada thread selecciona 2 posiciones al azar entre dos vectores elegidos al azar e intercambia los valores vectores elegidos al azar e intercambia los valores • • Correr 100.000 iteraciones y ver si ocurren Correr 100.000 iteraciones y ver si ocurren inconsistencias (faltan números, deadlocks...) inconsistencias (faltan números, deadlocks...) http://en.wikipedia.org/wiki/Clojure#Examples http://en.wikipedia.org/wiki/Clojure#Examples
y Ruby tienen elementos funcionales, Java 8 incluirá lambdas funcionales, Java 8 incluirá lambdas → → Clojure tiene eso y más disponible hoy Clojure tiene eso y más disponible hoy • Rápido como Java y soluciona problemas • Rápido como Java y soluciona problemas complejos complejos
es práctico, se puede interoperar con todo el ecosistema de Java y sus librerías todo el ecosistema de Java y sus librerías • Corre donde corra Java: apps de escritorio, • Corre donde corra Java: apps de escritorio, Tomcat, AWS, Heroku, Google App Engine, etc. Tomcat, AWS, Heroku, Google App Engine, etc. • • ClojureScript ClojureScript, Datomic* y Pedestal* , Datomic* y Pedestal*
de Paul Graham por Niall Kennedy http://www.flickr.com/photos/niallkennedy/137275735/ Sasha Grey con el libro de SICP por Ayanami_Rei http://canv.as/p/1i1pr/reply/89490 Rick Hichey en el SF Clojure Users Group por Howard Lewis Ship http://www.flickr.com/photos/hlship/3603090614 Rich Hickey “State, you're doing it wrong” por Pedro Teixeira http://static.intelie.com.br/qconsp2010/presentation.html