понедельник, 20 августа 2012 г.

Emacs 24 и еврейский вопрос

FIX: (setq-default bidi-display-reordering nil)

Я не знаю, что эти поганцы-разработчики курили, но:

Emacs 23.4:

Function Name            Call Count Elapsed Time Average Time
----------------------------------------------------------------
window-end                24          0.0962759999  0.0040114999
line-move                 65          0.0543929999  0.0008368153
line-move-visual          61          0.0482110000  0.0007903442
posn-at-point             6           0.016949      0.0028248333
line-move-partial         61          0.00342       5.606...e-05
pos-visible-in-window-p   1           0.001529      0.001529

Emacs 24.1:

Function Name            Call Count Elapsed Time Average Time
----------------------------------------------------------------
line-move                 122         4.784470897   0.0392169745
line-move-partial         118         4.106517631   0.0348009968
pos-visible-in-window-p   72          3.9990069829  0.0555417636
line-move-visual          118         0.6843929029  0.0057999398
window-end                4           0.3870196690  0.0967549172
posn-at-point             11          0.286456435   0.0260414940

Смотреть в последнюю колонку. В среднем, всё стало работать медленней в 10-20 раз. Wanderlust'ом вообще невозможно пользоваться: скролл в Summary - это агонические конвульсии больной черепахи в терминальной стадии. Самое забавное, что главный виновник тормозов скроллирования - pos-visible-in-window-p - это сишная функция, которая со времён 23.4 не изменилась.

Или, может, это общее торможение интерпретатора байткода после внедрения lexical binding?

P.S.: Не, нифига это не байткод. Вот вырезка из perf:

23.4:

 31.81%  mark_object
  9.77%  Fbyte_code
  8.01%  Fgarbage_collect
  2.29%  oblookup
  2.22%  re_match_2_internal
  1.97%  Feval
  1.95%  readchar
  1.62%  mark_char_table
  1.01%  Ffuncall
  0.83%  Fcons
  0.77%  read1
  0.76%  re_search_2
  0.71%  unbind_to
  0.67%  funcall_lambda
  0.66%  specbind
  0.58%  produce_chars
  0.58%  buf_charpos_to_bytepos
  0.58%  decode_coding_iso_2022
  0.55%  Flength
  0.54%  assq_no_quit

Как видно, основную часть времени Емакс 23 провёл в сборщике мусора, т.е. всё остальное работало со скоростью падающего домкрата. А вот ситуация в 24:

 21.11%  mark_object
 15.01%  buf_bytepos_to_charpos
  8.32%  scan_buffer
  7.20%  re_match_2_internal
  6.09%  exec_byte_code
  5.17%  Fgarbage_collect
  4.34%  buf_charpos_to_bytepos
  1.50%  oblookup
  1.30%  eval_sub
  1.29%  compile_pattern
  1.19%  readchar
  0.87%  fast_looking_at
  0.85%  mark_char_table
  0.65%  Fcons
  0.62%  Ffuncall
  0.62%  specbind
  0.57%  re_match_2
  0.54%  re_search_2
  0.52%  read1

Сборка мусора тоже в топе присутствует, но просто дофигища времени было проведено в сишечных функциях хождения по буферу. Смотрим в чейнджлоге, чего там связанного с экраном добавили...

- Support for displaying and editing bidirectional text, including
  right-to-left scripts such as Arabic and Hebrew.

Ага, понятно ;)
 
Надеюсь, починят.

Комментариев нет:

Отправить комментарий