• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Por que voce precisa (re)aprender linguagens funcionais
 

Por que voce precisa (re)aprender linguagens funcionais

on

  • 3,371 views

Apresentação feita no CESA|R

Apresentação feita no CESA|R

Statistics

Views

Total Views
3,371
Views on SlideShare
2,983
Embed Views
388

Actions

Likes
0
Downloads
21
Comments
0

6 Embeds 388

http://borba.blog.br 378
http://linguagensfuincionais.blogspot.com.br 6
http://feeds.feedburner.com 1
http://www.netvibes.com 1
http://localhost 1
http://www.linguagensfuincionais.blogspot.com.br 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Por que voce precisa (re)aprender linguagens funcionais Por que voce precisa (re)aprender linguagens funcionais Presentation Transcript

    • Por que você precisa (re)aprender linguagens funcionais? Luiz Borba Maio-2010
      • Alonzo Church – anos 30
      • cálculo lâmbda
      • λ x.x + 1
      • ( λ x.x + 1) 3 = 4
      • LISP – 1958
      (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))))))
      • Haskell – 1990
      qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
      • Mainstream
      • Desde os anos 60
        • Imperativa Procedural (Cobol, Fortran, C)
      • e depois...
        • Imperativa Orientada a Objetos (Smalltalk, C++, Java)
      • E como ficou o paradigma funcional?
      • Basicamente na academia
      • Desde de meados dos anos 90
        • Completamente esquecido
    • Mas, de repente...
      • Sinais
      • Erlang – Ericsson Language
      • Criada em 1986
      • 1998
        • AXD301 – confiabilidade de 99.9999999%
        • Banida e disponibilizada como open source
      • 2004
        • Reintroduzida na Ericsson
      • Microsoft F#
      • Criada em 2002
      • Incluída no Visual Studio 2008 como um add-on
      • Será parte integrante do Visual Studio 2010
      • Clojure
      • Criada em 2007
      • Dialeto moderno de LISP
      • Roda na JVM
      • Scala
      • Criada em 2003
      • Funcional + Orientada a Objetos
      • Linguagem “pós-funcional“
      • Backend do Twitter
      • def qsort: List[Int] => List[Int] = {
      • case Nil => Nil
      • case pivot :: tail =>
      • val (smaller, rest) = tail.partition(_ < pivot)
      • qsort(smaller) ::: pivot :: qsort(rest)
      • }
      • Bancos NOSQL
      • Google - Paper em 2007 sobre BigTable
        • Map/Reduce
      • Explosão de soluções
        • CouchDB, MongoDB, Neo4j, Redis, Memcachedb, Dynamo, Cassandra, Voldermort, HBase, Hypertable, FluidDB, Riak, RavenDB, Dynomite, ...
    • Que diabos tá acontecendo?
      • Evolução das CPUs
    • “ 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
        • def apply(f:Int => String, v:Int) = f(v)
    • 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;
      • Actors Model
      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() } } } } }
      • Outros conceitos chaves
      • Recursion
      • Currying
      • Lazy Evaluation
      • Continuations
      • Closures
      • Functional Composition
      • Referential Transparency
      • Monads
    • 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]