Class: Proc

Inherits:
Object show all
Defined in:
lib/proc.rb

Overview

Quelques methodes ajoutees a la classe Proc, donc avec "monkey patch", pour permettre la creation de pipelines et de fermes (farms), et ce directement a partir d'un objet de classe Proc (lambda, fonction anonyme).

Il s'agit donc une forme de conversion implicite d'une lambda en un pipeline.

Instance Method Summary collapse

Instance Method Details

#&(other) ⇒ Object



26
27
28
# File 'lib/proc.rb', line 26

def &( other )
  (PRuby::Pipeline.create self).add_stage( other )
end

#*(nb) ⇒ PRuby::Pipeline

Un Proc qui recoit ce message est implicitement utilise comme une ferme ayant le nombre indique de travailleurs.

Parameters:

  • nb (Fixnum)

    Nombre d’instances de travailleur requis

Returns:

  • (PRuby::Pipeline)

    Une ferme avec nb instances, qui peut etre utilisee ensuite dans un pipeline, ou chaque travailleur execute self



36
37
38
# File 'lib/proc.rb', line 36

def *( nb )
  PRuby::PipelineFactory.farm self, nb
end

#go(*canaux) ⇒ Thread

Lance l'execution d'une lambda dans un Thread indepdendant, lambda qui utilise une serie de canaux de communication (Channel) pour interagir avec d'autres processus.

Plus specifiquement, la methode vise a emuler la facon utilisee en go pour lancer l'execution d'une goroutine, et ce en utilisant les methodes appropriees definies dans la classe Channel:

- Go:
   func p1( cin chan int, cout chan int ) {
     n <- cin
     cout <- 2 * n + 1
     close( cout )
   }
   go p1( c0, c1 )
   c0 <- 10
   <- c1 # Retourne 21

- PRuby
   p1 = lambda do |cin, cout|
     n = cin.get
     cout << 2 * n + 1
     cout.close
   end
   p1.go( c0, c1 )
   c0 << 10
   c1.get # Retourne 21

Parameters:

  • canaux (Array<Channel>)

    Les canaux de communication a utiliser

Returns:

  • (Thread)

    Un Thread, sur lequel on peut faire join si on desire attendre la terminaison



71
72
73
# File 'lib/proc.rb', line 71

def go( *canaux )
  Thread.new { call *canaux }
end

#|(other) ⇒ PRuby::Pipeline

Un Proc qui recoit ce message est implicitement transforme en un premier etage de pipeline, ou le 2e etage est l'autre argument (other).

Parameters:

  • other (Proc, Pipeline)

    Autre objet a utiliser comme 2e etage du pipeline a creer

Returns:

  • (PRuby::Pipeline)

    Un pipeline avec self comme 1er etage et other comme 2e etage



22
23
24
# File 'lib/proc.rb', line 22

def |( other )
  (PRuby::Pipeline.create self).add_stage( other )
end