GNU bug report logs -
#73431
Add `setf` support for `stream.el` in ELPA
Previous Next
Reported by: Okamsn <okamsn <at> protonmail.com>
Date: Mon, 23 Sep 2024 01:35:01 UTC
Severity: wishlist
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
Bug is archived. No further changes may be made.
Full log
Message #58 received at 73431 <at> debbugs.gnu.org (full text, mbox):
Michael Heerdegen wrote:
> Okamsn via "Bug reports for GNU Emacs, the Swiss army knife of text
> editors" <bug-gnu-emacs <at> gnu.org> writes:
>
>> Please see the attached file. It changes streams to be structs, warns
>> that streams are not mutable, adds a creation method for arrays that
>> doesn't create intermediate sub-arrays, and adds some methods for
>> streams for more of the seq.el functions.
>
> Thank you for working on this.
>
>> * stream.el (stream): Define the structure using 'cl-defstruct'.
>
> Does changing the internal representation of streams have an effect
> on the speed of the run code?
I think that it does make it slower. I am trying to test it, and I think
that making records is slower than making cons cells. I think that
accessing the rest of the stream takes longer because the accessors
created by `cl-defstruct` always perform type checking. It seems to take
about twice as long when compared to naively using `car` and `cdr`.
Do you think that it would be better to disable the type checking in the
accessors? If so, would you please share how to do that? The manual
talks about using `(optimize (safety 0))` in a declare form, but it also
seems to say that it cannot be done locally for just the `cl-defstruct`
usage. If it cannot be done, do think it makes sense to use
`make-record` directly, along with custom function to replace the
generated accessors?
> I don't like these, apart from seq-concatenate.
>
> That we have a unified interface for different types of seqs doesn't
> mean we must implement every functionality for every type - we can limit
> to those where it makes sense. If you have to translate the complete
> stream into an intermediate seq type to implement a feature (like
> sorting) hints at that it might not make sense. And I think indeed: if
> you need to sort any data than you probably should not use streams to
> represent them at all. In the rare cases where this really makes sense
> conceptually it is even better to do the translation into a different
> seq type explicitly. Converting the result back into a delayed list
> makes hardly sense. This is inefficient and leads to bad style.
OK, I will remove them. For the sorting, I looked at Scheme's SRFI-41
(https://srfi.schemers.org/srfi-41/srfi-41.html), which says the
Quicksort could be used for its implementation of streams, but I did not
look in detail.
For passing a stream to the creation function `stream`, do you think it
makes sense to make a shallow copy of the stream via `stream-delay`
(similar to `seq-copy`), or do you think it makes sense to return it
unmodified, which is how I've written it currently?
Thank you.
This bug report was last modified 264 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.