Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
First step to return value on storage model.
[simgrid.git] / doc / bindings.doc
index 798e21d..f88237a 100644 (file)
@@ -2,9 +2,14 @@
 
 \htmlinclude .bindings.doc.toc
 
-\section bindings_start Available bindings
+\section bindings_binding_Java Java Binding
+<a href="http://simgrid.gforge.inria.fr/simgrid-java/1.0/doc/">Simgrid-Java documentation</a>.
+
+\section bindings_binding_Ruby Ruby Binding
+<a href="http://simgrid.gforge.inria.fr/simgrid-ruby/1.0/doc/">Simgrid-Ruby documentation</a>.
+
+\section bindings_binding_lua Lua Binding
 
-\subsection bindings_binding_lua Lua Binding
 Most of Simgrid modules require a  good level in C programming, since simgrid is used to be as standard C library.
  Sometime users prefer using some kind of « easy scripts » or a language easier to code with, for their works,
  which avoid dealing with C errors, and sometime an important  gain of time.
@@ -12,7 +17,7 @@ Besides Java Binding, Lua  and Ruby bindings are available since version 3.4 of
 for MSG Module, and we are currenlty working on bindings for other modules.
 
 
-\subsubsection bindings_binding_lua_about What is lua ?
+\subsection bindings_binding_lua_about What is lua ?
 Lua is a lightweight, reflective, imperative and functional programming language,
  designed as a scripting language with extensible semantics as a primary goal (see official web site <a href="http://www.lua.org">here</a>).
 \subsubsection bindings_binding_lua_why Why lua ?
@@ -28,7 +33,7 @@ Actually, the use of lua in Simgrid is quite simple, you have just to follow the
   - and … Running the Simulation.
   
 \dontinclude lua/masterslave/master.lua
-\subsubsection bindings_binding_lua_example_master_slave Master/Slave Example
+\subsection bindings_binding_lua_example_master_slave Master/Slave Example
 
  \li Master Code
  \until end_of_master
@@ -46,7 +51,7 @@ this function return directly the task recevied.
 \li Set Environmenet and run application
 \until simgrid.clean()
 
-\subsubsection bindings_binding_lua_example_data Exchanging Data
+\subsection bindings_binding_lua_example_data Exchanging Data
 You can also exchange data between Process using lua. for that, you have to deal with lua task as a table,
 since lua is based itself on a mechanism of tables,
 so you can exchange any kind of data (tables, matrix, strings,…) between process via tasks.
@@ -77,7 +82,7 @@ so you can exchange any kind of data (tables, matrix, strings,…) between proce
        You can find  a complet example (matrix multiplication case) in the file example/lua/mult_matrix.lua. 
 
 
-\subsubsection bindings_binding_lua_example_bypass Bypass XML
+\subsection bindings_binding_lua_example_bypass Bypass XML
        maybe you wonder if there is a way to bypass the XML files,
         and describe your platform directly from the code, with lua bindings it's Possible !! how ?
        We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files
@@ -148,163 +153,4 @@ Yes, Here too you have to resgiter your application before running the simulatio
 
 the full example is distributed in the file examples/lua/master_slave_bypass.lua
 
