diff options
| author | Sacha Chua <sacha@sachachua.com> | 2021-12-02 12:46:03 -0500 | 
|---|---|---|
| committer | Sacha Chua <sacha@sachachua.com> | 2021-12-02 12:46:03 -0500 | 
| commit | 2b47dac39b443210eb0d34ac31257f19c4ab1a64 (patch) | |
| tree | a6d5ff7dfd45f90c08615ff4386cc562dac17e59 /2021/talks/faster.md | |
| parent | 6ec428824567a2f8325da742171bff1166b2b5c3 (diff) | |
| download | emacsconf-wiki-2b47dac39b443210eb0d34ac31257f19c4ab1a64.tar.xz emacsconf-wiki-2b47dac39b443210eb0d34ac31257f19c4ab1a64.zip | |
Add pad stuff
Diffstat (limited to '2021/talks/faster.md')
| -rw-r--r-- | 2021/talks/faster.md | 75 | 
1 files changed, 75 insertions, 0 deletions
| diff --git a/2021/talks/faster.md b/2021/talks/faster.md index e8a13489..220a715d 100644 --- a/2021/talks/faster.md +++ b/2021/talks/faster.md @@ -30,6 +30,59 @@ Preferred contact info | <dgutov@yandex.ru>  IRC nick: dgutov +Pad: + +-   Q1: Why are overlays slow compared to text-properties? I (believe +    to) understand that it is (in part only?) due to \"get element n in +    vector vs list\". If so, then why don\'t we change that? There could +    be a text-property called \"overlays\", so that lookup would also be +    like in a vector. What benefits does the datastructure currently +    used for overlays have that make that undesirable? Would a mixed +    approach make sense; i.e. allow non-modifiyng lookups to use the +    \"cached\" overlays that are stored in the \"overlay\" text-property +    and make text-inserting and overlay-moving actions store in the +    currently used datastructure as well as in the indirect +    text-property=\>overlay cache? +    -   A: \"There is a pending patch to represent the set of a +        buffer\'s overlays as an AAtree or somesuch..\" +    -   Sounds promising :) +    -   For more details, check out these threads: +    -   <https://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00616.html> +    -   <https://lists.gnu.org/archive/html/emacs-devel/2016-11/msg00475.html> +    -   <https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00565.html> +    -   <https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00115.html> +-   Q2: As a non-programmer, would these sorts of optimizations be +    helpful to do on a personal init.el file? +    -   A: Probably not +    -   Though too much mode-line customisation may slow things down. +-   Q3: What\'s a good approach for benchmarking destructive +    operations?  If you delete elements from a list in-place, all +    subsequent runs will be artificially fast. +    -   A: There is an example of a comparison between operations from +        different libraries in the example file provided by the talk. +        Particularly check the benchmarks for delete and remove +        operations (destructive and non-destructive, respectively). +-   Q4:Cl-lib constructors, getters, and setters usually expand into +    multiple levels of let-bindings. AFAIU, every let-binding is an +    extra memory allocation. Do you recommend avoiding cl-defstruct in +    favour of \"pure\" lists/vectors? +    -   A: basically no. if defstruct allows you to organise better, go +        ahead. +-   Q5: Is it possible to optimize some emacs packages by making use of +    code compiled from other languages (like C or Common Lisp) ((i.e. in +    the same way python is able to import C code))? +    -   A: yes emacs modules allow you to run C or Rust, transitioning +        between emacs proper and module (passing the data) might slow +        things down? Because of copying that\'s necessary to avoid +        issues with gc. +-   Q6:You mentioned that overlays are much slower compared to text +    properties. What about text properties vs. buffer-local variables to +    store position cache? +    -   A: I haven\'t measured it but offhand I\'m going to guess that +        buffer-local variables will be faster. +    -   Also depends on the structure you\'re going to use for the +        cache - is it a single cons, or a list, or a tree, etc. +  BBB:  - AVL tree @@ -53,6 +106,28 @@ IRC:  - For more info about the performance of overlays vs text properties data structure, there's an Emacs TODO about it. C-h C-t and search for "Move overlays to intervals.c".  - cl-defstruct getters/setters have compiler macros that expand into simple aref calls on vectors, they are very efficient +Links: + +-   you might find the this bench-multi-lexical macro useful: +    <https://alphapapa.github.io/emacs-package-dev-handbook/#outline-container-Optimization> +    or +    <https://github.com/alphapapa/emacs-package-dev-handbook#bench-multi-lexical>  +-   <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/elp.el> +-   <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/benchmark.el> +-   \"Use hash tables kids!\" +-   PSA: buffer-local-value is generally much faster than +    with-current-buffer if all you need to do is get the value of a +    variable in a buffer  +-   EIEIO\'s object construction is slow because it goes through +    \`make-instance\` which is a generic function and it itself calls +    various other generic functions, so there\'s a lot of cl-generic +    dispatch overhead; and then there\'s the fact that the (keyword) +    arguments are laboriously parsed at run-time so it itself is slow as +    well. +-   There is a pending patch to represent the set of a buffer\'s +    overlays as an AAtree or somesuch. +-   <https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.el> +  [[!inline pages="internal(2021/captions/faster)" raw="yes"]]  [[!inline pages="internal(2021/info/faster-nav)" raw="yes"]] | 
