Hi,

not yet. I made some initial research regarding serialization of ASTs and
reconstructing functions from them, but it seems quite a tricky procedure
and I have very little time for this project now. I plan to come back to
this issue around the beginning of the next month.

On Mon, Sep 21, 2015 at 11:25 AM, edward zhang <[email protected]> wrote:

> hi, dear,
>  have you already fixed this problem?
>
>
> 在 2015年8月14日星期五 UTC+8下午11:06:30,Andrei Zh写道:
>
>>
>> Hi Jake,
>>
>> your example works because you don't leave Julia session. `foo` is
>> defined in this session, so the the pair of module name and function name
>> is enough to get function object. If you save serialized function (or just
>> retype it byte by byte) , it won't work. Here's an example:
>>
>> Session #1:
>>
>> julia> io = IOBuffer()
>> IOBuffer(data=Uint8[...], readable=true, writable=true, seekable=true,
>> append=false, size=0, maxsize=Inf, ptr=1, mark=-1)
>>
>>
>> julia> foo(x) =  x + 1
>> foo (generic function with 1 method)
>>
>>
>> julia> serialize(io, foo)
>>
>>
>> julia> takebuf_array(io)
>> 9-element Array{Uint8,1}:
>>  0x13
>>  0x02
>>  0x23
>>  0x2f
>>  0x02
>>  0x03
>>  0x66
>>  0x6f
>>  0x6f
>>
>>
>> julia>
>>
>>
>>
>> Session #2:
>>
>> julia> data = Uint8[0x13, 0x02, 0x23, 0x2f, 0x02, 0x03, 0x66, 0x6f, 0x6f]
>> 9-element Array{Uint8,1}:
>>  0x13
>>  0x02
>>  0x23
>>  0x2f
>>  0x02
>>  0x03
>>  0x66
>>  0x6f
>>  0x6f
>>
>>
>> julia> io = IOBuffer(data)
>> IOBuffer(data=Uint8[...], readable=true, writable=false, seekable=true,
>> append=false, size=9, maxsize=Inf, ptr=1, mark=-1)
>>
>>
>> julia> bar = deserialize(io)
>> (anonymous function)
>>
>>
>> julia> bar(1)
>> ERROR: function foo not defined on process 1
>>  in error at error.jl:21
>>  in anonymous at serialize.jl:398
>>
>>
>> julia>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Friday, August 14, 2015 at 5:49:55 PM UTC+3, Jake Bolewski wrote:
>>>
>>> Andrei Zh
>>>
>>> I'm confused.  Have you actually tried?
>>>
>>> julia> io = IOBuffer()
>>> IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true,
>>> append=false, size=0, maxsize=Inf, ptr=1, mark=-1)
>>>
>>> julia> foo(x) =  x + 1
>>> foo (generic function with 1 method)
>>>
>>> julia> serialize(io, foo)
>>>
>>> julia> seekstart(io)
>>> IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true,
>>> append=false, size=9, maxsize=Inf, ptr=1, mark=-1)
>>>
>>> julia> baz = deserialize(io)
>>> foo (generic function with 1 method)
>>>
>>> julia> baz(1)
>>> 2
>>>
>>> The serialization code won't recursively serialize all the of the
>>> functions dependencies so you will have to send/serialize the code that
>>> defines the environment (types, constants, Packages, etc).
>>>
>>

Reply via email to