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.

Por que voce precisa (re)aprender linguagens funcionais

3,326 views

Published on

Entenda as razões porque o paradigma funcional é importante e vai entrar definitivamente no mainstream.

Published in: Technology, Education
  • Be the first to comment

  • Be the first to like this

Por que voce precisa (re)aprender linguagens funcionais

  1. 1. Por que você precisa (re)aprender linguagens funcionais? Luiz Borba Maio-2010
  2. 2. <ul><li>Alonzo Church – anos 30 </li></ul><ul><li>cálculo lâmbda </li></ul><ul><li>λ x.x + 1 </li></ul><ul><li>( λ x.x + 1) 3 = 4 </li></ul>
  3. 3. <ul><li>LISP – 1958 </li></ul>(defun quicksort (lis) (if (null lis) nil (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x)))) (append (quicksort (remove-if-not fn r)) (list x) (quicksort (remove-if fn r))))))
  4. 4. <ul><li>Haskell – 1990 </li></ul>qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
  5. 5. <ul><li>Mainstream </li></ul><ul><li>Desde os anos 60 </li></ul><ul><ul><li>Imperativa Procedural (Cobol, Fortran, C) </li></ul></ul><ul><li>e depois... </li></ul><ul><ul><li>Imperativa Orientada a Objetos (Smalltalk, C++, Java) </li></ul></ul>
  6. 6. <ul><li>E como ficou o paradigma funcional? </li></ul><ul><li>Basicamente na academia </li></ul><ul><li>Desde de meados dos anos 90 </li></ul><ul><ul><li>Completamente esquecido </li></ul></ul>
  7. 7. Mas, de repente...
  8. 8. <ul><li>Sinais </li></ul>
  9. 9. <ul><li>Erlang – Ericsson Language </li></ul><ul><li>Criada em 1986 </li></ul><ul><li>1998 </li></ul><ul><ul><li>AXD301 – confiabilidade de 99.9999999% </li></ul></ul><ul><ul><li>Banida e disponibilizada como open source </li></ul></ul><ul><li>2004 </li></ul><ul><ul><li>Reintroduzida na Ericsson </li></ul></ul>
  10. 10. <ul><li>Microsoft F# </li></ul><ul><li>Criada em 2002 </li></ul><ul><li>Incluída no Visual Studio 2008 como um add-on </li></ul><ul><li>Será parte integrante do Visual Studio 2010 </li></ul>
  11. 11. <ul><li>Clojure </li></ul><ul><li>Criada em 2007 </li></ul><ul><li>Dialeto moderno de LISP </li></ul><ul><li>Roda na JVM </li></ul>
  12. 12. <ul><li>Scala </li></ul><ul><li>Criada em 2003 </li></ul><ul><li>Funcional + Orientada a Objetos </li></ul><ul><li>Linguagem “pós-funcional“ </li></ul><ul><li>Backend do Twitter </li></ul><ul><li>def qsort: List[Int] => List[Int] = { </li></ul><ul><li>case Nil => Nil </li></ul><ul><li>case pivot :: tail => </li></ul><ul><li>val (smaller, rest) = tail.partition(_ < pivot) </li></ul><ul><li>qsort(smaller) ::: pivot :: qsort(rest) </li></ul><ul><li>} </li></ul>
  13. 13. <ul><li>Bancos NOSQL </li></ul><ul><li>Google - Paper em 2007 sobre BigTable </li></ul><ul><ul><li>Map/Reduce </li></ul></ul><ul><li>Explosão de soluções </li></ul><ul><ul><li>CouchDB, MongoDB, Neo4j, Redis, Memcachedb, Dynamo, Cassandra, Voldermort, HBase, Hypertable, FluidDB, Riak, RavenDB, Dynomite, ... </li></ul></ul>
  14. 14. Que diabos tá acontecendo?
  15. 15. <ul><li>Evolução das CPUs </li></ul>
  16. 16. “ Software is getting slower faster than hardware becomes faster” (Nicklaus Wirth)
  17. 17. código existente será obsoleto
  18. 18. temos que escrever código paralelo
  19. 19. QUEM SABE FAZER?
  20. 20. usando conceitos funcionais é mais fácil
  21. 21. Funções de Alta Ordem <ul><ul><li>def apply(f:Int => String, v:Int) = f(v) </li></ul></ul>
  22. 22. Imutabilidade let price = 10
  23. 23. Sem efeitos colaterais
  24. 24. Pattern Matching let peek s =     match s with     | Cons(hd, tl) -> hd     | Nil -> failwith &quot;Empty stack&quot;
  25. 25. <ul><li>Actors Model </li></ul>class Ping(count: int, pong: Actor) extends Actor { def act() { var pingsLeft = count – 1 pong ! Ping while (true) { receive { case Pong => if (pingsLeft % 1000 == 0) println(&quot;Ping: pong&quot;) if (pingsLeft > 0) { pong ! Ping pingsLeft -= 1 } else { println(&quot;Ping: stop&quot;) pong ! Stop exit() } } } } }
  26. 26. <ul><li>Outros conceitos chaves </li></ul><ul><li>Recursion </li></ul><ul><li>Currying </li></ul><ul><li>Lazy Evaluation </li></ul><ul><li>Continuations </li></ul><ul><li>Closures </li></ul><ul><li>Functional Composition </li></ul><ul><li>Referential Transparency </li></ul><ul><li>Monads </li></ul>
  27. 27. Então vou fazer todos os meus novos sistemas usando linguagens funcionais?
  28. 28. NÃO
  29. 29. Vamos usar linguagens que tenham um mix de paradigmas
  30. 30. Funcional, Imperativa e Orientada a Objetos
  31. 31. Scala, C#, F# e Java (?)
  32. 32. Precisamos aprender linguagens funcionais para escrever o software do futuro.
  33. 33. Perguntas? [email_address]

×