unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: mithraeum <mithraeum@protonmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: Performance degradation from long lines
Date: Thu, 25 Oct 2018 18:00:18 +0300	[thread overview]
Message-ID: <83lg6mqdfh.fsf@gnu.org> (raw)
In-Reply-To: <MFfgHOf5wGUxTqL_Zl9dh1SXan5VhYW7U4cbeWaurXpou1xrRnQeN6LAjKU3GxUdS2TdJ3XqNuyQheieSXYktLspNlPnQX4BdCDEN3J6jWU=@protonmail.com> (message from mithraeum on Wed, 24 Oct 2018 23:59:02 +0000)

> Date: Wed, 24 Oct 2018 23:59:02 +0000
> From: mithraeum <mithraeum@protonmail.com>
> 
> In the case of gui Emacs, the reduction of display capability is real,
> but it seems prefereable to freezing Emacs or slowing it down to a crawl.

It is only preferable if the resulting display will be acceptable by
enough users to justify the costs of developing and maintaining the
separate "simplified" display code.

> It also seems better than, or at least a viable alternative to, opening
> files with M-x find-file-literally, which loses font-lock and leaves
> the buffer stuck in Fundamental mode.

Again, only if the result of the "simplified" display will be more
acceptable than Fundamental mode by enough users.  The significant
advantage of find-file-literally is that it already exists, and so
incurs exactly zero costs.

> In the r/emacs thread I was encouraged to post to emacs-dev to get
> the input of more developers, so here I am.

The main motivation for my request to start a discussion here was to
find out whether such a "simplified" display will be acceptable on GUI
frames by enough users.  In r/emacs thread, I described some features
that will be lost (I can repeat here if people prefer that); please
consult that if you want to make up your mind and provide opinions.
IMO, the costs for developing and maintaining such a "simplified"
display code will only be justified if enough people will consider the
resulting display both acceptable and significantly preferable to what
find-file-literally already provides.

> First is that Emacs could have a user-configurable timeout after which
> it could warn the user that it's taking an unexpectedly long time to
> open a file (or find the end of a line) and ask whether to abort,
> continue trying, or drop down to a mode with reduced display
> capabilities (which could be either the equivalent of
> find-file-literally or the above simplified display techniques, if
> they're implemented).

First, it isn't visiting the file (i.e. reading it into a buffer) that
takes time; in fact, the time to visit is almost entirely unaffected
by line length.  What takes time is the display of the initial
windowful of the file's text (and following redisplay as result of
editing).  So I guess the proposal is to have a time-out on that
initial display and on redisplay cycles.

Second, I'm not sure we need to measure the time; line length is a
reliable enough indication of expected display slowdown, so we could
simply look at the typical line lengths instead, which is much
simpler to implement.

And third, it seems like so-long mode already implements this idea, so
perhaps we should simply add it to the core and integrate it by
default.

> The second idea is to use to ignore anything that would slow Emacs
> down while doing a simple count of the line length, and if the line
> length so far is over a certain threshold to ask the same questions as
> above about aborting, continuing, or dropping down to a fail-safe
> mode.

See above.

Please note that these ideas are a kind of "band-aid": they don't
solve the root causes for the slow display, they just disable some
features which make that slow display even slower, and by that make
the critical line length larger.  But you can still create a file with
lines so long that even in Fundamental mode it will be painfully slow
to move through and edit.

> The third is to use some of Emacs' new async abilities to try to open
> the file.  It might still take forever to open, but at least it shouldn't
> freeze all of Emacs in the meantime.

