All,

On the call Monday night I was asked to provide a few paragraphs on provisioning versus instance instantiation and “currying”.

 

To me this is pretty straight-forward.  I provision an application on my computer by installing it. CDL is the tool for that. Every time I want to run the program, I create a separate application instance – JSDL/BES is the right tool for that.

 

With respect to whether a particular input is bound to the application (as came up in the call). More formally:

 

Assume that a program is a function L(a,b,c,d, …) that maps the inputs to some set of outputs. (We’ll assume that the programs are deterministic.)  If we bind the formal parameter “a” with a particular value (say a particular input file), then we have effectively created a new function L’(b,c,d, ….). L and L’ are two different functions. In lambda calculus this is called “currying” – I’ve also seen it called “reification” in other contexts.

 

In terms of programs like BLAST. BLAST basically takes an input sequence database and an input sequence and generates a set of scores – usually the top k scores. . (There are many other parameters, but lets focus on the two major ones.) The scores are generated by comparing the input sequence against each of the target sequences in the database. If we “bind” BLAST to a particular target database – then we have effectively created a new BLAST, BLASTBound_to_the_particular_database. It is not the same function any more.

 

In terms of the discussion we’ve been having on the differences of the roles of CDL and JSDL/BES I think if it this way.

 

If I want to be able to run BLAST on a machine – I may use (via perhaps the program manager) CDL to “provision” BLAST in the BES container. To run BLAST with a particular set of input files, then I use JSDL/BES. If I am going to be running a large number of “BLAST jobs” against a particular DB, I may want to “provision” BLASTBound_to_the_particular_database , using CDL, and then run a set of comparisons against particular sequences using JSDL/BES.

 

Andrew Grimshaw

Professor of Computer Science

University of Virginia

434-982-2204

grimshaw@cs.virginia.edu