Here's my attempt at inspecting common function lengths in CL, and the results:
(defmacro with-gensyms (syms &body body)
`(let ,(mapcar #'(lambda (x) `(,x (gensym ,(string x)))) syms)
,@body))
(defmacro get-symbols-list (kind &optional package)
(with-gensyms (symbol result)
`(let (,result)
(,(ecase kind
(:all 'do-all-symbols)
(:any 'do-symbols)
(:external 'do-external-symbols))
(,symbol ,@(if (eql kind :all) nil `(,package))
(nreverse ,result))
(push ,symbol ,result)))))
(defun get-all-external-symbols ()
(mapcan #'(lambda (x) (get-symbols-list :external x))
(list-all-packages)))
(defun sort-symbols-by-name-length (syms)
(sort (copy-list syms) #'> :key #'(lambda (x) (length (symbol-name x)))))
(defun list-name-length-sorted-symbols
(&key
(amount nil amount-present-p)
(external-only nil)
(functions-only nil)
(package nil package-present-p))
(when package-present-p
(setq package (find-package package)))
(let* ((fun-names
(sort-symbols-by-name-length
(if package-present-p
(if external-only
(get-symbols-list :external package)
(get-symbols-list :any package))
(if external-only
(get-all-external-symbols)
(get-symbols-list :all)))))
(fun-names
(if functions-only
(remove-if (complement #'fboundp) fun-names)
fun-names)))
(if amount-present-p
(subseq fun-names 0 amount)
fun-names)))
(defun print-list (list)
(mapcar #'print list))
;;; Here's the result for standard CL functions:
(print-list
(remove-if
#'(lambda (symbol)
(<= (length (symbol-name symbol)) 25))
(list-name-length-sorted-symbols
:external-only t
:functions-only t
:package :cl)))
=> prints
; 35 chars is the longest
UPDATE-INSTANCE-FOR-REDEFINED-CLASS
UPDATE-INSTANCE-FOR-DIFFERENT-CLASS
LOAD-LOGICAL-PATHNAME-TRANSLATIONS
SIMPLE-CONDITION-FORMAT-ARGUMENTS
SIMPLE-CONDITION-FORMAT-CONTROL
PPRINT-EXIT-IF-LIST-EXHAUSTED
LOGICAL-PATHNAME-TRANSLATIONS
MAKE-DISPATCH-MACRO-CHARACTER
GET-DISPATCH-MACRO-CHARACTER
SET-DISPATCH-MACRO-CHARACTER
INVOKE-RESTART-INTERACTIVELY
TWO-WAY-STREAM-OUTPUT-STREAM
TWO-WAY-STREAM-INPUT-STREAM
LISP-IMPLEMENTATION-VERSION
MAKE-LOAD-FORM-SAVING-SLOTS
CONCATENATED-STREAM-STREAMS
HASH-TABLE-REHASH-THRESHOLD
UPGRADED-ARRAY-ELEMENT-TYPE
FUNCTION-LAMBDA-EXPRESSION
READ-PRESERVING-WHITESPACE
COMPUTE-APPLICABLE-METHODS
ARITHMETIC-ERROR-OPERATION
UPGRADED-COMPLEX-PART-TYPE
TRANSLATE-LOGICAL-PATHNAME
;;; Now let's see all-times longest name within the internals/loaded packages:
(print-list (list-name-length-sorted-symbols :amount 100))
=> prints
SB-VM::|CACHED-FUN--MOV[(X66-SIMPLE-DIR ((OP 40) (IMM NIL TYPE 'IMM-ADDR)) (BACKQ-LIST 'NAME 'TAB (SWAP-IF 'DIR 'ACCUM , '([ IMM ]))))]-X66-SIMPLE-DIR-PREFILTER|
SB-VM::|CACHED-FUN--MOV[(X66-SIMPLE-DIR ((OP 40) (IMM NIL TYPE 'IMM-ADDR)) (BACKQ-LIST 'NAME 'TAB (SWAP-IF 'DIR 'ACCUM , '([ IMM ]))))]-X66-SIMPLE-DIR-PRINTER|
SB-VM::|CACHED-FUN--BT[(X66-EXT-REG/MEM-IMM ((OP (93 4)) (REG/MEM NIL TYPE WORD-REG/MEM) (IMM NIL TYPE IMM-DATA) (WIDTH 0)))]-X66-EXT-REG/MEM-IMM-PREFILTER|
;;; ...removed a lot of the same here...
SB-VM::|CACHED-FUN--ADD[(X66-ACCUM-IMM ((OP 2)))]-X66-ACCUM-IMM-PREFILTER|
SB-PCL::MAKE-OPTIMIZED-STRUCTURE-SLOT-BOUNDP-USING-CLASS-METHOD-FUNCTION
SB-PCL::MAKE-OPTIMIZED-STRUCTURE-SLOT-VALUE-USING-CLASS-METHOD-FUNCTION
SB-VM::|CACHED-FUN--PUSH[(REG-NO-WIDTH ((OP 10)))]-REG-NO-WIDTH-PRINTER|
SB-VM::|CACHED-FUN--ADD[(X66-ACCUM-IMM ((OP 2)))]-X66-ACCUM-IMM-PRINTER|
SB-PCL::MAKE-OPTIMIZED-STD-SETF-SLOT-VALUE-USING-CLASS-METHOD-FUNCTION
GET-ALL-SYMBOLS-WITH-A-FUNCTIONAL-VALUE-SORTED-BY-NAME-LENGTH
SB-IMPL::SIMPLE-CHARACTER-STRING-REPLACE-FROM-SIMPLE-CHARACTER-STRING*
SB-VM::|CACHED-FUN--XCHG[(REG-REG/MEM ((OP 67)))]-REG-REG/MEM-PRINTER|
SB-VM::DATA-VECTOR-REF-WITH-OFFSET/SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT
SB-VM::|CACHED-FUN--CMOV[(X66-COND-MOVE NIL)]-X66-COND-MOVE-PREFILTER|
SB-VM::DATA-VECTOR-SET-WITH-OFFSET/SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT
SB-VM::DATA-VECTOR-REF-WITH-OFFSET/SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT
SB-VM::DATA-VECTOR-SET-WITH-OFFSET/SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT
SB-VM::|CACHED-FUN--CALL[(NEAR-JUMP ((OP 232)))]-NEAR-JUMP-PREFILTER|
SB-VM::IMPL-OF-VM-SUPPORT-ROUTINE-MAKE-NLX-ENTRY-ARG-START-LOCATION
SB-VM::|CACHED-FUN--CMPS[(STRING-OP ((OP 83)))]-STRING-OP-PREFILTER|
SB-VM::|CACHED-FUN--CMOV[(X66-COND-MOVE NIL)]-X66-COND-MOVE-PRINTER|
SB-VM::IMPL-OF-VM-SUPPORT-ROUTINE-COMBINATION-IMPLEMENTATION-STYLE
SB-PCL::MAKE-OPTIMIZED-STD-SLOT-BOUNDP-USING-CLASS-METHOD-FUNCTION
SB-KERNEL::OBJECT-NOT-SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT-ERROR-HANDLER
SB-KERNEL::OBJECT-NOT-SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT-ERROR-HANDLER
SB-KERNEL:REDEFINITION-REPLACES-COMPILED-FUNCTION-WITH-INTERPRETED-P
SB-VM::|CACHED-FUN--CALL[(NEAR-JUMP ((OP 232)))]-NEAR-JUMP-PRINTER|
SB-VM::|CACHED-FUN--JMP[(SHORT-JUMP ((OP 11)))]-SHORT-JUMP-PRINTER|
SB-VM::DATA-VECTOR-REF-C-WITH-OFFSET/SIMPLE-ARRAY-UNSIGNED-BYTE-4
SB-VM::DATA-VECTOR-REF-C-WITH-OFFSET/SIMPLE-ARRAY-UNSIGNED-BYTE-2
(print-list (list-name-length-sorted-symbols :external-only t :functions-only t :amount 50))
=> prints
SB-KERNEL:REDEFINITION-REPLACES-COMPILED-FUNCTION-WITH-INTERPRETED-P
SB-C:VM-SUPPORT-ROUTINES-MAKE-NLX-ENTRY-ARG-START-LOCATION
SB-C:VM-SUPPORT-ROUTINES-MAKE-RETURN-PC-PASSING-LOCATION
SB-C:VM-SUPPORT-ROUTINES-MAKE-UNKNOWN-VALUES-LOCATIONS
SB-C:VM-SUPPORT-ROUTINES-MAKE-RETURN-PC-SAVE-LOCATION
SB-C:VM-SUPPORT-ROUTINES-MAKE-OLD-FP-PASSING-LOCATION
SB-C:VM-SUPPORT-ROUTINES-MAKE-NUMBER-STACK-POINTER-TN
SB-C:DEFINITION-SOURCE-LOCATION-TOPLEVEL-FORM-NUMBER
SB-KERNEL:%MAKE-FUNCALLABLE-STRUCTURE-INSTANCE-ALLOCATOR
SB-KERNEL:UNINTERESTING-ORDINARY-FUNCTION-REDEFINITION-P
SB-C:VM-SUPPORT-ROUTINES-MAKE-OLD-FP-SAVE-LOCATION
SB-KERNEL:UNINTERESTING-GENERIC-FUNCTION-REDEFINITION-P
SB-C:VM-SUPPORT-ROUTINES-GENERATE-RETURN-SEQUENCE
SB-C:VM-SUPPORT-ROUTINES-MAKE-ARG-COUNT-LOCATION
SB-C:VM-SUPPORT-ROUTINES-SELECT-COMPONENT-FORMAT
SB-KERNEL:PROGRAM-ASSERT-SYMBOL-HOME-PACKAGE-UNLOCKED
SB-MOP:GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER
SB-MOP:GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER
SB-C:VM-SUPPORT-ROUTINES-MAKE-DYNAMIC-STATE-TNS
SB-C:VM-SUPPORT-ROUTINES-GENERATE-CALL-SEQUENCE
SB-MOP:GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER
SB-C:VM-SUPPORT-ROUTINES-IMMEDIATE-CONSTANT-SC
SB-C:VM-SUPPORT-ROUTINES-STANDARD-ARG-LOCATION
SB-C:VM-SUPPORT-ROUTINES-MAKE-STACK-POINTER-TN
SB-MOP:COMPUTE-APPLICABLE-METHODS-USING-CLASSES
SB-MOP:COMPUTE-APPLICABLE-METHODS-USING-CLASSES
SB-MOP:COMPUTE-APPLICABLE-METHODS-USING-CLASSES
SB-KERNEL:REDEFINITION-REPLACES-GENERIC-FUNCTION-P
SB-C:VM-SUPPORT-ROUTINES-LOCATION-PRINT-NAME
SB-DISASSEM:MAYBE-NOTE-NIL-INDEXED-SYMBOL-SLOT-REF
SB-KERNEL:DEFINED-FTYPE-MATCHES-DECLARED-FTYPE-P
SB-C:VM-SUPPORT-ROUTINES-MAKE-CALL-OUT-TNS
SB-C:VM-SUPPORT-ROUTINES-PRIMITIVE-TYPE-OF
SB-C:DEFINITION-SOURCE-LOCATION-NAMESTRING
SB-SYS:ENSURE-DYNAMIC-FOREIGN-SYMBOL-ADDRESS
SB-KERNEL:BUILT-IN-CLASSOID-DIRECT-SUPERCLASSES
SB-KERNEL:VECTOR-OF-CHECKED-LENGTH-GIVEN-LENGTH
SB-KERNEL:SEQUENCE-OF-CHECKED-LENGTH-GIVEN-TYPE
SWANK:LIST-ALL-SYSTEMS-IN-CENTRAL-REGISTRY
ASDF:PREFERENCE-FILE-FOR-SYSTEM/OPERATION
SB-EVAL:INTERPRETED-FUNCTION-SOURCE-LOCATION
SB-MOP:FUNCALLABLE-STANDARD-INSTANCE-ACCESS
SB-MOP:SPECIALIZER-DIRECT-GENERIC-FUNCTIONS
SB-MOP:FUNCALLABLE-STANDARD-INSTANCE-ACCESS
SB-MOP:SPECIALIZER-DIRECT-GENERIC-FUNCTIONS
SB-VM:DESCRIPTOR-VS-NON-DESCRIPTOR-STORAGE
SB-MOP:GENERIC-FUNCTION-METHOD-COMBINATION
SB-MOP:GENERIC-FUNCTION-METHOD-COMBINATION
SB-MOP:ENSURE-GENERIC-FUNCTION-USING-CLASS
SB-C:VM-SUPPORT-ROUTINES-LOCATION-NUMBER
;;; How about from the MOP:
(asdf:oos 'asdf:load-op :closer-mop)
(print-list (list-name-length-sorted-symbols :external-only t :package :closer-mop :amount 25))
=> prints
SB-MOP:GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER
SB-MOP:COMPUTE-APPLICABLE-METHODS-USING-CLASSES
SB-MOP:FUNCALLABLE-STANDARD-INSTANCE-ACCESS
SB-MOP:SPECIALIZER-DIRECT-GENERIC-FUNCTIONS
SB-MOP:ENSURE-GENERIC-FUNCTION-USING-CLASS
SB-MOP:GENERIC-FUNCTION-METHOD-COMBINATION
SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION
SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION
SB-MOP:SET-FUNCALLABLE-INSTANCE-FUNCTION
SB-MOP:COMPUTE-DISCRIMINATING-FUNCTION
SB-MOP:EFFECTIVE-SLOT-DEFINITION-CLASS
SB-MOP:ACCESSOR-METHOD-SLOT-DEFINITION
SB-MOP:STANDARD-DIRECT-SLOT-DEFINITION
SB-MOP:CLASS-DIRECT-DEFAULT-INITARGS
SB-MOP:COMPUTE-CLASS-PRECEDENCE-LIST
SB-MOP:GENERIC-FUNCTION-METHOD-CLASS
SB-MOP:GENERIC-FUNCTION-DECLARATIONS
SB-MOP:GENERIC-FUNCTION-LAMBDA-LIST
SB-MOP:DIRECT-SLOT-DEFINITION-CLASS
SB-MOP:SLOT-DEFINITION-INITFUNCTION
SB-MOP:FUNCALLABLE-STANDARD-OBJECT
SB-MOP:SLOT-MAKUNBOUND-USING-CLASS
SB-MOP:SLOT-DEFINITION-ALLOCATION
SB-MOP:SPECIALIZER-DIRECT-METHODS
SB-MOP:FUNCALLABLE-STANDARD-CLASS
>>5
Back to
/pr/ please
!
>>2,4
I found it a bit strange that a predicate would be sideeffecting actually, but it does make sense if you're dealing with some remote stream of some sort, or maybe quantuum mechanics...