There are no such abilities; the concurrency features in Emacs 26
don't allow running the display code in a separate thread.  Emacs Lisp
threads are mostly cooperative, and only one thread is allowed to run
at any given time.  And the current design of Emacs is such that
redisplay must run from a Lisp thread.



  parent reply	other threads:[~2018-10-25 15:00 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-24 23:59 Performance degradation from long lines mithraeum
2018-10-25  0:27 ` Stefan Monnier
2018-10-25 15:02   ` Eli Zaretskii
2018-10-25 15:37     ` Stefan Monnier
2018-10-25  3:26 ` Phil Sainty
2018-10-25 12:44   ` Stefan Monnier
2018-10-25 13:23     ` Eli Zaretskii
2018-10-25 13:30       ` Stefan Monnier
2018-10-25 15:08         ` Eli Zaretskii
2018-10-25 22:34           ` Phil Sainty
2018-10-26  6:36             ` Eli Zaretskii
2018-10-26 12:48             ` Stefan Monnier
2018-10-27  8:38               ` Phil Sainty
2018-10-27 15:32                 ` Drew Adams
2018-10-28  1:51                   ` Phil Sainty
2018-10-28  1:58                     ` Drew Adams
2018-10-27 22:18                 ` Stefan Monnier
2018-12-08 23:08                 ` Stefan Monnier
2018-12-09 14:40                   ` Phil Sainty
2018-12-30  4:07                     ` Phil Sainty
2019-01-12  1:03                       ` Phil Sainty
2019-01-12 11:08                         ` Eli Zaretskii
2019-03-10 10:22                           ` Phil Sainty
2019-03-10 12:58                             ` Eli Zaretskii
2019-03-10 13:36                               ` martin rudalics
2019-03-10 13:46                                 ` Eli Zaretskii
2019-03-10 23:16                                   ` Phil Sainty
2019-03-10 18:06                                 ` Stefan Monnier
2019-03-11  9:14                                   ` martin rudalics
2019-03-10 23:31                               ` Phil Sainty
2019-03-11  3:35                                 ` Eli Zaretskii
2019-03-11  3:48                                   ` Phil Sainty
2019-03-11 14:35                                     ` Eli Zaretskii
2018-10-26  1:46   ` mithraeum
2018-10-26  2:39     ` Phil Sainty
2018-10-26  2:58       ` mithraeum
2018-10-26  4:43         ` Phil Sainty
2018-10-26  5:54           ` mithraeum
2018-10-26  2:54     ` Phil Sainty
2018-10-26 15:18       ` Stefan Monnier
2018-10-27  3:10     ` Phil Sainty
2018-10-27 22:15       ` Stefan Monnier
2018-12-30  5:23         ` Phil Sainty
2018-10-28  2:03   ` Phil Sainty
2018-10-25 15:00 ` Eli Zaretskii [this message]
2018-10-25 17:18   ` Michael Heerdegen
2018-10-25 17:30     ` Eli Zaretskii
2018-10-26  0:59     ` mithraeum
2018-10-26  6:48       ` Eli Zaretskii
2018-10-26  7:00   ` Ihor Radchenko
2018-10-26  7:28     ` Eli Zaretskii
2018-10-26  7:36       ` Ihor Radchenko
2018-10-26  7:57         ` Eli Zaretskii
2018-10-26  8:05           ` Ihor Radchenko
2018-10-26  8:46             ` Eli Zaretskii
2018-10-26  8:58               ` Ihor Radchenko
2018-10-26  9:08                 ` Eli Zaretskii
2018-10-26  9:46                   ` Noam Postavsky
2018-10-26 12:35                     ` Eli Zaretskii
2018-10-26 15:09                 ` Stefan Monnier
2018-10-26  9:52               ` mithraeum
2018-10-26  8:05         ` mithraeum
2018-10-26 16:05     ` Gemini Lasswell
2018-10-31 13:05       ` Ihor Radchenko
2018-10-31 15:49         ` Eli Zaretskii
2018-10-25 17:53 ` Clément Pit-Claudel
2018-10-25 19:14   ` Eli Zaretskii
2018-10-25 19:17     ` Clément Pit-Claudel
2018-10-26  6:40 ` mithraeum
2018-10-26  7:26   ` Eli Zaretskii
2018-10-26  7:47     ` mithraeum
2018-10-26  8:30       ` Eli Zaretskii
2018-10-26  8:56         ` mithraeum
2018-10-26  9:06           ` Eli Zaretskii
2018-10-26 15:29           ` Stefan Monnier
2018-10-26 15:34 ` Alexander Shukaev
2018-10-26 16:18   ` Stefan Monnier
2018-10-26 16:50     ` Alexander Shukaev
2018-10-26 17:27       ` Stefan Monnier
2018-10-27  2:09   ` Phil Sainty
     [not found] <20190107065207.21793.53271@vcs0.savannah.gnu.org>
     [not found] ` <20190107065208.BA36C21736@vcs0.savannah.gnu.org>
2019-01-10 18:07   ` [Emacs-diffs] scratch/so-long 7273fb2: Add so-long library Stefan Monnier
2019-01-12  2:20     ` Phil Sainty
2019-01-12 15:11       ` Stefan Monnier
2019-04-14 13:09         ` Phil Sainty
2019-04-14 15:14           ` Stefan Monnier
2019-04-14 22:33             ` Phil Sainty
2019-06-27 13:46               ` Performance degradation from long lines Phil Sainty
2019-07-06 14:18                 ` Phil Sainty
2019-07-13  8:07                   ` Eli Zaretskii
2019-07-13  9:07                     ` Stefan Kangas
2019-07-13  9:51                       ` Eli Zaretskii
2019-07-13 10:23                         ` Stefan Kangas
2019-07-13 10:29                           ` Eli Zaretskii
2019-07-13 10:38                             ` Stefan Kangas
2019-07-13 10:58                               ` Phil Sainty
2019-07-13 11:23                                 ` Eli Zaretskii
2019-07-13 11:23                               ` Eli Zaretskii
2019-07-13  9:33                     ` Phil Sainty
2019-07-13  9:56                       ` Eli Zaretskii
2019-07-13 13:31                         ` Stefan Monnier
2019-07-13 13:43                           ` Stefan Kangas
2019-07-13 14:14                           ` Eli Zaretskii
2019-07-13 14:17                             ` Stefan Monnier
2019-07-13 18:17                               ` Eli Zaretskii
2019-07-13 22:22                                 ` Stefan Monnier
2019-07-14  5:39                                   ` Eli Zaretskii
2019-07-15 13:12                                     ` Dmitry Gutov
2019-07-18  6:30                                       ` Eli Zaretskii
2019-07-18 14:48                                         ` Stefan Monnier
2019-07-18 17:11                                           ` Clément Pit-Claudel
2019-07-18 18:11                                             ` Stefan Monnier
2019-07-18 18:33                                           ` Andy Moreton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83lg6mqdfh.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=mithraeum@protonmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).