Thanks Daniel, that makes perfect sense, especially about having random - and forgotten - code in the image. I have a lot of this during my exploration sessions.
The main reason this is an issue for me is during development I sometimes find I need another library added to my classpath. Right now the only way I know how to modify the classpath in Emacs is to change the .emacs file with an add-to-list 'swank-clojure-extra-classpaths and reboot. I think my looking for an image solution might be a cop-out itself; I need to learn Emacs better so I can figure out how to modify the classpath without rebooting. Then I wouldn't be rebooting so often and I wouldn't need to be making images to save I'm-in-the-middle-of-a-thought state On Wed, Jul 8, 2009 at 10:57 AM, Daniel Lyons<fus...@storytotell.org> wrote: > > Robert, > > On Jul 8, 2009, at 2:13 AM, Robert Campbell wrote: > >> Sometimes I have pretty long REPL sessions where I'm trying to flesh >> out some ideas. When I close my instance of Clojure Box (Emacs based) >> I lose all the definitions I had worked out over time. Is there any >> way to dump namespace(s) to an image? It would be great to be able to >> load up some workspace image and pick up where I left off. > > Something similar was discussed recently but didn't come to a solid > conclusion: > http://groups.google.com/group/clojure/browse_thread/thread/4efaee2e67a272c6/f24578bfa06e6b9c?lnk=gst&q=printing+and+reading+a+function#f24578bfa06e6b9c > > This is kind of a cop-out, but in general my advice would be to work > from a file. Get your Clojure and Emacs set up so that you can compile > your stuff pretty easily and your files are in the namespace- > appropriate folder underneath your classpath. For example, I keep my > Clojure code in ~/Projects/Languages/Clojure and my Emacs config looks > like this: > > (setq swank-clojure-extra-classpaths > (cons "/Users/fusion/Projects/Languages/Clojure/classes" > (cons "/Users/fusion/Projects/Languages/Clojure" > (directory-files "~/.clojure" t "\.jar$")))) > (eval-after-load 'clojure-mode '(clojure-slime-config)) > (setq swank-clojure-extra-vm-args '("-Dclojure.compile.path=/Users/ > fusion/Projects/Languages/Clojure/classes")) > > Now if I want to load or compile a Clojure file, it just works. > > Next, when I start doodling I make a file in the aforementioned > directory and put my stuff in there and open up a slime session in > another window. C-c C-c sends the current form over Slime to the > running session. Then I do my interactive testing and exploration in > the slime session. Whenever I hit on a form I want to keep, I copy and > paste it over to the file and make it into a function over there. I > might make a function with a dumb name like demo or test and put a > bunch of forms in there, and eventually they get refactored into unit > tests (or not). If I close Emacs and reopen it on a file that doesn't > yet have a namespace and whatnot, I select the stuff I want to > evaluate and do C-c C-r to evaluate the region. It's handy, if less > transparent. > > The main advantage to this, apart from keeping the code clean, is that > you avoid the dirty image problem that can happen with Common Lisp or > (I assume) Smalltalk, where the code seems to work but accidentally > depends on cruft in the image that never made it into the source file. > I've had this happen in CL and found it very frustrating. I had a > tumblog which I tried to make faster by saving images and found one > day to my surprise that I couldn't make a fresh image on my server, > which was running a different architecture, because the only reason it > was able to make images on my box was because the first image had some > crap in it that never made it to the source file. Maybe this problem > isn't as prevalent in Smalltalk; maybe the JVM can circumvent this by > being cross-platform, but it's happened more than once in CL. IIRC, > CMU CL for a long time was self-hosting to such a degree it couldn't > be built at all without a running binary of a previous version. That > kind of thing makes porting to new architectures quite difficult. > > Just my $0.02, > > — > Daniel Lyons > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---