Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Por que functional programming é mais rápido?

Por que functional programming é mais rápido?

Vou te mostrar que functional programming não é algo novo: não foi criado nem nesse milênio e tu provavelmente já sabe muito mais do que acha. Tenho 15 minutos pra te mostrar o porquê do paradigma ter se tornado popular nas últimas décadas.

Apresentado no TDC Porto Alegre 2015 - Trilha Big Data.

Irio Musskopf

September 25, 2015
Tweet

More Decks by Irio Musskopf

Other Decks in Programming

Transcript

  1. Por que
    Por que
    functional programming
    functional programming
    é mais rápido?
    é mais rápido?

    View full-size slide

  2. Irio Musskopf
    Um-dia-quem-sabe-formado Matemático
    Trabalhando pra Neighborly(.com)

    View full-size slide

  3. (Re)vendo conceitos
    (Re)vendo conceitos

    View full-size slide

  4. ∠A + ∠B + ∠C = 180˚, ∀ ΔABC

    View full-size slide

  5. Moses Schönfinkel
    1889 - 1942
    Haskell Curry
    1900 - 1982
    Alonzo Church
    1903 - 1995
    Cálculo
    Cálculo λ
    λ

    View full-size slide

  6. > let grossAmount price = price * 1.03
    > grossAmount 100
    103.0
    > grossAmount 100
    103.0
    -- $ ghci

    View full-size slide

  7. rand (http://goo.gl/0BaCQp)
    IO
    Exceções
    Exceções

    View full-size slide

  8. Immutability -> memoization

    View full-size slide

  9. > let investments = [1000, 500]
    > let investmentsCount = length(investments)
    > let amount = sum(investments)
    > let average = amount / investmentsCount
    > print average
    750.0
    -- $ ghci

    View full-size slide

  10. Immutability -> memoization
    Lazy evaluation

    View full-size slide

  11. > insert(a_collection, 42)
    > remove(a_collection, 42)
    -- $ ghci

    View full-size slide

  12. > insert(a_collection, 42) >>=
    remove(a_collection, 42)
    -- $ ghci

    View full-size slide

  13. Immutability -> memoization
    Lazy evaluation
    Monads

    View full-size slide

  14. > let multiplyAndSum x y =
    (x + x + x + x) + (y + y + y + y)
    -- $ ghci

    View full-size slide

  15. > let multiplyAndSum x y =
    (x + x + x + x) + (y + y + y + y)
    > let multiplyAndSum x y = 4 * x + 4 * y
    -- $ ghci

    View full-size slide

  16. > let multiplyAndSum x y =
    (x + x + x + x) + (y + y + y + y)
    > let multiplyAndSum x y = 4 * x + 4 * y
    > let multiplyAndSum x y = 4 * (x + y)
    -- $ ghci

    View full-size slide

  17. Immutability -> memoization
    Lazy evaluation
    Monads
    Compile-time optimizations

    View full-size slide

  18. scala> Stream.from(1).
    filter(_ < 100).
    map(_ + 1).
    take(2).
    toList
    // $ sbt console
    > take 2 $ map (+1) $ filter (<100) [1..]
    -- $ ghci
    tudoaomesmotempoagora
    tudoaomesmotempoagora

    View full-size slide

  19. Não será mais rápido
    que procedural
    às vezes será

    View full-size slide