
Hi Attila, Thanks for the patches. I've looked them over. Attila Lendvai <attila.lendvai@gmail.com> writes: [...]
Subject: [PATCH] don't abbreviate in integer &key max-len. also propagate them to make them usable as (foo (integer :max-length 2))
Propagation looks good. However, why do you feel the need to rename max-len and min-len? They are used already and there are still many variables called x-len . . . I guess I should add specialised float matchers too. [...]
Subject: [PATCH] some care for replace.lisp, notably get rid of the single usage of iterate
What's wrong with iterate? You change it to an nreverse! [...]
-(defmacro match-replace-helper ( string &rest match-replacements) +(defmacro match-replace-helper (string &body match-replacements)
Why are you using BODY here for a non-code form?
- (with-unique-names (before replacement-text after) - `(let (,replacement-text) - (if-match-bind (,before (or - ,@(loop for (match replacement) in match-replacements - collect `(progn ,match '(setf ,replacement-text (force-to-target-sequence ,replacement)))) - (last)) - ,after) - ,string - (values ,before ,replacement-text ,after) - nil)))) - -(defun-speedy concat-byte-vector (seqs) - (cond ((rest seqs) - (let ((len (loop for s in seqs summing (length (the byte-vector s))))) - (let ((ret (make-byte-vector len)) (i 0)) - (loop for a in seqs do (let ((s (force-simple-byte-vector a))) (replace ret s :start1 i) (incf i (length s)))) - ret))) - (t - (force-byte-vector (first seqs))))) - -(defun-speedy concat-string (seqs) - (apply 'concatenate 'string seqs)) +(defun-speedy concatenate-sequences (prototype sequences) + (etypecase prototype + (string + (let ((*print-pretty* nil))
This makes no difference I believe ^^^^
+ (with-output-to-string (out) + (dolist (el sequences) + (write-string el out)))))
This rewrite seems in aid of faster string concatenation. I have a good strcat somewhere, I can put that in. Do you have a benchmark? [...]