dieggsy has quit [Remote host closed the connection]
neoncontrails has quit [Remote host closed the connection]
dieggsy has joined #lisp
hexfive has joined #lisp
dieggsy has quit [Client Quit]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
hexfive has quit [Quit: WeeChat 1.9.1]
sjl__ has joined #lisp
neoncontrails has joined #lisp
sjl__ has quit [Ping timeout: 255 seconds]
asarch has joined #lisp
schoppenhauer has quit [Ping timeout: 240 seconds]
schoppenhauer has joined #lisp
Bike has quit [Quit: Lost terminal]
teddy_error has joined #lisp
neoncontrails has quit [Remote host closed the connection]
asarch has quit [Quit: Leaving]
turkja has quit [Ping timeout: 248 seconds]
fikka has joined #lisp
Ellenor is now known as Reinhilde
fikka has quit [Ping timeout: 240 seconds]
zaquest has quit [Quit: Leaving]
aeth has quit [Ping timeout: 248 seconds]
aeth has joined #lisp
<beach>
Good morning everyone!
<basket>
Good morning, beach
<Josh_2>
Morning
sjl has quit [Ping timeout: 268 seconds]
sjl has joined #lisp
philosaur has joined #lisp
smokeink has quit [Remote host closed the connection]
shka has joined #lisp
rpg has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
vlatkoB has joined #lisp
milanj has quit [Quit: This computer has gone to sleep]
voidlily has quit [Remote host closed the connection]
yurinew has joined #lisp
voidlily has joined #lisp
LocaMocha has joined #lisp
BitPuffin|osx has joined #lisp
jameser has quit [Ping timeout: 248 seconds]
jameser has joined #lisp
Karl_Dscc has joined #lisp
oleo has quit [Quit: Leaving]
turkja has joined #lisp
zmt00 has quit [Quit: Leaving]
Reinhilde has quit [Quit: ... Sometimes, you just don't know if life is even a thing.]
flamebeard has joined #lisp
smokeink has joined #lisp
mson has quit [Quit: Connection closed for inactivity]
jfb4 has quit [Ping timeout: 240 seconds]
raphaelss has quit [Remote host closed the connection]
Ellenor has joined #lisp
jfb4 has joined #lisp
fikka has joined #lisp
yurinew has quit [Ping timeout: 248 seconds]
dec0n has joined #lisp
fikka has quit [Ping timeout: 248 seconds]
ksool has quit [Ping timeout: 240 seconds]
Karl_Dscc has quit [Remote host closed the connection]
scymtym has quit [Ping timeout: 240 seconds]
teddy_error has quit [Changing host]
teddy_error has joined #lisp
teddy_error has quit [Quit: Peace ☮︎]
teddy_error has joined #lisp
<drmeister>
How do lisp implementations save images of themselves to files?
<drmeister>
Clasp writes out code and data for each top level form and then plays them back at load time. I’m looking for something better that doesn’t require support from the gc
BigSafari has joined #lisp
jameser_ has joined #lisp
<drmeister>
I think of it like a painting. Clasp saves every brush stroke even the ones that are covered up by later stokes. Then it replays them when it loads.
<Zhivago>
I think that is not sufficient to save the image of a running machine.
<Zhivago>
Particularly where that machine has read from a file or opened a socket or whatever.
<drmeister>
I can’t save the image of a running machine because I don’t have the support of the gc.
<Zhivago>
Are you limiting it to the case of a machine which has just loaded stuff before running stuff?
jameser has quit [Ping timeout: 240 seconds]
<drmeister>
I’m not sure what the trade offs are. I would imagine starting up a single thread and opening files at startup.
<Zhivago>
(vaguely equivalent to C/C++ linkage)
<Zhivago>
Or maybe, rather -- what problem do you intend to solve with saving an image?
<drmeister>
Faster startup and solving painful bootstrapping circularity issues.
<Zhivago>
Sounds like the problem of linkage, then?
<drmeister>
A needs B and B needs A transitively.
<Zhivago>
In which case, perhaps you can turn it into load-forms for each symbol?
mishoo__ has joined #lisp
<drmeister>
I’ve been thinking that I have a symbol table and a bunch of code and classes, load time values etc. if I inventory them and write code to save and restore them - would that do the job
<Zhivago>
Sounds reasonable. If you evaluate the symbols in those forms before saving you may avoid circularity issues.
<Zhivago>
Although that would destroy identity in some cases, so never mind.
<Zhivago>
We would expect true (EQL *a* *b*), but if *b* were restored by generating code which produced a value equivalent to that of *a*, then (EQL *a* *b*) would become false.
<drmeister>
I see - it would restart with two separate conces if I did it naively.
jameser_ has quit [Read error: Connection reset by peer]
<Zhivago>
And then could add (setf *a* *b*) after that to show that if you fix that problem you re-introduce the order of effects issue.
<Zhivago>
But you could be a little more clever and have the sharing of sub-structure preserved by the regeneration code.
<drmeister>
What about having the gc compact all live objects, write them out, and then reload and relocate them.
jameser has joined #lisp
sjl__ has joined #lisp
beach` has joined #lisp
<drmeister>
I’d like to do that but I have to get hold of the raven brook folks to get some library support
Josh_2 has quit [Remote host closed the connection]
<Zhivago>
Do you really need the GC for that?
<Zhivago>
The only case I can think of would be where you have running threads or values hidden in closures.
<drmeister>
I’m not sure. It’s easier if things aren’t moving around
<Zhivago>
And since you control the closure representation, I think you can solve the latter.
<Zhivago>
I'd think of the requirement that there be no running threads at the point of save-image.
<drmeister>
Values hidden in closures?
sjl__ has quit [Ping timeout: 248 seconds]
beach has quit [Ping timeout: 264 seconds]
<drmeister>
Clasp has special issues. It represents objects using 450 c++ classes. They have all sorts of data hidden in them.
<dmiles>
*nod* .. in that case they are pointered.. i was hoping to not globally allocate simple vecotrs
d4ryus1 is now known as d4ryus
<dmiles>
(not give them a pointer address)
<dmiles>
so.. i know the example i worried about..
alexmlw has joined #lisp
<dmiles>
(eq #(1 2 ) #(1 2 ))
<dmiles>
==> T
<dmiles>
but really that should be "ok" ?
<dmiles>
if i globally allocate it returns NIL
<dmiles>
(as they would become pointers)
<dmiles>
in a way i sorta got for free that beloved identity ;/ (that not sure i really wanted :P)
<dmiles>
(as the fast EQ)
<mrottenkolber>
wat?
<mrottenkolber>
(eq #(1 2 ) #(1 2 )) → NIL
<dmiles>
i have a bug in my impl that made → T
<mrottenkolber>
oh ok
<dmiles>
i fixed the bug with horible slow code
knobo has quit [Ping timeout: 240 seconds]
<dmiles>
but i could have fixed it by heaping everything
<dmiles>
horrible slow code " is_eq(X,Y):- X==Y , (\+ compound(X)-> true ; \+ \+ ((gensym(cookie,Cook),setarg(1,X,Cook),X==Y)))." compare datastrcuure value.. if they are the same poke a hole in one and see if they are still the same
<dmiles>
but at least i guess i have 2-3 different ideas to work arround.
<dmiles>
i am asking if (eq #(1 2 ) #(1 2 )) → T melts the universe or not
<loke>
dmiles: It does.
<loke>
dmiles: It does, in the sense that a compliant CL implementation can return either NIL or T for that form.
jealousmonk has quit [Ping timeout: 260 seconds]
<dmiles>
what about (eq (cons 1 2 ) (cons 1 2 )) → T ?
<loke>
dmiles: No. That must return NIL
Amplituhedron has quit [Ping timeout: 240 seconds]
<loke>
dmiles: That depends on what MAKE-POINT dfoes.
trosa-work has joined #lisp
<loke>
If it's a resut of a DEFSTRUCT, then that comparison should return NIL
<dmiles>
for standard-object its T or MIL ?
fikka has quit [Ping timeout: 248 seconds]
<dmiles>
(erm DEFCLASS)
<loke>
dmiles: No. EQ should return NIL if the objects are different. MAKE-WHATEVER creates a _new_ instance, so those two instances are distinctly different.
<dmiles>
ok.. sorry if you impliscitly answered this already... (eq (list 1 2 ) (list 1 2 ))
<loke>
dmiles: NIL
<loke>
(let* ((x (list 1 2 3)) (y x)) (eq x xy)) ⇒ T