Next: , Previous: Speed of Byte-Code, Up: Byte Compilation   [Contents][Index]


15.2 ¥³¥ó¥Ñ¥¤¥ë´Ø¿ô

´Ø¿ôbyte-compile¤Ç¡¢ ¸Ä¡¹¤Î´Ø¿ôÄêµÁ¤ä¥Þ¥¯¥íÄêµÁ¤ò¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤¹¡£ byte-compile-file¤Ç1¤Ä¤Î¥Õ¥¡¥¤¥ëÁ´ÂΤò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤ê¡¢ byte-recompile-directory¤äbatch-byte-compile¤Ç Ê£¿ô¸Ä¤Î¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤¹¡£

¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥é¤Ï¡¢ ³Æ¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ä·Ù¹ð¥á¥Ã¥»¡¼¥¸¤ò ‘*Compile-Log*’¤È¸Æ¤Ð¤ì¤ë¥Ð¥Ã¥Õ¥¡¤Ë½ÐÎϤ·¤Þ¤¹¡£ ÆÉ¼Ô¤Î¥×¥í¥°¥é¥à¤Ë´Ø¤·¤Æ¤³¤³¤ËÊó¹ð¤µ¤ì¤¿¤³¤È¤¬¤é¤Ï¡¢ ÌäÂêÅÀ¤ò»ØÅ¦¤·¤Þ¤¹¤¬¡¢É¬¤º¤·¤â¥¨¥é¡¼¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£

¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤¹¤ë²ÄǽÀ­¤Î¤¢¤ë¥Õ¥¡¥¤¥ë¤Ë¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤ò½ñ¤¯¤È¤­¤Ë¤Ï Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ ¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤ËŸ³«¤µ¤ì¤ë¤Î¤Ç¡¢ Àµ¤·¤¯¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤¿¤á¤Ë¤Ï¥Þ¥¯¥í¤ÏÄêµÁºÑ¤ß¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¾Ü¤·¤¯¤Ï¡¢See Compiling Macros¡£

Ä̾¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤â¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤òɾ²Á¤·¤¿¤ê¡¢ ¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤»¤ó¡£ ¤·¤«¤·¡¢¥Õ¥¡¥¤¥ë¤Î¥È¥Ã¥×¥ì¥Ù¥ë¤Ë½ñ¤¤¤¿require¤Ï¼Â¹Ô¤·¤Þ¤¹¡£ ¥³¥ó¥Ñ¥¤¥ë»þ¤ËɬÍפʥޥ¯¥íÄêµÁ¤¬Â¸ºß¤¹¤ë¤³¤È¤òÊݾڤ¹¤ë1¤Ä¤ÎÊýË¡¤Ï¡¢ ¤½¤ì¤é¤òÄêµÁ¤¹¤ë¥Õ¥¡¥¤¥ë¤òÍ×µá¡Êrequire¡Ë¤¹¤ë¤³¤È¤Ç¤¹ ¡Êsee Named Features¡Ë¡£ ¥³¥ó¥Ñ¥¤¥ë¤·¤¿¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤È¤­¤Ë ¥Þ¥¯¥íÄêµÁ¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É¤òËɤ°¤Ë¤Ï¡¢ require¤Î¸Æ¤Ó½Ð¤·¤Î¼þ¤ê¤Ëeval-when-compile¤ò½ñ¤­¤Þ¤¹ ¡Êsee Eval During Compile¡Ë¡£

Function: byte-compile symbol

