From: Ken A. <kan...@bb...> - 2002-08-19 13:12:27
|
Wow! In fact, if you do M-x toggle-truncate-lines to toggle back and forth, you can save time printing huge lists, and actually see them if you want too. Thanks! k At 11:28 PM 8/18/2002, Geoffrey S.Knauth wrote: >Ken, > >Adding elf/basic.scm to my command line solved my problem. Now, back to >your original question. I found with Emacs 20.x, the following Emacs Lisp >(vs. Scheme) command helped a great deal: > > (setq truncate-lines t) > >With Emacs 21.x, the above command also helped, but less so. With Emacs >20.x, the output line for (t2 100000) grows to 80 chars and then $ appears >on the right, and the function finishes quickly. With Emacs 21.x, a >right-arrow replaces the $ and the cursor tried to follow the numbers >being output so I had to type C-p (previous-line) to position the cursor >on the line above the output line so it wouldn't follow all the output. > >---------------------------------------------------------------------- >GNU Emacs 20.7.1, powerpc-apple-darwin, 1GB RAM > >(t1 100000) >14.214 sec > >(t2 100000) >163.919 sec > >[Emacs] M-: (setq truncate-lines t) RET > >(t2 100000) >5.891 sec > >---------------------------------------------------------------------- >GNU Emacs 21.2.1, i386-redhat-linux-gnu, 1GB RAM > >(t1 100000) >8.092 sec > >(t2 100000) >395.059 sec > >[Emacs] M-: (setq truncate-lines t) RET > >(t2 100000) >65.534 sec > >Geoffrey > >On Sunday, August 18, 2002, at 03:37 PM, Ken Anderson wrote: > >>Try >>java -classpath ~/test/JScheme/jscheme/lib/jscheme.jar jschem.REPL >>elf/basic.scm >> >>This is the standard environment i start with, which provides print, >>describe, inspect and other things. Perhaps we should standardize on a >>richer set of things to start with, but we've been concerned about >>startup time. >> >>At least, i should have provided what i loaded with the code i sent. >> >>k >>At 12:47 AM 8/18/2002, Geoffrey S.Knauth wrote: >>>I tried this but `print' came up undefined. I see it is in >>>primitives.scm. What did I forget to load? I invoked JScheme like this: >>> >>> java -classpath ~/test/JScheme/jscheme/lib/jscheme.jar jscheme.REPL >>> >>>Thanks, >>>Geoffrey >>> >>>On Tuesday, August 13, 2002, at 12:20 PM, Ken Anderson wrote: >>> >>>>The problem is not with the number of lines, but with displaying a >>>>single line. This code shows the problem: >>>> >>>>(define (gen n) >>>> (let loop ((n n) >>>> (sofar '())) >>>> (if (= n 0) sofar >>>> (loop (- n 1) (cons n sofar))))) >>>> >>>>;;; Xemacs 21.4 Gnu Emacs 20.7.1 >>>>(define (t1 n) ; 13 sec 51 sec >>>> (time (begin (for-each print (gen n)) #t) 1)) >>>> >>>> ; 152 sec 120 sec cursor >>>> at bottom >>>>(define (t2 n) ; 2 sec 98 sec cursor >>>>at top >>>> (time (begin (print (gen n)) #t) 1)) >>>> >>>>{ >>>>Xemacs 21.4 >>>>t1: >>>>n #chars time(sec) >>>>25000 138894 3.445 time = n/10000 + 0.245 >>>>50000 288894 6.579 >>>>100000 588895 12.978 >>>> >>>>t2: >>>>25000 138895 9.294 time = 2e-08n^2 + 0.0001n + 1.8 >>>>50000 288895 37.143 >>>>100000 588896 153.862 >>>> >>>>Gnu Emacs 20.7.1 >>>> >>>>25000 138894 11.126 time = 4*n/10000 >>>>50000 288894 18.918 >>>>100000 588895 42.202 >>>> >>>>25000 138895 11.857 time = 7e-09n^2 0.0005x - 6 >>>>50000 288895 38.482 >>>>100000 588896 118.050 >>>> >>>>If you run (t1), it prints 100,000 integers to the screen in about 13 >>>>seconds. >>>>If you do (t2) it takes 2 minutes to print the list of 100,000 >>>>integers, 588,896 characters long. >>>> >>>>The problem is formatting the output with the cursor at the bottom of >>>>the buffer. If you move the cursor to the top of the buffer before >>>>printing is much faster in Xemacs and a little faster in Gnu EMACS. >>>> >>>>While the printing is happening, XEMACS is completely unresponsive, >>>>while Gnu EMACS is fairly responsive. >>>> >>>>So a million character list takes about 8 minutes to display, and an 8 >>>>million character list takes almost 9 hours. So i try not to print them. >>>>At 04:32 AM 8/13/2002, Geoffrey S.Knauth wrote: >>>>>I'm very surprised to hear that Emacs had a memory problem holding all >>>>>this output, since in Emacs terms, 35,000 is still a relatively small >>>>>number. I've used Emacs to examine files that were hundreds of >>>>>megabytes in size. Ten years ago, however, there was an 8MB limit. >>>>> >>>>>I wonder if the Emacs behavior you saw, not being able to hold all the >>>>>output, was a side effect of the Emacs mode you were in. You wrote >>>>>that you didn't have line breaks. Perhaps you were in a mode that >>>>>looked for line breaks in order to do font/color customization, and >>>>>the mode lost its way. >>>>> >>>>>Just out of curiosity, try M-x text-mode or fundamental-mode on your >>>>>output buffer before generating huge output, just to see if that keeps >>>>>Emacs from boiling over. Also, see if you are using a relatively >>>>>recent Emacs (M-x emacs-version). >>>>> >>>>>Geoffrey >>>>> >>>>>On Monday, August 12, 2002, at 08:58 PM, Ken Anderson wrote: >>>>> >>>>>>Rusty an i have been data mining with lists of 35,000 items. >>>>>>Things work reasonably OK as long as you don't print them as a list >>>>>>to EMACS without any line breaks. I usually kill my Jscheme at that >>>>>>point and start over. >>>>>> >>>>>>I've truncated error messages to 1000 characters which helps a lot >>>>>>with reporting bugs. Perhaps we should have parameter that effects >>>>>>the REPL, to help reduce the cost of accidents. Common Lisp had >>>>>>several, such as print-length and print-level, but one might work for >>>>>>us, were small. >>>>>> >>>>>>We have one example of using {} to generate a web page, with at least >>>>>>a 1300 row x 5 columns x 3 string >>>>>> > 19,500 Jscheme frames - leads to a stack overflow. This seems >>>>>> pretty tiny, but >>>>>>the simple experiement: >>>>>>(define (grow n) >>>>>> (if (= n 0) '() >>>>>> (cons n (grow (- n 1))))) >>>>>>(define (size n) >>>>>> (print n) >>>>>> (grow n) >>>>>> (size (+ n n))) >>>>>>(size 1) >>>>>> >>>>>>produces: >>>>>> > 1 >>>>>>2 >>>>>>4 >>>>>>8 >>>>>>16 >>>>>>32 >>>>>>64 >>>>>>128 >>>>>>256 >>>>>>512 >>>>>>1024 >>>>>>2048 >>>>>>An unrecoverable stack overflow has occurred. >>>>>> >>>>>>We were able to rewrite the page in a dumb string-consing accumulator >>>>>>style and get the result we wanted. >>>>>> >>>>>>Is there an alternative way we can write !{}? >>>>>> >>>>>>k >>>>>> >>>>>> >>>>>> >>>>>>------------------------------------------------------- >>>>>>This sf.net email is sponsored by: Dice - The leading online job board >>>>>>for high-tech professionals. Search and apply for tech jobs today! >>>>>>http://seeker.dice.com/seeker.epl?rel_code=31 >>>>>>_______________________________________________ >>>>>>Jscheme-user mailing list >>>>>>Jsc...@li... >>>>>>https://lists.sourceforge.net/lists/listinfo/jscheme-user >>>-- >>>Geoffrey S. Knauth http://knauth.org/gsk >>> >>> >>> >>>------------------------------------------------------- >>>This sf.net email is sponsored by: OSDN - Tired of that same old >>>cell phone? Get a new here for FREE! >>>https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 >>>_______________________________________________ >>>Jscheme-user mailing list >>>Jsc...@li... >>>https://lists.sourceforge.net/lists/listinfo/jscheme-user >> >-- >Geoffrey S. Knauth http://knauth.org/gsk > |