Un jour, une gem

19/05/2012

Samedi c'est Celluloid

gem install celluloid

Actor-based concurrent object framework for Ruby

Pour bien commencer, qu’est-ce qu’un acteur ? C’est une entité de calcul qui échange des messages avec d’autres entités. Ou pour citer Alan Kay, le créateur de Smalltalk :

Je pense à des objets qui seraient comme des cellules ou comme des ordinateurs sur un réseau, seulement capables de communiquer avec des messages.

En gros voici un bel outil pour faire de la programmation tolérante aux fautes, très concurrentielle. Le tout en Ruby via un framework qui nous permet de faire abstraction de la partie gestion des processus, du multithread, des locks… Tout ce que qu’on aime quoi !

Un exemple simple, votre première cellule :

require 'celluloid'
class Counter
  # C'est tout ce que vous avez à faire pour transformer une classe Ruby en un Acteur Celluloid 
  include Celluloid

  # Maintenant on fait comme d'habitude
  attr_reader :count

  def initialize
    @count = 0
  end

  def increment(n = 1)
    @count += n
  end
end

# On crée un objet simplement sauf qu'il s'agit d'un objet qui parle à une cellule disposant de son propre processus 
actor = Counter.new

# La suite marche comme d'habitude :)
p actor.count

Ce petit exemple vous montre juste la simplicité d’intégration de Celluloid à vos boulots. Pour une utilisation plus complète, un peu de lecture.

Les liens utiles