From: Geoffrey S.K. <ge...@kn...> - 2002-08-18 04:48:13
|
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 |