--- Begin Message ---
Subject: |
23.1; slow to interpret anthy maps |
Date: |
Tue, 20 Oct 2009 17:42:29 -1000 (HST) |
Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.
Your bug report will be posted to the address@hidden mailing list,
and to the gnu.emacs.bug news group.
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:
emacs23 is much slower to interpret the attached elisp file
than emacs22. The file customizes the conversion table from
alphabets to Japanese characters. It's for the anthy-el
package (I think).
Here's a little quantitative comparison:
$ time /usr/bin/emacs23 -q --eval '(progn (load-library "anthy") (load
"~/lib/emacs/anthy-el-my.el")(kill-emacs))'
real 0m8.293s
user 0m1.244s
sys 0m0.036s
$ time /usr/bin/emacs22 -q --eval '(progn (load-library "anthy") (load
"~/lib/emacs/anthy-el-my.el")(kill-emacs))'
real 0m1.197s
user 0m0.164s
sys 0m0.040s
I repeated each experiment four times. The above shows the second
slowest result from each. (The 2nd through 4th runs aren't
very different. The first run of the emacs22 experiment was a bit
slower probably because emacs22 wasn't loaded in the memory cache.)
Best regards,
Ryo
If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
`bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/share/emacs/23.1/etc/DEBUG for instructions.
In GNU Emacs 23.1.1 (i486-pc-linux-gnu, GTK+ Version 2.16.5)
of 2009-09-13 on raven, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.10603901
configured using `configure '--build=i486-linux-gnu' '--host=i486-linux-gnu'
'--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib'
'--localstatedir=/var/lib' '--infodir=/usr/share/info'
'--mandir=/usr/share/man' '--with-pop=yes'
'--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim'
'--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars'
'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g
-O2' 'LDFLAGS=-g' 'CPPFLAGS=''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: nil
value of $XMODIFIERS: nil
locale-coding-system: nil
default-enable-multibyte-characters: t
Major mode: Emacs-Lisp
Minor modes in effect:
show-paren-mode: t
tooltip-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
global-auto-composition-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
C-p C-e C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b
C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b
C-b C-b C-b C-b C-b C-b C-b C-f C-f C-d C-d C-d m o
s t C-n SPC a s SPC t h e SPC E U C SPC u p SPC u n
i t l SPC t h e SPC e a s t e r n SPC b o u n d a r
y . C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b
C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b
C-d C-f i C-a C-x C-s C-x C-q <help-echo> C-x o i C-p
SPC C-x 1 C-p SPC C-n SPC SPC d x g f e r r e t <return>
s <return> C-p SPC <help-echo> C-x o C-x o i SPC C-x
o C-n C-n C-n C-n C-n C-n C-n C-SPC C-e C-w <help-echo>
C-x o i SPC C-p SPC o c h r o m e <return> y o <return>
x g f e r r e t <return> s <return> C-p SPC i SPC .
SPC d x C-p C-p SPC <help-echo> <down-mouse-1> <mouse-1>
C-x C-b <return> C-x C-f C-a C-f C-f C-k . e m a c
s 2 3 TAB <return> C-x C-q C-x C-q C-x 1 C-p C-p C-p
C-r r e C-n C-n C-n C-s a n t h y C-a <help-echo> <down-mouse-1>
<mouse-1> <escape> x b u g TAB C-b C-b C-b C-b C-b
C-b C-b C-b C-b C-b C-b C-b C-b C-b C-k e m a c s -
b u TAB C-h C-h C-h C-h C-h C-h C-h C-h r e p o r TAB
TAB b u g <return>
Recent messages:
Scanning +ferret...done
Scanning +inbox...done
Too large, truncated. To see the entire message, type '.'
Wrapped lines
No more messages
Refiling and deleting...done
Updating buffer list...done
Commands: m, u, t, RET, g, k, S, D, Q; q to quit; h for help
Mark saved where search started [2 times]
Making completion list...
; Customize anthy-el .
; See /usr/share/anthy/ELISP .
; ローマ字入力中にバックスペースを押すと文字単位ではなくローマ字を消す.
; たとえば「か」でバックスペースを押すと「k」が残る
;(anthy-set-break-into-roman 't)
(setq anthy-wide-space " ")
; Customize the romaji table of anthy-el .
; The corresponding customization for scim-anthy is
; in ~/.scim/Anthy/config.sty .
;
(anthy-change-hiragana-map "ti" "てぃ")
(anthy-change-hiragana-map "tu" "とぅ")
(anthy-change-hiragana-map "di" "でぃ")
(anthy-change-hiragana-map "du" "どぅ")
(anthy-change-hiragana-map "tsa" "つぁ")
(anthy-change-hiragana-map "tsi" "つぃ")
(anthy-change-hiragana-map "tse" "つぇ")
(anthy-change-hiragana-map "tso" "つぉ")
(anthy-change-hiragana-map "dzu" "づ")
(anthy-change-hiragana-map "dja" "ぢゃ")
(anthy-change-hiragana-map "dji" "ぢ")
(anthy-change-hiragana-map "dju" "ぢゅ")
(anthy-change-hiragana-map "dje" "ぢぇ")
(anthy-change-hiragana-map "djo" "ぢょ")
; その他のローマ字かな変換
(anthy-change-hiragana-map "z1" "○")
(anthy-change-hiragana-map "z!" "●")
(anthy-change-hiragana-map "z2" "▽")
(anthy-change-hiragana-map "z@" "▼")
(anthy-change-hiragana-map "z3" "△")
(anthy-change-hiragana-map "z#" "▲")
(anthy-change-hiragana-map "z4" "□")
(anthy-change-hiragana-map "z$" "■")
(anthy-change-hiragana-map "z5" "◇")
(anthy-change-hiragana-map "z%" "◆")
(anthy-change-hiragana-map "z6" "☆")
(anthy-change-hiragana-map "z^" "★")
(anthy-change-hiragana-map "z7" "◎")
(anthy-change-hiragana-map "z%" "£")
(anthy-change-hiragana-map "z8" "¢")
(anthy-change-hiragana-map "z*" "×")
(anthy-change-hiragana-map "z9" "♂")
(anthy-change-hiragana-map "z(" "【")
(anthy-change-hiragana-map "z0" "♀")
(anthy-change-hiragana-map "z)" "】")
(anthy-change-hiragana-map "z-" "〜")
(anthy-change-hiragana-map "z_" "∴")
(anthy-change-hiragana-map "z=" "≠")
(anthy-change-hiragana-map "z+" "±")
(anthy-change-hiragana-map "z\\" "\")
(anthy-change-hiragana-map "z|" "‖")
(anthy-change-hiragana-map "z`" "`")
(anthy-change-hiragana-map "z~" "¨")
(anthy-change-hiragana-map "zq" "《")
(anthy-change-hiragana-map "zQ" "〈")
(anthy-change-hiragana-map "zw" "》")
(anthy-change-hiragana-map "zW" "〉")
(anthy-change-hiragana-map "zr" "々")
(anthy-change-hiragana-map "zR" "仝")
(anthy-change-hiragana-map "zt" "〆")
(anthy-change-hiragana-map "zT" "§")
(anthy-change-hiragana-map "zp" "〒")
(anthy-change-hiragana-map "zP" "↑")
(anthy-change-hiragana-map "z[" "『")
(anthy-change-hiragana-map "z{" "〔")
(anthy-change-hiragana-map "z]" "』")
(anthy-change-hiragana-map "z}" "〕")
(anthy-change-hiragana-map "zs" "ヽ")
(anthy-change-hiragana-map "zS" "ヾ")
(anthy-change-hiragana-map "zd" "ゝ")
(anthy-change-hiragana-map "zD" "ゞ")
(anthy-change-hiragana-map "zf" "〃")
(anthy-change-hiragana-map "zF" "→")
(anthy-change-hiragana-map "zg" "‐")
(anthy-change-hiragana-map "zG" "―")
(anthy-change-hiragana-map "zh" "←")
(anthy-change-hiragana-map "zj" "↓")
(anthy-change-hiragana-map "zk" "↑")
(anthy-change-hiragana-map "zl" "→")
(anthy-change-hiragana-map "z;" "゛")
(anthy-change-hiragana-map "z:" "゜")
(anthy-change-hiragana-map "z\'" "‘")
(anthy-change-hiragana-map "z\"" "“")
(anthy-change-hiragana-map "zx" ":-")
(anthy-change-hiragana-map "zX" ":-)")
(anthy-change-hiragana-map "zc" "〇")
(anthy-change-hiragana-map "zC" "℃")
(anthy-change-hiragana-map "zv" "※")
(anthy-change-hiragana-map "zV" "÷")
(anthy-change-hiragana-map "zb" "°")
(anthy-change-hiragana-map "zB" "←")
(anthy-change-hiragana-map "zn" "′")
(anthy-change-hiragana-map "zN" "↓")
(anthy-change-hiragana-map "zm" "〃")
(anthy-change-hiragana-map "zM" "〓")
(anthy-change-hiragana-map "z," "‥")
(anthy-change-hiragana-map "z<" "≦")
(anthy-change-hiragana-map "z." "…")
(anthy-change-hiragana-map "z>" "≧")
(anthy-change-hiragana-map "z/" "・")
(anthy-change-hiragana-map "z?" "∞")
(anthy-change-hiragana-map "Z0" "0")
(anthy-change-hiragana-map "Z1" "1")
(anthy-change-hiragana-map "Z2" "2")
(anthy-change-hiragana-map "Z3" "3")
(anthy-change-hiragana-map "Z4" "4")
(anthy-change-hiragana-map "Z5" "5")
(anthy-change-hiragana-map "Z6" "6")
(anthy-change-hiragana-map "Z7" "7")
(anthy-change-hiragana-map "Z8" "8")
(anthy-change-hiragana-map "Z9" "9")
(anthy-change-hiragana-map "Za" "a")
(anthy-change-hiragana-map "Zb" "b")
(anthy-change-hiragana-map "Zc" "c")
(anthy-change-hiragana-map "Zd" "d")
(anthy-change-hiragana-map "Ze" "e")
(anthy-change-hiragana-map "Zf" "f")
(anthy-change-hiragana-map "Zg" "g")
(anthy-change-hiragana-map "Zh" "h")
(anthy-change-hiragana-map "Zi" "i")
(anthy-change-hiragana-map "Zj" "j")
(anthy-change-hiragana-map "Zk" "k")
(anthy-change-hiragana-map "Zl" "l")
(anthy-change-hiragana-map "Zm" "m")
(anthy-change-hiragana-map "Zn" "n")
(anthy-change-hiragana-map "Zo" "o")
(anthy-change-hiragana-map "Zp" "p")
(anthy-change-hiragana-map "Zq" "q")
(anthy-change-hiragana-map "Zr" "r")
(anthy-change-hiragana-map "Zs" "s")
(anthy-change-hiragana-map "Zt" "t")
(anthy-change-hiragana-map "Zu" "u")
(anthy-change-hiragana-map "Zv" "v")
(anthy-change-hiragana-map "Zw" "w")
(anthy-change-hiragana-map "Zx" "x")
(anthy-change-hiragana-map "Zy" "y")
(anthy-change-hiragana-map "Zz" "z")
(anthy-change-hiragana-map "ZA" "A")
(anthy-change-hiragana-map "ZB" "B")
(anthy-change-hiragana-map "ZC" "C")
(anthy-change-hiragana-map "ZD" "D")
(anthy-change-hiragana-map "ZE" "E")
(anthy-change-hiragana-map "ZF" "F")
(anthy-change-hiragana-map "ZG" "G")
(anthy-change-hiragana-map "ZH" "H")
(anthy-change-hiragana-map "ZI" "I")
(anthy-change-hiragana-map "ZJ" "J")
(anthy-change-hiragana-map "ZK" "K")
(anthy-change-hiragana-map "ZL" "L")
(anthy-change-hiragana-map "ZM" "M")
(anthy-change-hiragana-map "ZN" "N")
(anthy-change-hiragana-map "ZO" "O")
(anthy-change-hiragana-map "ZP" "P")
(anthy-change-hiragana-map "ZQ" "Q")
(anthy-change-hiragana-map "ZR" "R")
(anthy-change-hiragana-map "ZS" "S")
(anthy-change-hiragana-map "ZT" "T")
(anthy-change-hiragana-map "ZU" "U")
(anthy-change-hiragana-map "ZV" "V")
(anthy-change-hiragana-map "ZW" "W")
(anthy-change-hiragana-map "ZX" "X")
(anthy-change-hiragana-map "ZY" "Y")
(anthy-change-hiragana-map "ZZ" "Z")
--- End Message ---
--- Begin Message ---
Subject: |
Re: 23.1; slow to interpret anthy maps |
Date: |
Mon, 19 Sep 2011 15:56:41 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) |
> $ time /usr/bin/emacs23 -q --eval '(progn (load-library "anthy") (load
> "~/lib/emacs/anthy-el-my.el")(kill-emacs))'
>
> real 0m8.293s
> user 0m1.244s
> sys 0m0.036s
> $ time /usr/bin/emacs22 -q --eval '(progn (load-library "anthy") (load
> "~/lib/emacs/anthy-el-my.el")(kill-emacs))'
> real 0m1.197s
> user 0m0.164s
> sys 0m0.040s
AFAICT, anthy-el-my.el mostly calls functions which send some text to
a sub-process and then wait for an answer. It appears from the above
measurement, then that a large part of the time is spent waiting (see
the difference between `real' time and `user' time).
In the current anthy.el I see the following core communication function:
(defun anthy-do-send-recv-command (cmd)
(if (not anthy-agent-process)
(anthy-check-agent))
(let ((old-buffer (current-buffer)))
(unwind-protect
(progn
(set-buffer anthy-working-buffer)
(erase-buffer)
(process-send-string anthy-agent-process cmd)
(while (= (buffer-size) 0)
(accept-process-output nil 0 anthy-accept-timeout))
(read (buffer-string)))
(set-buffer old-buffer))))
as well as the following initialization:
(defvar anthy-accept-timeout 50)
(if (string-match "^22\." emacs-version)
(setq anthy-accept-timeout 1))
So could it simply be that accept-process-output always waits the
full timeout? There are 152 calls to anthy-change-hiragana-map in
anthy-el-my.el.
So in Emacs-22 this would result in about 152 * 1ms = 152ms
of wasted waiting time (negligible) whereas with any other version you'd
get about 152 * 50ms = 7.5s of wasted waiting time.
So I think the problem is in anthy.el.
Stefan
--- End Message ---