Hey all,
Is there any mechanism in Erlang which I can use to copy functions from
one module to another? So, if I have module *A* containing functions *a*, *b
* and *c*, is there any way in which I can copy *a* to module B?
> Hey all,
> Is there any mechanism in Erlang which I can use to copy functions
> from one module to another? So, if I have module *A* containing functions
> *a*, *b* and *c*, is there any way in which I can copy *a* to module B?
Hey Jesse
I need something stronger than just import. I need to put a bunch of
functions from different modules into a single one and transfer this to a
remote node. Then I want to be able to use these functions from the remote
node.
If I simply use import, I will not be able to use them on the remote node
without explicitly transferring all the modules to which the functions
belong to.
> --
> Jesse Gumm
> Owner, Sigma Star Systems
> 414.940.4866 || sigma-star.com || @jessegumm
> On Aug 14, 2012 9:56 AM, "Tyron Zerafa" <tyron.zer...@gmail.com> wrote:
>> Hey all,
>> Is there any mechanism in Erlang which I can use to copy functions
>> from one module to another? So, if I have module *A* containing
>> functions *a*, *b* and *c*, is there any way in which I can copy *a* to
>> module B?
On Tue, Aug 14, 2012 at 11:15 AM, Tyron Zerafa <tyron.zer...@gmail.com> wrote:
> Hey Jesse
> I need something stronger than just import. I need to put a bunch of
> functions from different modules into a single one and transfer this to a
> remote node. Then I want to be able to use these functions from the remote
> node.
> If I simply use import, I will not be able to use them on the remote node
> without explicitly transferring all the modules to which the functions
> belong to.
> On Tue, Aug 14, 2012 at 5:10 PM, Jesse Gumm <g...@sigma-star.com> wrote:
>> --
>> Jesse Gumm
>> Owner, Sigma Star Systems
>> 414.940.4866 || sigma-star.com || @jessegumm
>> On Aug 14, 2012 9:56 AM, "Tyron Zerafa" <tyron.zer...@gmail.com> wrote:
>>> Hey all,
>>> Is there any mechanism in Erlang which I can use to copy functions
>>> from one module to another? So, if I have module A containing functions a, b
>>> and c, is there any way in which I can copy a to module B?
I was thinking about the latter where I will collect all functions in a
record and send that.
The problem is that I will have to come up with a way to extract a function
form a module, that is why I was checking out whether there is anything
already implemented in Erlang.
On Tue, Aug 14, 2012 at 5:25 PM, Siraaj Khandkar <sir...@khandkar.net>wrote:
> How about sending a message with a fun? Or collecting desired funs in
> a record and sending that?
> On Tue, Aug 14, 2012 at 11:15 AM, Tyron Zerafa <tyron.zer...@gmail.com>
> wrote:
> > Hey Jesse
> > I need something stronger than just import. I need to put a bunch of
> > functions from different modules into a single one and transfer this to a
> > remote node. Then I want to be able to use these functions from the
> remote
> > node.
> > If I simply use import, I will not be able to use them on the remote node
> > without explicitly transferring all the modules to which the functions
> > belong to.
> > On Tue, Aug 14, 2012 at 5:10 PM, Jesse Gumm <g...@sigma-star.com> wrote:
> >> --
> >> Jesse Gumm
> >> Owner, Sigma Star Systems
> >> 414.940.4866 || sigma-star.com || @jessegumm
> >> On Aug 14, 2012 9:56 AM, "Tyron Zerafa" <tyron.zer...@gmail.com> wrote:
> >>> Hey all,
> >>> Is there any mechanism in Erlang which I can use to copy functions
> >>> from one module to another? So, if I have module A containing
> functions a, b
> >>> and c, is there any way in which I can copy a to module B?
> Hey Jesse
> I need something stronger than just import. I need to put a bunch > of functions from different modules into a single one and transfer > this to a remote node. Then I want to be able to use these functions > from the remote node.
> If I simply use import, I will not be able to use them on the remote > node without explicitly transferring all the modules to which the > functions belong to.
> On Tue, Aug 14, 2012 at 5:10 PM, Jesse Gumm <g...@sigma-star.com > <mailto:g...@sigma-star.com>> wrote:
> --
> Jesse Gumm
> Owner, Sigma Star Systems
> 414.940.4866 <tel:414.940.4866> || sigma-star.com
> <http://sigma-star.com> || @jessegumm
> On Aug 14, 2012 9:56 AM, "Tyron Zerafa" <tyron.zer...@gmail.com
> <mailto:tyron.zer...@gmail.com>> wrote:
> Hey all,
> Is there any mechanism in Erlang which I can use to copy
> functions from one module to another? So, if I have module *A*
> containing functions *a*, *b* and *c*, is there any way in
> which I can copy *a* to module B?
I want to implement code migration where a user just will be able to call
migrate(RemoteNode, Fun) and that local fun will end up on the RemoteNode.
Thus this needs to be generic. I cannot assume that:
1) All functions within the module are going to be used - transferring code
which will not be used will result in useless bandwidth costs.
2) All functions required are within a single module
I was going to perform a static analysis of the function to be migrated and
transfer only the functions it depends on.
On Tue, Aug 14, 2012 at 6:09 PM, Fred Hebert <monon...@ferd.ca> wrote:
> Why do you want to do this, instead of, for example, just sending the
> module to the other node?
> or alternatively use rpc:multicall(Nodes) for many nodes and doing the
> same.
> On 12-08-14 11:15 AM, Tyron Zerafa wrote:
> Hey Jesse
> I need something stronger than just import. I need to put a bunch of
> functions from different modules into a single one and transfer this to a
> remote node. Then I want to be able to use these functions from the remote
> node.
> If I simply use import, I will not be able to use them on the remote node
> without explicitly transferring all the modules to which the functions
> belong to.
> On Tue, Aug 14, 2012 at 5:10 PM, Jesse Gumm <g...@sigma-star.com> wrote:
>> --
>> Jesse Gumm
>> Owner, Sigma Star Systems
>> 414.940.4866 || sigma-star.com || @jessegumm
>> On Aug 14, 2012 9:56 AM, "Tyron Zerafa" <tyron.zer...@gmail.com> wrote:
>>> Hey all,
>>> Is there any mechanism in Erlang which I can use to copy functions
>>> from one module to another? So, if I have module *A* containing
>>> functions *a*, *b* and *c*, is there any way in which I can copy *a* to
>>> module B?
You won't be able to do exactly what you have asked for as functions only exist inside modules. Even funs are just context plus a reference to code in a module. You cannot run a fun on a node that doesn't have the module it references.
While I'm sure that Fred's idea is the best (you'd have to be sorely bandwidth constrained before other trade offs make sense) the middle ground would be to compile a new module with just the function + deps you want to migrate and send that to the remote node. You would probably need debug_info in the original module for this to work.
In your position I would use Fred's scheme. The 3-liner beats the complicated recompilation solution 99 times out of 100.
-Geoff
On 14/08/2012, at 9:20, Tyron Zerafa <tyron.zer...@gmail.com> wrote:
> I want to implement code migration where a user just will be able to call migrate(RemoteNode, Fun) and that local fun will end up on the RemoteNode. > Thus this needs to be generic. I cannot assume that:
> 1) All functions within the module are going to be used - transferring code which will not be used will result in useless bandwidth costs.
> 2) All functions required are within a single module
> I was going to perform a static analysis of the function to be migrated and transfer only the functions it depends on.
> On Tue, Aug 14, 2012 at 6:09 PM, Fred Hebert <monon...@ferd.ca> wrote:
> Why do you want to do this, instead of, for example, just sending the module to the other node?
> or alternatively use rpc:multicall(Nodes) for many nodes and doing the same.
> On 12-08-14 11:15 AM, Tyron Zerafa wrote:
>> Hey Jesse
>> I need something stronger than just import. I need to put a bunch of functions from different modules into a single one and transfer this to a remote node. Then I want to be able to use these functions from the remote node. >> If I simply use import, I will not be able to use them on the remote node without explicitly transferring all the modules to which the functions belong to.
>> On Tue, Aug 14, 2012 at 5:10 PM, Jesse Gumm <g...@sigma-star.com> wrote:
>> That sounds like you're looking for
>> --
>> Jesse Gumm
>> Owner, Sigma Star Systems
>> 414.940.4866 || sigma-star.com || @jessegumm
>> On Aug 14, 2012 9:56 AM, "Tyron Zerafa" <tyron.zer...@gmail.com> wrote:
>> Hey all,
>> Is there any mechanism in Erlang which I can use to copy functions from one module to another? So, if I have module A containing functions a, b and c, is there any way in which I can copy a to module B?
> Hey Jesse
> I need something stronger than just import. I need to put a bunch of functions from different modules into a single one and transfer this to a remote node. Then I want to be able to use these functions from the remote node.
Never mind a remote node, I just can't see taking a random bunch of functions from
different modules and stuffing them into another module making any kind of sense.
Consider:
-module(a).
..
f() -> g().
g() -> 12.
-module(b).
..
h() -> g().
g() -> 34.
Now, "put" a:f/0 and b/h:0 into a new module c.
What happens to g?
The only way I can even begin to make sense of this is to construct
the new module thus:
-module(c).
-export([f/0,h/0]).
f() -> a:f().
h() -> b:h().
and then to provide *all* of the modules.