<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 30. Dec 2020, at 19:08, Kjetil Matheussen <<a href="mailto:k.s.matheussen@gmail.com" class="">k.s.matheussen@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class=""><blockquote type="cite" class=""> Hash table lookups on symbols should<br class="">be fast too, unless I've missed something. Could you run TeXmacs under<br class="">callgrind and send me the results? -- something might jump out at me.<br class="">I downloaded TeXmacs, but I don't see the s7 code.<br class=""><br class=""></blockquote><br class=""><br class="">I do not know callgrind and I'm on Mac usually, does it work there?<br class=""><br class=""></blockquote><br class="">Probably, but one very dirty, and often efficient, way to find out<br class="">where a program spends its time is simply to interrupt it (e.g. press<br class="">ctrl-c when running in lldb). Do it a few times, and very often it<br class="">will be interrupted where it's spending most of its CPU time.<br class=""></div></div></blockquote></div><br class=""><div class=""><br class=""></div><div class="">I cannot use callgrind on Mac (only Linux apparently...) However I tried to run the Xcode profiler and got what I attach below. I've isolated the call in which TeXmacs is spending much of the time when handling keypresses, as I explained in previous mails. The timings are cumulative after some time running and pressing some keys or moving around the cursor. Overall I recorder 80000ms. Does this tell you something?</div><div class="">All the time is spent into c_function_is_ok, closure_is_ok_1 and lookup and for the first two functions the profiler register all the time in lookup.</div><div class=""><br class=""></div><div class="">I also attach a screenshot of the profiler in case the data below does not make much sense.</div><div class=""><br class=""></div><div class="">Max</div><div class=""><div class=""><div class=""><img apple-inline="yes" id="41E7EB66-D4E5-4055-A0ED-4D374F1AA31B" width="820" height="565" src="cid:1789D9BD-B7B6-4B3C-A8E3-B8594C57D063" class=""></div></div></div><div class=""><br class=""></div><div class=""><div class="">61798<span class="Apple-tab-span" style="white-space:pre">        </span>61798.0ms 77.7%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> s7_call</div><div class="">61798<span class="Apple-tab-span" style="white-space:pre">        </span>61798.0ms 77.7%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> eval</div><div class="">29814<span class="Apple-tab-span" style="white-space:pre">        </span>29814.0ms 37.5%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> c_function_is_ok</div><div class="">8463<span class="Apple-tab-span" style="white-space:pre">        </span>8463.0ms 10.6%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">6316<span class="Apple-tab-span" style="white-space:pre">        </span>6316.0ms 7.9%<span class="Apple-tab-span" style="white-space:pre">        </span>6316,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">3267<span class="Apple-tab-span" style="white-space:pre">        </span>3267.0ms 4.1%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">2645<span class="Apple-tab-span" style="white-space:pre">        </span>2645.0ms 3.3%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">2529<span class="Apple-tab-span" style="white-space:pre">        </span>2529.0ms 3.1%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> trailers</div><div class="">1732<span class="Apple-tab-span" style="white-space:pre">        </span>1732.0ms 2.1%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_c_aa</div><div class="">1435<span class="Apple-tab-span" style="white-space:pre">        </span>1435.0ms 1.8%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_macro_d</div><div class="">1331<span class="Apple-tab-span" style="white-space:pre">        </span>1331.0ms 1.6%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">1307<span class="Apple-tab-span" style="white-space:pre">        </span>1307.0ms 1.6%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> fx_c_s_opsq</div><div class="">1257<span class="Apple-tab-span" style="white-space:pre">        </span>1257.0ms 1.5%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">566<span class="Apple-tab-span" style="white-space:pre">        </span>566.0ms 0.7%<span class="Apple-tab-span" style="white-space:pre">        </span>566,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">406<span class="Apple-tab-span" style="white-space:pre">        </span>406.0ms 0.5%<span class="Apple-tab-span" style="white-space:pre">        </span>406,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">372<span class="Apple-tab-span" style="white-space:pre">        </span>372.0ms 0.4%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">87<span class="Apple-tab-span" style="white-space:pre">        </span>87.0ms 0.1%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_fine_1</div><div class="">80<span class="Apple-tab-span" style="white-space:pre">        </span>80.0ms 0.1%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_c_ss</div><div class="">30<span class="Apple-tab-span" style="white-space:pre">        </span>30.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>30,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">27<span class="Apple-tab-span" style="white-space:pre">        </span>27.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_apply_ss</div><div class="">20<span class="Apple-tab-span" style="white-space:pre">        </span>20.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_c_ap</div><div class="">17<span class="Apple-tab-span" style="white-space:pre">        </span>17.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_c_s</div><div class="">12<span class="Apple-tab-span" style="white-space:pre">        </span>12.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_fine_1</div><div class="">11<span class="Apple-tab-span" style="white-space:pre">        </span>11.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_c_sc</div><div class="">6<span class="Apple-tab-span" style="white-space:pre">        </span>6.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_c_ss</div><div class="">6<span class="Apple-tab-span" style="white-space:pre">        </span>6.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_eval_args3</div><div class="">5<span class="Apple-tab-span" style="white-space:pre">        </span>5.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_any_c_fp_1</div><div class="">4<span class="Apple-tab-span" style="white-space:pre">        </span>4.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>4,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">3<span class="Apple-tab-span" style="white-space:pre">        </span>3.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> check_closure_any</div><div class="">3<span class="Apple-tab-span" style="white-space:pre">        </span>3.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> eval_args_last_arg</div><div class="">3<span class="Apple-tab-span" style="white-space:pre">        </span>3.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_macro_d</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_fine_1</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_closure_ass</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>2,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_closure_saa</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_let_a_new</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_c_ss</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_fine_1</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_c_sc</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_fine_1</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_fine_1</div><div class="">2<span class="Apple-tab-span" style="white-space:pre">        </span>2.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_closure_ss</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> fx_c_opsq</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_closure_aa_o</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_and_pair_p</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> fx_c_opsq_s</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_closure_aas</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_c_ss</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_s_s</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_any_closure_3p</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_closure_ass</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_any_c_fp</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_closure_s_a</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>1,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> lookup</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> fx_c_opsq_s_direct</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> op_safe_closure_aa</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> closure_is_ok_1</div><div class="">1<span class="Apple-tab-span" style="white-space:pre">        </span>1.0ms 0.0%<span class="Apple-tab-span" style="white-space:pre">        </span>0,0<span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">        </span> fx_is_null_s</div></div><div class=""><br class=""></div></body></html>