Posted 2014-05-25 12:40:00 GMT
試してみた結果からいきなり書くと、全部入りコアは無理でした。
同居できたシステムは、1010中719。パッケージにして、1839パッケージ。コアのサイズは、600MiB。
1800パッケージでも、コアのサイズは1GiBに届かず。
同居できたシステムは下記の通りですが、あと100位は頑張れるかもしれません。
'(:3B-SWF :3BMD :ABLE :ACCESS :ADVANCED-READTABLE :ADW-CHARTING :ALEXANDRIA
:ALGEBRAIC-DATA-LIBRARY :AMAZON-ECS :ANAPHORA :ANAPHORIC-VARIANTS :ANTIK
:APPLY-ARGV :ARCHITECTURE.SERVICE-PROVIDER :ARCHIVE :ARNESI :ARRAY-OPERATIONS
:ASDF-DEPENDENCY-GROVEL :ASDF-ENCODINGS :ASDF-FINALIZERS :ASDF-LINGUIST
:ASDF-PACKAGE-SYSTEM :ASDF-PROJECT-HELPER :ASDF-SYSTEM-CONNECTIONS
:ASDF-UTILS :AUTOPROJECT :AYAH-CAPTCHA :BABEL :BASIC-BINARY-IPC :BEIRC
:BIG-STRING :BINARY-TYPES :BINASCII :BINOMIAL-HEAP :BITFIELD-SCHEMA :BK-TREE
:BORDEAUX-FFT :BORDEAUX-THREADS :BOURBAKI :BT-SEMAPHORE :BTRIE
:BUBBLE-OPERATOR-UPWARDS :BUILDAPP :CALISPEL :CAMBL :CARTESIAN-PRODUCT-SWITCH
:CAVEMAN :CELLS :CFFI :CFFI-OBJECTS :CH-IMAGE :CHANGED-STREAM :CHANL :CHECKL
:CHEMICAL-COMPOUNDS :CHILLAX :CHIPZ :CHIRP :CHRONICITY :CHUNGA
:CIRCULAR-STREAMS :CITY-HASH :CL+SSL :CL-6502 :CL-ALGEBRAIC-DATA-TYPE
:CL-ANNOT :CL-ANONFUN :CL-ANSI-TEXT :CL-APPLE-PLIST :CL-ARFF-PARSER
:CL-ARROWS :CL-ASYNC-FUTURE :CL-AUTOREPO :CL-AUTOWRAP :CL-AZURE :CL-BASE32
:CL-BASE58 :CL-BASE64 :CL-BAYESNET :CL-BEANSTALK :CL-BINAURAL :CL-BLOOM
:CL-BPLUSTREE :CL-BUCHBERGER :CL-CAIRO2 :CL-CASE-CONTROL :CL-CHESHIRE-CAT
:CL-COLORS :CL-CONT :CL-CONTAINERS :CL-CREDITCARD :CL-CRON :CL-CSS :CL-CTRNN
:CL-CURLEX :CL-CUSTOM-HASH-TABLE :CL-DATA-FRAME :CL-DATE-TIME-PARSER
:CL-DIFFLIB :CL-DOT :CL-DROPBOX :CL-DSL :CL-EMACS-IF :CL-EMB :CL-EPOCH
:CL-EWKB :CL-FACTORING :CL-FAD :CL-FLOWD :CL-FLUIDINFO :CL-FSNOTIFY
:CL-GAP-BUFFER :CL-GD :CL-GEOMETRY :CL-GITHUB-V3 :CL-GRACE :CL-GRAPH
:CL-GROWL :CL-HAML :CL-HEAP :CL-HEREDOC :CL-HTML-DIFF :CL-HTML-PARSE
:CL-HTML5-PARSER :CL-I18N :CL-INFLECTOR :CL-INFLUXDB :CL-INTERPOL :CL-IRC
:CL-IRREGSEXP :CL-ISAAC :CL-JPEG :CL-JSON :CL-L10N-CLDR :CL-LARVAL :CL-LAUNCH
:CL-LEDGER :CL-LEX :CL-LOCALE :CL-LOCATIVES :CL-LOG :CL-LTSV :CL-M4
:CL-MARKDOWN :CL-MARKUP :CL-MEDIAWIKI :CL-MEMCACHED :CL-MESSAGEPACK
:CL-MIGRATIONS :CL-MIME :CL-MONAD-MACROS :CL-MONERIS :CL-MONGO :CL-MONGO-ID
:CL-MURMURHASH :CL-MUSTACHE :CL-NCURSES :CL-NEO4J :CL-NETSTRINGS :CL-NTRIPLES
:CL-NUM-UTILS :CL-OAUTH :CL-OLEFS :CL-ONE-TIME-PASSWORDS :CL-OP :CL-OPENAL
:CL-OPENID :CL-OPENSTACK :CL-ORG-MODE :CL-PACKAGE-LOCKS :CL-PARALLEL
:CL-PAYMILL :CL-PAYPAL :CL-PDF :CL-PERFORMANCE-TUNING-HELPER :CL-PERMUTATION
:CL-PHOTO :CL-PLUMBING :CL-PLY :CL-POP :CL-PORTAUDIO :CL-PPCRE :CL-PREVALENCE
:CL-PRIMALITY :CL-QUICKCHECK :CL-RANDIST :CL-RDFXML :CL-READ-MACRO-TOKENS
:CL-RECAPTCHA :CL-REDIS :CL-RFC2047 :CL-RRT :CL-RSVG2 :CL-S3 :CL-SAM :CL-SASL
:CL-SCRIBD :CL-SCROBBLER :CL-SECURE-READ :CL-SENTIMENT :CL-SERVER-MANAGER
:CL-SIMPLE-TABLE :CL-SKIP-LIST :CL-SLICE :CL-SMTP :CL-SPARK :CL-SPEEDY-QUEUE
:CL-SPLICING-MACRO :CL-STM :CL-STOMP :CL-STOPWATCH :CL-STORE
:CL-STRING-COMPLETE :CL-STRING-MATCH :CL-SVM :CL-SYNTAX :CL-SYSLOG :CL-TABLE
:CL-TEMPLATE :CL-TEST-MORE :CL-TK :CL-TULIP-GRAPH :CL-TUPLES :CL-TWITTER
:CL-TYPESETTING :CL-UNICODE :CL-UNIFICATION :CL-UTILITIES :CL-VECTORS
:CL-WEB-CRAWLER :CL-WEBDAV :CL-WHO :CL-XMLSPAM :CL-XMPP :CLACHE :CLACK
:CLACK-ERRORS :CLAWK :CLAZY :CLEM :CLERIC :CLESH :CLFSWM :CLHS :CLIMACS
:CLIMC :CLITE :CLOBBER :CLON :CLOS-DIFF :CLOSER-MOP :CLOSURE-COMMON :CLOUCHDB
:CLSQL :CLSQL-FLUID :CLSQL-HELPER :CLSQL-ORM :CLUNIT :CLX :CLX-CURSOR
:CLX-TRUETYPE :CODATA-RECOMMENDED-VALUES :COLLECTORS :COLORIZE
:COM.CLEARLY-USEFUL.GENERIC-COLLECTION-INTERFACE
:COM.CLEARLY-USEFUL.ITERATOR-PROTOCOL :COM.CLEARLY-USEFUL.PROTOCOLS
:COM.GOOGLE.BASE :COMMAND-LINE-ARGUMENTS :COMPUTABLE-REALS :CONDUIT-PACKAGES
:CONIUM :CONTEXTL :CRANE :CSS-LITE :CSV-PARSER :CURLY
:CURRY-COMPOSE-READER-MACROS :DAEMON :DATA-SIFT :DATA-TABLE :DATAFLY
:DATE-CALC :DEFINE-JSON-EXPANDER :DEFLATE :DEFMACRO-ENHANCE :DEFMEMO :DEFREC
:DEFSTAR :DEFSYSTEM-COMPATIBILITY :DEFVARIANT :DELOREAN :DELTA-DEBUG
:DEOXYBYTE-GZIP :DEOXYBYTE-IO :DEOXYBYTE-SYSTEMS :DEOXYBYTE-UNIX
:DEOXYBYTE-UTILITIES :DIFF :DJULA :DLIST :DO-URLENCODE :DOCBROWSER
:DOCUMENTATION-TEMPLATE :DONUTS :DOPLUS :DRAKMA :DRAW-CONS-TREE :DSO-LEX
:DSO-UTIL :DYNAMIC-CLASSES :DYNAMIC-COLLECT :EAGER-FUTURE :EAGER-FUTURE2 :EC2
:ELEPHANT :ELF :ENHANCED-EVAL-WHEN :ENHANCED-MULTIPLE-VALUE-BIND :ENVY :EOS
:ERNESTINE :ESCALATOR :ESRAP :ESRAP-PEG :EVOL :EXTENDED-REALS
:EXTERNAL-PROGRAM :F-UNDERSCORE :F2CL :FARE-CSV :FARE-MEMOIZATION :FARE-MOP
:FARE-UTILS :FAST-IO :FEMLISP :FFA :FFT :FILTERED-FUNCTIONS :FIREPHP :FIVEAM
:FLEXI-STREAMS :FLEXICHAIN :FLOATING-POINT :FOLIO :FOMUS :FORMLETS
:FS-WATCHER :FSET :FSVD :FUNCTION-CACHE :GARBAGE-POOLS :GBBOPEN :GENERATORS
:GENERIC-SEQUENCES :GETOPT :GETTEXT :GLOP :GLU-TESSELLATE :GORDON :GRAPH
:GRAYLEX :GREEN-THREADS :GROUP-BY :GTFL :GZIP-STREAM :HERMETIC :HH-REDBLACK
:HH-WEB :HT-SIMPLE-AJAX :HTML-ENCODE :HTML-ENTITIES :HTML-TEMPLATE
:HTTP-PARSE :HU.DWIM.ASDF :HU.DWIM.COMMON :HU.DWIM.COMMON-LISP :HU.DWIM.DEF
:HU.DWIM.DEFCLASS-STAR :HU.DWIM.STEFIL :HU.DWIM.SYNTAX-SUGAR :HUNCHENTOOT
:HUNCHENTOOT-AUTH :HUNCHENTOOT-CGI :HYPEROBJECT :IDNA :IE3FP :IEEE-FLOATS
:IMAGO :INCF-CL :INCOGNITO-KEYWORDS :INCONGRUENT-METHODS :INFIX-DOLLAR-READER
:INTEGRAL :INTERCOM :IP-INTERFACES :IRC-LOGGER :IRONCLAD :ITERATE
:ITERATE-CLSQL :JPL-QUEUES :JSOWN :JWACS :KM :KMRCL :L-MATH :LAMBDA-READER
:LASSIE :LATEX-TABLE :LET-PLUS :LETREC :LEVENSHTEIN :LHSTATS :LIFT :LINEDIT
:LISA :LISP-EXECUTABLE :LISP-INTERFACE-LIBRARY :LISP-UNIT :LISP-UNIT2
:LISTOFLIST :LLA :LML :LML2 :LOCAL-PACKAGE-ALIASES :LOCAL-TIME :LOG4CL :LOG5
:LOWLIGHT :LPARALLEL :LTK :LW-COMPAT :MACRO-LEVEL :MACROEXPAND-DAMMIT
:MADEIRA-PORT :MAILBOX :MAKE-HASH :MANARDB :MANIFEST :MAP-BIND :MAP-SET
:MARCHING-CUBES :MARSHAL :MCCLIM :MD5 :MEMOIZE :MESSAGE-OO :META :META-SEXP
:METABANG-BIND :METACOPY :METATILITIES :METATILITIES-BASE
:METHOD-COMBINATION-UTILITIES :METHOD-VERSIONS :MGL :MICMAC :MIDI :MINHEAP
:MINI-CAS :MISC-EXTENSIONS :MIXALOT :MODF :MODF-FSET :MONKEYLIB-HTML
:MONKEYLIB-MARKUP-HTML :MONKEYLIB-TEXT-LANGUAGES :MONKEYLIB-TEXT-OUTPUT
:MONTEZUMA :MOP-UTILS :MOPTILITIES :MORE-CONDITIONS :MT19937 :MTLISP
:MULTIPLE-VALUE-VARIANTS :MULTIVAL-PLIST :MW-EQUIV :MYWEB :NAMED-READTABLES
:NAPA-FFT3 :NEKTHUTH :NET-TELENT-DATE :NET4CL :NEW-OP :NIBBLES :NINGLE :NPG
:NST :NUCLBLOG :ODD-STREAMS :ODS4CL :OPEN-VRP :OPTICL :OPTIMA :ORG-DAVEP-DICT
:ORG-DAVEP-DICTREPL :OSC :OSICAT :PACK :PACKAGE-RENAMING :PACKET :PAIPROLOG
:PAREN-FILES :PARENSCRIPT :PARENSCRIPT-CLASSIC :PARSE-FLOAT :PARSE-JS
:PARSE-NUMBER :PARSE-NUMBER-RANGE :PARSELTONGUE :PATRON :PCALL
:PERCENT-ENCODING :PERIODIC-TABLE :PERIODS :PERSISTENT-TABLES
:PERSISTENT-VARIABLES :PETIT.PACKAGE-UTILS :PETTOMATO-DEQUE
:PETTOMATO-INDEXED-PRIORITY-QUEUE :PG :PILEUP :PIPES :PIPING :PITHY-XML
:PLACE-MODIFIERS :PLACE-UTILS :PLANKS :PLUMP :PNG-READ :POLICY-COND :POOLER
:POSITIONAL-LAMBDA :POSTMODERN :POSTOFFICE :PREPL :PRETTY-FUNCTION
:PRIORITY-QUEUE :PROTOBUF :PSGRAPH :PTESTER :PURI :PY-CONFIGPARSER
:PY-CONFIGVALIDATOR :PYTHONIC-STRING-READER :QBOOK :QMYND :QUEUES
:QUICKLISP-SLIME-HELPER :QUICKPROJECT :QUICKSEARCH :QUICKUTIL :QUID-PRO-QUO
:QUUX-TIME :RANDOM :RANDOM-ACCESS-LISTS :READABLE :READER-INTERCEPTION
:RECTANGLE-PACKING :RECUR :RECURSIVE-REGEX :RED-BLACK :REGEX :REPL-UTILITIES
:RESTAS :RESTAS-DIRECTORY-PUBLISHER :RESTAS.FILE-PUBLISHER :RETROSPECTIFF
:REVERSI :RFC2109 :RFC2388 :RFC2388-BINARY :RFC3339-TIMESTAMP :RLC :ROMREADER
:RPC4CL :RT :RUCKSACK :RUTILS :S-BASE64 :S-DOT :S-HTTP-CLIENT :S-HTTP-SERVER
:S-SYSDEPS :S-UTILS :S-XML :S-XML-RPC :SALZA2 :SAPACLISP :SB-CGA :SB-FASTCGI
:SB-VECTOR-IO :SCREAMER :SECRET-VALUES :SECURE-RANDOM :SEQUENCE-ITERATORS
:SERIES :SEXML :SHA3 :SHADCHEN :SHEEPLE :SHELLY :SIMPLE-CURRENCY
:SIMPLE-DATE-TIME :SIMPLE-FINALIZER :SIMPLE-RGB :SIMPSAMP
:SINGLE-THREADED-CCL :SIP-HASH :SKIPPY :SMACKJACK :SNAPPY :SNMP :SOUNDEX
:SPARTNS :SPATIAL-TREES :SPELLCHECK :SPINNERET :SPLIT-SEQUENCE :ST-JSON
:STATIC-VECTORS :STEFIL :STEM :STMX :STRING-CASE :STRINGPREP
:STUMP-TOUCHY-MODE-LINE :STUMPWM :SUBMARINE :SWANK-CLIENT :SWANK-CREW
:SWAP-BYTES :SXQL :SYMBOL-MUNGER :SYMBOL-NAMESPACES :SYNONYMS :TAGGER :TALCL
:TAP-UNIT-TEST :TELNETLIB :TEMPORARY-FILE :TESTBILD :TEXT-QUERY :THREAD-POOL
:THREAD.COMM.RENDEZVOUS :TIME-INTERVAL :TINAA :TOADSTOOL :TOOT :TORTA
:TRACK-BEST :TREEDB :TREES :TRIVIAL-BACKTRACE :TRIVIAL-BIT-STREAMS
:TRIVIAL-CHANNELS :TRIVIAL-DOWNLOAD :TRIVIAL-DUMP-CORE :TRIVIAL-FEATURES
:TRIVIAL-GARBAGE :TRIVIAL-GRAY-STREAMS :TRIVIAL-HTTP :TRIVIAL-IRC
:TRIVIAL-LAZY :TRIVIAL-LDAP :TRIVIAL-OCTET-STREAMS :TRIVIAL-RAW-IO
:TRIVIAL-SHELL :TRIVIAL-TCO :TRIVIAL-TIMEOUT :TRIVIAL-TIMERS :TRIVIAL-TYPES
:TRIVIAL-UTF-8 :UCW :UFFI :UIOP :UMLISP-ORF :UNICLY :UNIT-TEST :UNIX-OPTIONS
:URI-TEMPLATE :URL-REWRITE :USERIAL :USOCKET :USOCKET-UDP
:UTILITIES.PRINT-ITEMS :UTILS-KT :UUID :VAS-STRING-METRICS :VECTO :VERBOSE
:VERRAZANO :VGPLOT :WEBLOCKS-STORES :WU-DECIMAL :WUWEI :X.FDATATYPES
:X.LET-STAR :XARRAY :XHTMLGEN :XLUNIT :XML-EMITTER :XML-MOP :XML.LOCATION
:XMLS :XMLS-TOOLS :XPTEST :YACLANAPHT :YACLML :YASON :ZAWS :ZCDB :ZIP :ZLIB
:ZPB-EXIF :ZPB-TTF :ZPNG :ZS3 :ZSORT)
メリットは以前このブログでも書いたことがありますが、ライブラリを探すのが楽だったりします。
デメリットですが、SLIMEでシンボルを補完するのが重くなります。
また、大きいコアをロードするので起動も重くなります。
そして、デバッグ時等に行儀の悪いパッケージがやらかした潜在的な問題に遭遇して、意味が分からないなあ、なんだこれ、ということになりがちです。
大量にシステムを読み込む場合に問題になるところですが、
あたりが多いようです。
近頃はどうもパッケージ名の競合が以前より激しくなって来ている気がします。マークアップ系のもので'<'パッケージが3つ位あったり。
リードテーブルの破壊は、cxml系が多いようです。
どうも一連のcxmlパッケージはリードテーブルを定義せずに大域的に定義してしまうので、基本的に変なことになっているのはこの人達のせいな気がします。汚染しないようにして欲しいところ。
dwim.hu関係、cl-yacc系もおかしいかも。
ロードするとスレッドを生成するライブラリがあります。
SBCL等ではイメージのダンプはメインスレッドだけの状態でする必要があるので、メイン以外を全部殺す必要があります。
大抵こういうライブラリは、ロードした時に環境を整えているようなので、イメージにダンプするのとは相性が悪いかもしれません。
read-csv が
(defconstant quote 3)
とかしている所為で
(defun code-walker (quote)
....)(let ((quote 8))
quote)
的な他のライブラリのコードが皆コケる事態に。
一応解説しておくと、定数宣言してしまうと束縛はできなくなるのでこんなことになります。
処理系がエラーを出さないのも問題かなとは思いますが。
CLパッケージのシンボルはいじらないようにしましょう〈適切にshadowしましょう〉。
ちなみに検出ですが、
(let ((quote 42)) quote)
のようなコードをロードの度に評価しておけば良いので比較的犯人探しは簡単でした。
これは原因が不明でしたが、gcを何回か掛けてからダンプするようにしたらダンプできるようでした。なんでしょう。ffi関係な気はしています。
たまに変なことをしてみるのも色々勉強になります。
■