-\subsection bindings_binding_ruby Ruby Binding
-
-
-\subsubsection bindings_binding_ruby_simgrid Use Ruby in Simgrid
-Since v3.4, the use of <a href="http://ruby-lang.org">ruby</a> in simgrid is available for the MSG Module.
-you can find almost all MSG functionalities in Ruby code, that allows you to set up your environment, manage tasks between hosts and run the simulation.
-
-\subsubsection bindings_binding_ruby_example Master/Slave Ruby Application
-for each process method(master and slave in this example), you have to associate a ruby class, that should inherit from <i>MSG::Process</i> ruby class,
-  with a 'main' function that describe the behaviour of the process during the simulation.
-\li required stuff
-\verbatim
-require 'simgrid'
-include MSG
-\endverbatim
-
-\li Master code
-\verbatim
-class Master < MSG::Process 
-  # main : that function that will be executed when running simulation
-
-  def main(args) # args is an array containing arguments for function master
-   size = args.size
-   for i in 0..size-1
-     MSG::info("args["+String(i)+"]="+args[i])
-   end
-  
-   raise "Master needs 3 arguments" if size < 3 
-   numberOfTask = Integer(args[0]) 
-   taskComputeSize = Float(args[1])
-   taskCommunicationSize = Float(args[2])
-   slaveCount = Integer(args[3]) 
-   
-   # Creates and sends the tasks
-    for i in 0..numberOfTask-1
-     task = Task.new("Task_"+ i.to_s, taskComputeSize , taskCommunicationSize);
-     mailbox = "slave " + (i%slaveCount).to_s
-     MSG::info("Master Sending "+ task.name + " to " + mailbox + " with Comput Size " + 
-           task.compSize.to_s)
-     task.send(mailbox)
-     MSG::info("Master Done Sending " + task.name + " to " + mailbox)
-    end
-  
-   # Sending Finalize MSG::Tasks
-   MSG::info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.")
-   for i in 0..slaveCount-1
-     mailbox = "slave " + i.to_s
-     finalize_task = Task.new("finalize",0,0)
-     finalize_task.send(mailbox)
-   end
-   MSG::info("Master : Everything's Done")
-  end    
-end
-\endverbatim
-
-
-the class MSG::Task contains methods that allows the management of the native MSG tasks.
-in master ruby code we used : 
-  - <i>MSG::Task.new(task_name,compute_size,communication_size)</i> : to instanciate a new task.
-  - <i>MSG::Task.send(mailbox)</i> : to send the task via a mailbox alias.
-  - <i>MSG::Task.name</i> : to get the task's name.
-
-\li Slave code
-\verbatim
-class Slave < MSG::Process
-
-  def main(args)
-    mailbox = "slave " + args[0]
-    for i in 0..args.size-1
-      MSG::debug("args["+String(i)+"]="+args[i])
-    end
-
-    while true
-       MSG::info("Slave '"+ mailbox +"' waiting for new task");
-       task = Task.receive(mailbox)
-       if (task.name == "finalize")
-              break
-       end
-       task.execute
-       MSG::info("Slave '" + mailbox + "' done executing task "+ task.name + ".")
-    end
-    MSG::info("I'm done, see you")
-  end
-end
-\enverbatim
-to receive a task, we use the method <i>MSG::Task.receive(mailbox)</i> that return a MSG:Task object (received task).
-
-\li Main chunk
-
-\verbatim
-require 'simgrid'
-include MSG
-(...)
-
-if (ARGV.length == 2) 
-       MSG.createEnvironment(ARGV[0])
-       MSG.deployApplication(ARGV[1])
-
-else
-
-       MSG.createEnvironment("platform.xml")
-       MSG.deployApplication("deploy.xml")
-end
-MSG.run
-puts "Simulation time : " + MSG.getClock.to_s
-MSG.exit
-\endverbatim
-
-- <i>MSG.createEnvironment(platform_file)</i> : set up the environment
-- <i>MSG.deployApplication(deployment_file)</i> : load the deployment file description.
-- <i>MSG.run</i> : run the simulation
-
-\subsubsection bindings_binding_ruby_data Exchanging data 
-ruby bindings provides two ways to exchange data between ruby processes.
-\li MSG::Task.join & MSG::Task.data <br/>
-
-  the MSG::Task class contains 2 methods that allows a data exchange between 2 process.
-  
-  -<i>MSG::Task.join</i> : makes possible to join any kind of ruby data within a task.
-  \verbatim
-   ...
-   myTable = Array.new
-   myTable <<1<<-2<<45<<67<<87<<76<<89<<56<<78<<3<<-4<<99
-   # Creates and send Task With the Table inside
-   task = MSG::Task.new("quicksort_task",taskComputeSize, taskCommunicationSize);
-   task.join(myTable);
-   ...
-   task.send(mailbox);
-   \endverbatim
-   -<i>MSG::Task.data</i> : to access to the data contained into the task.
-   \verbatim
-   ...
-   task = MSG::Task.receive(recv_mailbox.to_s)
-   table = task.data
-   quicksort(table,0,table.size-1)
-   ...
-   \endverbatim
-you can find a complet example illustrating the use of those methods  in file /example/ruby/Quicksort.rb
-
-\li inheritence 
- another 'object-oriented' way to do it, is to make your own 'task' class that inherit from  MSG::Task ,
- and contains data you want to deal with, the only 'tricky' thing is that "the initializer" method has no effect ! 
- the use of some getter/setter methods would be the simple way to manage your data :)
- \verbatim
-class PingPongTask < MSG::Task
-  # The initialize method has no effect 
-  @time 
-  def setTime(t)
-    @time = t
-  end
-  def getTime()
-    return @time
-  end
-end
- \endverbatim
- you can find an example of use in file example/ruby/PingPong.rb
-
  */
\ No newline at end of file