dimanche 10 mars 2013

lazy evaluation avec ruby 2.0

Dans les nouveautés de Ruby 2.0 , une se distingue des autres : la lazy evaluation.
Cette fonctionnalité rapproche de plus en plus ruby du domaine des langages fonctionnels.

La présentation est disponible sur slideshare :



Le code des exemples est le suivant:
def ma_fonction (parametre)
puts "je passe"
puts parametre.to_s
puts parametre.size
end
ma_fonction(2)
ma_fonction (1+1)
ma_fonction(1..3000000000)
ma_fonction([1..Float::INFINITY])
ma_fonction(1..Float::INFINITY)
## deuxime exemple
infinite_range = (1..Float::INFINITY)
e = infinite_range.lazy.select { |num| num % 42 == 0 }
5.times {puts e.next }
view raw rubylazy.rb hosted with ❤ by GitHub
La programmation fonctionnelle  favorise l'usage des générateurs ou des suites pour résoudre un certain type de probleme  (List comprehension - map/reduce) .

Avec le mode lazy , ruby est capable de retarder l'évaluation d'expression et mieux encore de le faire à la demande.

Le principal cas d'usage reste l'utilisation des streams (flux) appliquée à des besoins de diffusions de video ou de fichier sous la forme de chunk (tronçons). Ainsi Node.js dispose d'une api permettant de brancher des flux entres eux un peu à la façon de la commande 'pipe' sous unix.