Yes, I incorrectly assumed `serialize` / `deserialize` use JLD format. But anyway, even when I saved the function into "example.jls" or even plain byte array (using IOBuffer and `takebuf_array`), nothing changed. Am I missing something obvious?
On Monday, August 10, 2015 at 11:40:03 PM UTC+3, Tim Holy wrote: > > On Monday, August 10, 2015 01:13:15 PM Tony Kelman wrote: > > Should > > probably use some different extension for that, .jls or something, to > avoid > > confusion. > > Yes. That has been sufficiently confusing in the past, we even cover this > here: > > https://github.com/JuliaLang/JLD.jl#saving-and-loading-variables-in-julia-data-format-jld > > > --Tim > > > > > On Monday, August 10, 2015 at 12:45:35 PM UTC-7, Stefan Karpinski wrote: > > > JLD doesn't support serializing functions but Julia itself does. > > > > > > On Mon, Aug 10, 2015 at 3:43 PM, Andrei Zh <faithle...@gmail.com > > > > > > <javascript:>> wrote: > > >> I'm afraid it's not quite true, and I found simple way to show it. In > the > > >> next code snippet I define function `f` and serialize it to a file: > > >> > > >> julia> f(x) = x + 1 > > >> f (generic function with 1 method) > > >> > > >> julia> f(5) > > >> 6 > > >> > > >> julia> open("example.jld", "w") do io serialize(io, f) end > > >> > > >> > > >> Then I close Julia REPL and in a new session try to load and use this > > >> function: > > >> > > >> julia> f2 = open("example.jld") do io deserialize(io) end > > >> (anonymous function) > > >> > > >> julia> f2(5) > > >> ERROR: function f not defined on process 1 > > >> > > >> in error at error.jl:21 > > >> in anonymous at serialize.jl:398 > > >> > > >> So deserialized function still refers to the old definition, which is > not > > >> available in this new session. > > >> > > >> Is there any better way to serialize a function and run it on an > > >> unrelated Julia process? > > >> > > >> On Monday, August 10, 2015 at 2:33:11 PM UTC+3, Jeff Waller wrote: > > >>>> My question is: does Julia's serialization produce completely > > >>>> self-containing code that can be run on workers? In other words, is > it > > >>>> possible to send serialized function over network to another host / > > >>>> Julia > > >>>> process and applied there without any additional information from > the > > >>>> first > > >>>> process? > > >>>> > > >>>> I made some tests on a single machine, and when I defined function > > >>>> without `@everywhere`, worker failed with a message "function > myfunc > > >>>> not > > >>>> defined on process 1". With `@everywhere`, my code worked, but will > it > > >>>> work > > >>>> on multiple hosts with essentially independent Julia processes? > > >>> > > >>> According to Jey here > > >>> < > https://groups.google.com/forum/#!searchin/julia-users/jey/julia-users/ > > >>> bolLGcSCrs0/fGGVLgNhI2YJ>, Base.serialize does what we want; it's > > >>> contained in serialize.jl > > >>> <https://github.com/JuliaLang/julia/blob/master/base/serialize.jl> > >