#:g1: Quicklisp全部入りコアを作ろう

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関係な気はしています。

まとめ

 たまに変なことをしてみるのも色々勉強になります。

comments powered by Disqus