[Openmcl-devel] C-c C-c of a function referencing a large constant takes a long time to compile

David Steuber david at david-steuber.com
Sat Jun 25 06:52:50 UTC 2005


Hello slime-devel,

This evening I discovered a nasty annoyance with Slime and OpenMCL when 
doing C-c C-c to compile a function.  The function makes reference to a 
46x46x46x46 constant array of integers (defined with DEFCONSTANT).  Any 
such function that refers to the array takes over a minute to compile 
with C-c C-c.  If I have openmcl running in a terminal, the same 
function will recompile instantly.  Here are a few bits of relevant 
code and *slime-events*:

(DEFCONSTANT +LETTER-FREQUENCY-HYPERCUBE+ #4A((((6384784 ...

(defun start-decoder (cipher-text pos)
   (let (m1 (pf 0))
     (dotimes (a +modulo+)
       (dotimes (b +modulo+)
         (dotimes (c +modulo+)
           (dotimes (d +modulo+)
             (let ((sp (aref +letter-frequency-hypercube+ a b c d)))
               (when (< 0 sp)
                 (let* ((w (modadd a (aref cipher-text pos)))
                        (x (modadd b (aref cipher-text (+ 1 pos))))
                        (y (modadd c (aref cipher-text (+ 2 pos))))
                        (z (modadd d (aref cipher-text (+ 3 pos))))
                        (pfp (* sp (aref +letter-frequency-hypercube+ w 
x y z))))
                   (when (< pf pfp)
                     (setf m1 (list a b c d)
                           pf pfp)))))))))
     m1))

(:emacs-rex
  (swank:compile-string-for-emacs "(defun start-decoder (cipher-text 
pos)\n  (let (m1 (pf 0))\n    (dotimes (a +modulo+)\n      (dotimes (b 
+modulo+)\n        (dotimes (c +modulo+)\n          (dotimes (d 
+modulo+)\n            (let ((sp (aref +letter-frequency-hypercube+ a b 
c d)))\n              (when (< 0 sp)\n                (let* ((w (modadd 
a (aref cipher-text pos)))\n                       (x (modadd b (aref 
cipher-text (+ 1 pos))))\n                       (y (modadd c (aref 
cipher-text (+ 2 pos))))\n                       (z (modadd d (aref 
cipher-text (+ 3 pos))))\n                       (pfp (* sp (aref 
+letter-frequency-hypercube+ w x y z))))\n                  (when (< pf 
pfp)\n                    (setf m1 (list a b c d)\n                     
      pf pfp)))))))))\n    m1))\n" "two-time-pad.lisp" 5674 
"/Users/david/usr/src/ITA Software Puzzles/Two-Time Pad/")
  nil t 540)
(:return
   (:ok
    ("T" "65.65"))
   540)

I'm running SLIME 2005-06-21, OpenMCL 0.14.3-050610a, and Carbon Emacs 
from CVS on 2005-06-12, OS X 10.3.9, GCC 3.3 from Xcode 1.5.




More information about the Openmcl-devel mailing list