Rinda (Ruby programmeringsspråk)

Rinda är ett mjukvarubibliotek för att skapa modulära och distribuerade samarbetstjänster i Ruby med hjälp av tupelutrymmet eller Lindas distribuerade datorparadigm .

Baserat på en källkod som ursprungligen släpptes till Ruby-gemenskapen av Masatoshi SEKI 2000, absorberades Rinda senare i Rubys kärndistribuerade Ruby- modul (DRb). Rinda har distribuerats som en del av kärnbiblioteket i Ruby sedan Ruby 1.8.

Exempel användning

Rinda tillhandahåller ett ramverk genom vilket flera Ruby-processer (som eller kanske inte körs på samma maskin) kan lägga till, komma åt och ändra tuples (en ordnad lista med element) lagrade i ett delat datalager (tuplespacet).

Till exempel skapar följande program ett nytt Rinda tuplespace och initierar en DRb-tjänst som väntar på förfrågningar som kommer över nätverket.

 

  
 
 kräver  'rinda/tuplespace'  URI  =  "druby://localhost:61676"  DRb  .  start_service  (  URI  ,  Rinda  ::  TupleSpace  .  ny  )  DRb  .  tråd  .  Ansluta sig 

Med Rinda kan andra applikationer polla tupelutrymmet för tupler som matchar specifika kriterier.

Till exempel ansluter programmet nedan till en Rinda-tjänst och lyssnar efter vilken tuppel som helst som består av en aritmetisk operator följt två siffror (som sekvensen "+ 2 4") När en sådan tuppel upptäcks beräknar programmet resultatet av den matematiska operationen ( till exempel bearbetar "+ 2 4" till "6") och lagrar det i tuplespace.

 

  

   
 
         
    
 kräver  'rinda/rinda'  URI  =  "druby://localhost:61676"  DRb  .  start_service  ts  =  Rinda  ::  TupleSpaceProxy  .  new  (  DRbObject  .  new  (  noll  ,  URI  ))  loop  do  ops  ,  a  ,  b  =  ts  .  ta  (  [  %r{^[-+/*]$}  ,  Numerisk  ,  Numerisk  ]  )  ts  .  skriv  (  [  "resultat"  ,  a  .  skicka  (  ops  ,  b  )  ]  )  slut 

Slutligen kan Rinda-applikationer lägga till eller ta bort tuples från tuplespace.

Till exempel postar följande program prefix aritmetiska tupler till tuppelutrymmet och läser tillbaka resultatet (upplagt av programmet ovan).

 

  

   
               
  
  
     
    0 
 kräver  'rinda/rinda'  URI  =  "druby://localhost:61676"  DRb  .  start_service  ts  =  Rinda  ::  TupleSpaceProxy  .  nya  (  DRbObject  .  new  (  noll  ,  URI  ))  tupler  =  [[  "*"  ,  2  ,  2  ]  ,  [  "+"  ,  2  ,  5  ]  ,  [  "-"  ,  9  ,  3  ]]  tupler  .  varje  gör  |  t  |  ts  .  skriv  (  t  )  res  =  ts  .  take  (  [  "resultat"  ,  noll  ]  )  sätter  "  #{  res  [  1  ]  }  =  #{  t  [  1  ]  }  #{  t  [  ]  }  #{  t  [  2  ]  }  "  slut 

externa länkar