¤³¤Î´Ø¿ô¤Ï¡¢symbol¤Î´Ø¿ôÄêµÁ¤ò¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤·¡¢ °ÊÁ°¤ÎÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤â¤Î¤ÇÃÖ¤­´¹¤¨¤ë¡£ symbol¤Î´Ø¿ôÄêµÁ¤Ï¡¢´Ø¿ô¤Î¼ÂºÝ¤Î¥³¡¼¥É¤Ç¤¢¤ë¤³¤È¡£ ¤Ä¤Þ¤ê¡¢¥³¥ó¥Ñ¥¤¥é¤Ï¡¢Ê̤Υ·¥ó¥Ü¥ë¤Ø¤Î´ÖÀÜ»²¾È¤òé¤é¤Ê¤¤¡£ byte-compile¤Ï¡¢symbol¤Î¥³¥ó¥Ñ¥¤¥ëºÑ¤ß¤Î¿·¤¿¤ÊÄêµÁ¤òÊÖ¤¹¡£

symbol¤ÎÄêµÁ¤¬¥Ð¥¤¥È¥³¡¼¥É´Ø¿ô¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë¤È¡¢ byte-compile¤Ï¤Ê¤Ë¤â¤»¤º¤Ënil¤òÊÖ¤¹¡£ Lisp¤Ï¤É¤ó¤Ê¥·¥ó¥Ü¥ë¤ËÂФ·¤Æ¤â´Ø¿ôÄêµÁ¤ò1¤Ä¤À¤±µ­Ï¿¤¹¤ë¤Î¤Ç¡¢ ¤½¤ì¤¬¤¹¤Ç¤Ë¥³¥ó¥Ñ¥¤¥ëºÑ¤ß¤Ç¤¢¤ë¤È¡¢ ¥³¥ó¥Ñ¥¤¥ë¤Þ¤¨¤Î¥³¡¼¥É¤Ï¤É¤³¤Ë¤â¤Ê¤¤¤Î¤Ç¤¢¤ë¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¡ØÆ±¤¸ÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ë¤·Ä¾¤¹¡ÙÊýË¡¤Ï¤Ê¤¤¡£

(defun factorial (integer)
  "Compute factorial of INTEGER."
  (if (= 1 integer) 1
    (* integer (factorial (1- integer)))))
⇒ factorial
(byte-compile 'factorial)
⇒
#[(integer)
  "^H\301U\203^H^@\301\207\302^H\303^HS!\"\207"
  [integer 1 * factorial]
  4 "Compute factorial of INTEGER."]

·ë²Ì¤Ï¡¢¥Ð¥¤¥È¥³¡¼¥É´Ø¿ô¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë¡£ ¤³¤Îʸ»úÎó¤Ë¤Ï¼ÂºÝ¤Î¥Ð¥¤¥È¥³¡¼¥É¤¬Æþ¤Ã¤Æ¤¤¤ë¡£ ¤½¤Î³ÆÊ¸»ú¤Ï¡¢Ì¿Îá¤äÌ¿Îá¤Î¥ª¥Ú¥é¥ó¥É¤Ç¤¢¤ë¡£ ¥Ù¥¯¥È¥ë¤Ë¤Ï¡¢ÆÃÊ̤ÊÌ¿Îá¤ËÉ乿²½¤µ¤ì¤ëÆÃÄê¤Î´ðËÜ´Ø¿ô¤ò½ü¤¤¤Æ¡¢ ´Ø¿ô¤¬»È¤¦¤¹¤Ù¤Æ¤ÎÄê¿ô¡¢ÊÑ¿ô̾¡¢´Ø¿ô̾¤¬Æþ¤Ã¤Æ¤¤¤ë¡£

¥³¥Þ¥ó¥É: compile-defun

¤³¤Î¥³¥Þ¥ó¥É¤Ï¥Ý¥¤¥ó¥È¤ò´Þ¤àdefun¤òÆÉ¤ß¼è¤ê¡¢ ¤½¤ì¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¡¢·ë²Ì¤òɾ²Á¤¹¤ë¡£ ¼ÂºÝ¤Ë´Ø¿ôÄêµÁ¤Ç¤¢¤ëdefun¤Ç¤³¤Î¥³¥Þ¥ó¥É¤ò»È¤¦¤È¡¢ ¤½¤Î´Ø¿ô¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤â¤Î¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡£

¥³¥Þ¥ó¥É: byte-compile-file filename

