From: <don...@is...> - 2008-09-25 23:02:06
|
Bruno Haible writes: > The maximum size for arrays and strings is driven by the desire to have only > two header words per instance. It is a compromise. One could also choose to > have all arrays and all strings with three header words per instance. This > would increase the memory size by a certain percentage and the run time of > all programs by twice this percentage (according to Michael Monagan's > rule that when the memory use of a program increases by a factor X, its > use of time increases by a factor X^2). I'm not familar with that rule. What ever became of time/space tradeoffs? Certainly there are lots of small arrays (especially strings), and it would be nice to be able to represent them with low overhead. In fact, I suggest that for strings that are short enough, it would make sense to have a representation analogous to fixnum, i.e., one other 8 bit type code for short string. By the time you get to large arrays, the difference between 2 and 3 header words doesn't matter. So it would make sense to have another type for large arrays. > but as Sam mentioned, ARRAY-DIMENSION-LIMIT must be a fixnum. and > MOST-POSITIVE-FIXNUM is 2^24-1. 24 = oint_data_len. Even worse, array total size must be a fixnum. I wonder why the writers of the spec made that decision. (Any ideas?) It seems absurd to me right now. Perhaps there could be yet another type for BIG Arrays. I know, I should implement that type in CLOS. I'm tempted to do so. If someone out there beats me to it I won't object. > You can write an abstraction of very long arrays, say in terms of > an array of arrays, in about 50 lines of code. With clisp's > extensible sequences, you can can even use the normal sequence > functions on it. Refer to SYS::%DEFSEQ. I see, it might have been worth reading the rest of the message before typing the last few sentences. I guess I can't change functions like aref without violating the spec. So I'd have to change my code to use the new functions. Does anyone out there already have a very large array package? |