The case in the CL world against generic functions' performance
is often not that the dispatch is slow, but that
That said, it still matters, of course. Here's your non-destructive
seq-difference-3 but with many small lists:
(setq cc (make-list 12 "blabla"))
(setq list2 (make-list 12 "shooveedoowaa"))
;; (4.225398191 31 2.3103362619999928)
(benchmark-run 1000000 (cl-set-difference cc list2 :test #'equal))
;; (6.959332908 56 4.235225837999991)
(benchmark-run 1000000 (seq-difference-3 cc list2))
And of course the destructive version still wins by 10x
;; (0.676608019 4 0.26997238299998116)
(benchmark-run 1000000 (cl-nset-difference cc list2 :test #'equal))