¤³¤Î´Ø¿ô¤Ï¡¢filename¤È¤¤¤¦Ì¾Á°¤ÎLisp¥³¡¼¥É¤Î¥Õ¥¡¥¤¥ë¤ò ¥³¥ó¥Ñ¥¤¥ë¤·¥Ð¥¤¥È¥³¡¼¥É¤Î¥Õ¥¡¥¤¥ë¤Ë¤¹¤ë¡£ ½ÐÎÏ¥Õ¥¡¥¤¥ë¤Î̾Á°¤Ï¡¢ÀÜÆ¬¼­‘.el’¤ò‘.elc’¤Ë´¹¤¨¤Æºî¤ë¡£ filename¤¬‘.el’¤Ç½ª¤Ã¤Æ¤¤¤Ê¤¤¤È¤­¤Ë¤Ï¡¢ filename¤ÎËöÈø¤Ë‘.elc’¤òÉղ乤롣

ÆþÎÏ¥Õ¥¡¥¤¥ë¤«¤é°ìÅÙ¤Ë1¤Ä¤º¤Ä¥Õ¥©¡¼¥à¤òÆÉ¤ß¤Ê¤¬¤é¥³¥ó¥Ñ¥¤¥ë¤ò¹Ô¤¦¡£ ¤½¤ì¤¬´Ø¿ôÄêµÁ¤ä¥Þ¥¯¥íÄêµÁ¤Ç¤¢¤ë¤È¡¢ ¥³¥ó¥Ñ¥¤¥ë¤·¤¿´Ø¿ôÄêµÁ¤ä¥Þ¥¯¥íÄêµÁ¤ò½ñ¤­½Ð¤¹¡£ ¾¤Î¥Õ¥©¡¼¥à¤Ï°ì²ô¤Ë¤·¤Æ¡¢³Æ²ô¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ½ñ¤­½Ð¤·¡¢ ¥Õ¥¡¥¤¥ë¤òÆÉ¤à¤È¥³¥ó¥Ñ¥¤¥ë¤·¤¿¥³¡¼¥É¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¡£ ÆþÎÏ¥Õ¥¡¥¤¥ë¤òÆÉ¤à¤È¤­¤Ë¤¹¤Ù¤Æ¤Î¥³¥á¥ó¥È¤ò¼Î¤Æ¤ë¡£

¤³¤Î¥³¥Þ¥ó¥É¤Ït¤òÊÖ¤¹¡£ ÂÐÏÃŪ¤Ë¸Æ¤Ó½Ð¤¹¤È¥Õ¥¡¥¤¥ë̾¤òÌ䤤¹ç¤ï¤»¤ë¡£

% ls -l push*
-rw-r--r--  1 lewis     791 Oct  5 20:31 push.el
(byte-compile-file "~/emacs/push.el")
     ⇒ t
% ls -l push*
-rw-r--r--  1 lewis     791 Oct  5 20:31 push.el
-rw-rw-rw-  1 lewis     638 Oct  8 20:25 push.elc
¥³¥Þ¥ó¥É: byte-recompile-directory directory flag

¤³¤Î´Ø¿ô¤Ï¡¢directory¤Ë¤¢¤ëºÆ¥³¥ó¥Ñ¥¤¥ë¤¬É¬Í×¤Ê ¸Ä¡¹¤Î‘.el’¥Õ¥¡¥¤¥ë¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¡£ ¥Õ¥¡¥¤¥ë¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ë¤Î¤Ï¡¢ ‘.elc’¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Æ¤â‘.el’¥Õ¥¡¥¤¥ë¤è¤ê¸Å¤¤¾ì¹ç¤Ç¤¢¤ë¡£

