Your SlideShare is downloading. ×
0
Por que você precisa (re)aprender linguagens funcionais? Luiz Borba Maio-2010
<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...
<ul><li>LISP – 1958 </li></ul>(defun quicksort (lis)  (if (null lis) nil (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a...
<ul><li>Haskell – 1990 </li></ul>qsort [] = []  qsort (x:xs) = qsort (filter (< x) xs)  ++ [x] ++      qsort (filter (>= x...
<ul><li>Mainstream </li></ul><ul><li>Desde os anos 60 </li></ul><ul><ul><li>Imperativa Procedural (Cobol, Fortran, C) </li...
<ul><li>E como ficou o paradigma funcional? </li></ul><ul><li>Basicamente na academia </li></ul><ul><li>Desde de meados do...
Mas, de repente...
<ul><li>Sinais </li></ul>
<ul><li>Erlang – Ericsson Language </li></ul><ul><li>Criada em 1986 </li></ul><ul><li>1998 </li></ul><ul><ul><li>AXD301 – ...
<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><li>Clojure </li></ul><ul><li>Criada em 2007 </li></ul><ul><li>Dialeto moderno de LISP </li></ul><ul><li>Roda na JVM <...
<ul><li>Scala </li></ul><ul><li>Criada em 2003 </li></ul><ul><li>Funcional + Orientada a Objetos </li></ul><ul><li>Linguag...
<ul><li>Bancos NOSQL </li></ul><ul><li>Google - Paper em 2007 sobre BigTable </li></ul><ul><ul><li>Map/Reduce </li></ul></...
Que diabos tá acontecendo?
<ul><li>Evolução das CPUs </li></ul>
“ Software is getting slower faster than hardware becomes faster” (Nicklaus Wirth)
código existente será obsoleto
temos que escrever código paralelo
QUEM SABE FAZER?
usando conceitos funcionais é mais fácil
Funções de Alta Ordem <ul><ul><li>def apply(f:Int => String, v:Int) = f(v) </li></ul></ul>
Imutabilidade let price = 10
Sem efeitos colaterais
Pattern Matching let peek s =     match s with     | Cons(hd, tl) -> hd     | Nil -> failwith &quot;Empty stack&quot;
<ul><li>Actors Model </li></ul>class Ping(count: int, pong: Actor) extends Actor {  def act() {  var pingsLeft = count – 1...
<ul><li>Outros conceitos chaves </li></ul><ul><li>Recursion </li></ul><ul><li>Currying </li></ul><ul><li>Lazy Evaluation <...
Então vou fazer todos os meus novos sistemas usando linguagens funcionais?
NÃO
Vamos usar linguagens que tenham um mix de paradigmas
Funcional, Imperativa e Orientada a Objetos
Scala, C#, F# e  Java (?)
Precisamos aprender linguagens funcionais para escrever o software do futuro.
Perguntas? [email_address]
Upcoming SlideShare
Loading in...5
×

Por que voce precisa (re)aprender linguagens funcionais

2,984

Published on

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

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,984
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "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]
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×