Hello, without the patch (callgrind_annotate): 26,300,937  ???:_platform_strcmp [libsystem_platform.dylib] 13,288,306  Src/parse.c:ecstrcode [Src/zsh]  4,486,910  Src/hashtable.c:hasher [Src/zsh] after:  2,661,459  ???:_platform_strcmp [libsystem_platform.dylib]  2,588,524  Src/parse.c:ecstrcode [Src/zsh]  5,959,019  Src/hashtable.c:hasher [Src/zsh] So, for ecstrcode & hasher, the gain is 10.5 million, the loss is 1.5 million. Shell startup time measured with: % repeat 10 { time /usr/local/bin/zsh-5.3.1-dev-0 -i -c exit }  drops from 205 ms to 192 ms. With additional has_token() patch, it's 205 ms to 190 ms. I think this can be assumed to be 15-20ms. The 9 million gained shows that this is a serious optimization. Three more such optimizations, and gain would be 45-60 ms, a noticable difference. Data: https://github.com/zdharma/hacking-private/tree/master/startup-dump-opt Any ideas maybe, of what more can be done? I'm trying to add meaning to my functions-lexicon feature (automatically managed functions, loaded via autoload -w ...zwc). Dumps seem to be quite optimially mmapped, not sure where to look for something else related to Eprog. -- Sebastian Gniazdowski psprint /at/ zdharma.org