.el’¥Õ¥¡¥¤¥ë¤ËÂбþ¤¹¤ë‘.elc’¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢ flag¤¬Æ°ºî¤ò»Ø¼¨¤¹¤ë¡£ ¤½¤ì¤¬nil¤Ç¤¢¤ë¤È¡¢¤½¤Î¤è¤¦¤Ê¥Õ¥¡¥¤¥ë¤Ï̵»ë¤¹¤ë¡£ nil°Ê³°¤Ç¤¢¤ë¤È¡¢¤½¤Î¤è¤¦¤Ê³Æ¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤«¤É¤¦¤« ¥æ¡¼¥¶¡¼¤ËÌ䤤¹ç¤ï¤»¤ë¡£

¤³¤Î¥³¥Þ¥ó¥É¤ÎÌá¤êÃͤÏͽ¬¤Ç¤­¤Ê¤¤¡£

Function: batch-byte-compile

¤³¤Î´Ø¿ô¤Ï¡¢¥³¥Þ¥ó¥É¹Ô¤Ë»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë·²¤ËÂФ·¤Æ byte-compile-file¤ò¼Â¹Ô¤¹¤ë¡£ ¤³¤Î´Ø¿ô¤ÏEmacs¤ò¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¼Â¹Ô¤·¤Æ¤¤¤ë¤È¤­¤Ë¤À¤±»È¤¦¤³¤È¡£ ´°Î»¤¹¤ë¤ÈEmacs¤ò½ªÎ»¤¹¤ë¤«¤é¤Ç¤¢¤ë¡£ 1¤Ä¤Î¥Õ¥¡¥¤¥ë¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤â¡¢¸å³¤Î¥Õ¥¡¥¤¥ë¤Î½èÍý¤Ë¤Ï±Æ¶Á¤·¤Ê¤¤¤¬¡¢ ¥¨¥é¡¼¤òµ¯¤³¤·¤¿¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë½ÐÎÏ¥Õ¥¡¥¤¥ë¤ÏÀ¸À®¤»¤º¡¢ Emacs¤Î¥×¥í¥»¥¹¤Ï0°Ê³°¤Î¾õÂÖ¥³¡¼¥É¤Ç½ªÎ»¤¹¤ë¡£

% emacs -batch -f batch-byte-compile *.el
Function: byte-code code-string data-vector max-stack

¤³¤Î´Ø¿ô¤Ï¥Ð¥¤¥È¥³¡¼¥É¤ò¼ÂºÝ¤Ë²ò¼á¼Â¹Ô¤¹¤ë¡£ ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤·¤¿´Ø¿ô¤Ï¡¢¼ÂºÝ¤Ë¤Ï¡¢ byte-code¤ò¸Æ¤Ó½Ð¤¹¤è¤¦¤ÊËÜÂΤȤ·¤ÆÄêµÁ¤µ¤ì¤ë¡£ ¤³¤Î´Ø¿ô¤òÆÉ¼Ô¼«¿È¤Ç¸Æ¤Ó½Ð¤µ¤Ê¤¤¤³¤È¡£ ¤³¤Î´Ø¿ô¤ÎÀµ¤·¤¤¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ëÊýË¡¤Ï¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥é¤À¤±¤¬ÃΤäƤ¤¤ë¡£

Emacs 18ÈǤǤϡ¢¥Ð¥¤¥È¥³¡¼¥É¤Ï´Ø¿ôbyte-code¤ò¤Ä¤Í¤Ë¸Æ¤Ó½Ð¤¹¤³¤È¤Ç ¼Â¹Ô¤·¤Æ¤¤¤¿¡£ ¸½ºß¤Ç¤Ï¡¢¥Ð¥¤¥È¥³¡¼¥É´Ø¿ô¥ª¥Ö¥¸¥§¥¯¥È¤Î°ìÉô¤È¤·¤Æ¥Ð¥¤¥È¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ë¤Î¤¬ ÉáÄ̤Ǥ¢¤ê¡¢byte-code¤òÌÀ¼¨Åª¤Ë¸Æ¤Ó½Ð¤¹¤³¤È¤Ïµ©¤Ç¤¢¤ë¡£