unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] comment-cache 223d16f 2/3: Apply `comment-depth' text properties when calling `back_comment'.
Date: Mon, 14 Mar 2016 12:23:30 +0000	[thread overview]
Message-ID: <20160314122330.GC1894@acm.fritz.box> (raw)
In-Reply-To: <0ce1b5a5-6892-47ad-03d4-d4c2ba2bea54@yandex.ru>

Hello, Dmitry.

On Mon, Mar 14, 2016 at 03:13:43AM +0200, Dmitry Gutov wrote:
> On 03/13/2016 07:59 PM, Alan Mackenzie wrote:

> >> That severely depends on your usage. Have you tried it?

> > Have now, yes.

> Any performance numbers on using this approach in C/l mode?

[ By "this approach" I'm taking it you mean scanning forward from safe
positions.]

No.  Except it uses a lot of parsing forward from safe positions anyway.

> >> Second, I'm sure you can decrease syntax-ppss-max-span, if your language
> >> is expensive to parse.

> > I would think the speed of parse-partial-sexp is pretty much constant,
> > independent of the language.

> Well, it seems like that you would be calling it much more frequently 
> than other packages. So you could adjust for that.

Maybe.

> > It will be much faster.  The only looping involved is over the levels of
> > an optimised binary tree (the text property intervals), not linearly
> > over 10k characters.  By the time syntax-ppss has finished consing down
> > its cache list, the text property stuff would be done.

> Yes, it would be fast. But like we've noticed, calling syntax-ppss is 
> also quick, and it basically has a constant upper bound, on average. 
> It's hard to be *significantly* faster than that.

It's two slow to use as a replacement for back_comment, in the sense I
would like to do - in place of scanning a comment backward character by
character, I want to use a cache (calculated by forward scanning) to
determine the beginning of a comment.  Having to scan forward lots of
characters (as opposed to a few) is out of the question for this
application.

> So I have to wonder why the "get out of a comment" feature is used in 
> C/l mode so much that it becomes a bottleneck, and you get significant 
> improvement in performance by dropping the caching logic to C. That is, 
> of course, not a nice thing to ask considering the overall complexity of 
> CC Mode, but still.

> I don't see anything comparable to 10 second waiting described in 
> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22884, when doing a 
> comparable operation in a 5000-line Ruby file.

Here's a quick summary of how that happened:  on L1661 of config.h, C
Mode had to scan back to the beginning of a statement.  That involved
going back over ~1600 lines of comments and preprocessor constructs.
When it got to the critical comment and tried to go back over it,
(forward-comment -1) said nil, because of that paren in column 0.  That
paren in column 0, although in a comment, was deemed to be the start of
a defun.  C Mode was then trying to parse "code" over a region with a
1600 line gap in the middle.  Hence the 10 second delay in seeing the
character echoed.  Paul has purged our code of parens in column 0.  But
it would be nice not to have the restriction.

> >> But it comes with a set of drawbacks that has already been brought up
> >> in the discussions.

> > That set has one member: the partial overlap in functionality with
> > syntax-ppss.  No intrinsic drawbacks have yet been pointed out.  But you
> > do so below (thanks!).

> Aside from everything that's been mentioned already, it's written in C, 
> reducing the pool of developers willing to work on it. And no, it 
> doesn't make it "simple and maintainable", at least from my perspective.

My point was that it is so simple that it _could_ be written in C, and
that without any great difficulties.  Parts of it can only be written in
C (the bits that ensure the cache is marked stale when certain
sytax-table text properties are set/cleared when
`inhibit-modification-hooks' is bound to non-nil).

-- 
Alan Mackenzie (Nuremberg, Germany).



  parent reply	other threads:[~2016-03-14 12:23 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20160308132530.861.91488@vcs.savannah.gnu.org>
     [not found] ` <E1adHdj-0000FI-0W@vcs.savannah.gnu.org>
2016-03-08 14:19   ` [Emacs-diffs] comment-cache 223d16f 2/3: Apply `comment-depth' text properties when calling `back_comment' Stefan Monnier
2016-03-08 18:30     ` Alan Mackenzie
2016-03-08 18:42       ` Stefan Monnier
2016-03-08 20:07         ` Alan Mackenzie
2016-03-08 21:22           ` Dmitry Gutov
2016-03-08 21:43             ` Alan Mackenzie
2016-03-09  0:17           ` Stefan Monnier
2016-03-09  1:54             ` Stefan Monnier
2016-03-09 10:49             ` Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.] Alan Mackenzie
2016-03-09 13:11               ` Stefan Monnier
2016-03-09 14:19                 ` Alan Mackenzie
2016-03-09 19:16                   ` Stefan Monnier
2016-03-09 19:22                     ` Clément Pit--Claudel
2016-03-09 19:37                     ` Alan Mackenzie
2016-03-09 21:40                       ` Stefan Monnier
2016-03-10 13:01                         ` Alan Mackenzie
2016-03-10 14:52                           ` Stefan Monnier
2016-03-10 15:29                             ` Alan Mackenzie
2016-03-10 16:45                               ` Stefan Monnier
2016-03-10 17:25                                 ` Alan Mackenzie
2016-03-10 17:34                                   ` Stefan Monnier
2016-03-10 19:08                                     ` Alan Mackenzie
2016-03-10 23:10                                       ` Stefan Monnier
2016-03-11 12:50                                         ` Stefan Monnier
2016-03-11 20:48                                         ` Alan Mackenzie
2016-03-11 22:35                                           ` Stefan Monnier
2016-03-11 23:08                                             ` Alan Mackenzie
2016-03-11 23:09                                               ` Clément Pit--Claudel
2016-03-11 23:31                                               ` Stefan Monnier
2016-03-10 23:31                                     ` John Wiegley
2016-03-11  2:08                                       ` Clément Pit--Claudel
2016-03-11  3:08                                       ` Stefan Monnier
2016-03-11  7:27                           ` Andreas Röhler
2016-03-11 12:08                             ` Alan Mackenzie
2016-03-11 12:30                               ` Dmitry Gutov
2016-03-11 13:04                                 ` Alan Mackenzie
2016-03-11 20:21                                   ` Dmitry Gutov
2016-03-12 20:19                               ` Andreas Röhler
2016-03-12 20:38                                 ` Dmitry Gutov
2016-03-12 20:45                                 ` Alan Mackenzie
2016-03-13 14:56                                   ` Andreas Röhler
2016-03-10 13:41                   ` Stefan Monnier
2016-03-09 17:06               ` How do you check if the current point is in a comment or a string? (Was Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.]) Clément Pit--Claudel
2016-03-09 17:24                 ` Kaushal Modi
2016-03-09 17:56                   ` Clément Pit--Claudel
2016-03-09 19:19                     ` Kaushal Modi
2016-03-09 19:34                       ` Clément Pit--Claudel
2016-03-10 14:28                     ` Stefan Monnier
2016-03-10 15:03                       ` Clément Pit--Claudel
2016-03-10 15:20                         ` Stefan Monnier
2016-03-10 17:21                           ` Clément Pit--Claudel
2016-03-12 20:45                       ` Andreas Röhler
2016-03-12 20:53                         ` Clément Pit--Claudel
2016-03-09 16:37       ` [Emacs-diffs] comment-cache 223d16f 2/3: Apply `comment-depth' text properties when calling `back_comment' Richard Stallman
2016-03-09 17:06         ` Dmitry Gutov
2016-03-10 21:20           ` Richard Stallman
2016-03-11  0:26             ` Dmitry Gutov
2016-03-11 12:22               ` Alan Mackenzie
2016-03-11 12:52                 ` Stefan Monnier
2016-03-11 16:20                   ` Drew Adams
2016-03-09 17:48         ` Alan Mackenzie
2016-03-09 19:58           ` martin rudalics
2016-03-09 20:36             ` Eli Zaretskii
2016-03-09 20:53               ` John Wiegley
2016-03-13  9:30                 ` Daniel Colascione
2016-03-13 15:28                   ` Stefan Monnier
2016-03-13 16:24                   ` Eli Zaretskii
2016-03-13 16:27                     ` Daniel Colascione
2016-03-13 17:19                       ` Eli Zaretskii
2016-03-14  1:13                         ` Stefan Monnier
2016-03-14 16:10                           ` Eli Zaretskii
2016-03-11 18:27             ` Alan Mackenzie
2016-03-12 17:08             ` Alan Mackenzie
2016-03-12 18:10               ` martin rudalics
2016-03-12 18:22                 ` Paul Eggert
2016-03-12 18:46                   ` martin rudalics
2016-03-12 19:36                     ` Alan Mackenzie
2016-03-13  9:26                       ` martin rudalics
2016-03-13 11:52                         ` Alan Mackenzie
2016-03-13 12:08                           ` martin rudalics
2016-03-13 12:49                             ` Alan Mackenzie
2016-03-13 13:32                               ` martin rudalics
2016-03-13 17:59                                 ` Eli Zaretskii
2016-03-13 20:09                                   ` martin rudalics
2016-03-14  1:15                                   ` Paul Eggert
2016-03-14  7:42                                     ` martin rudalics
2016-03-14 11:22                                       ` Alan Mackenzie
2016-03-14 19:41                                         ` martin rudalics
2016-03-14 20:58                                           ` Alan Mackenzie
2016-03-14 16:15                                       ` Eli Zaretskii
2016-03-14 19:41                                         ` martin rudalics
2016-03-14 17:00                                       ` Paul Eggert
2016-03-14 19:41                                         ` martin rudalics
2016-03-14 16:09                                     ` Eli Zaretskii
2016-03-13 18:00                               ` Eli Zaretskii
2016-03-13 18:41                                 ` Alan Mackenzie
2016-03-12 20:56               ` Dmitry Gutov
2016-03-12 21:29                 ` Clément Pit--Claudel
2016-03-12 21:59                   ` Dmitry Gutov
2016-03-12 21:58                 ` Alan Mackenzie
2016-03-12 22:16                   ` Dmitry Gutov
2016-03-13 17:59                     ` Alan Mackenzie
2016-03-13 22:49                       ` Stefan Monnier
2016-03-14 12:51                         ` Alan Mackenzie
2016-03-15  3:14                           ` Stefan Monnier
2016-03-14  1:13                       ` Dmitry Gutov
2016-03-14  1:30                         ` Stefan Monnier
2016-03-14  1:45                           ` Dmitry Gutov
2016-03-14  2:18                             ` Stefan Monnier
2016-03-14 12:23                         ` Alan Mackenzie [this message]
2016-03-14 16:15                           ` Dmitry Gutov
2016-03-14 17:29                             ` Alan Mackenzie
2016-03-14 17:52                               ` Dmitry Gutov
2016-03-14 18:46                                 ` Alan Mackenzie
2016-03-14 19:33                                   ` Dmitry Gutov
2016-03-14 21:20                                     ` Alan Mackenzie
2016-03-15  3:10                                       ` Stefan Monnier
2016-03-17  0:47                                       ` Dmitry Gutov
2016-03-17 18:47                                         ` Alan Mackenzie
2016-03-18  1:24                                           ` Dmitry Gutov
2016-03-10 21:20           ` Richard Stallman
2016-03-10 22:24             ` Alan Mackenzie
2016-03-12  1:53               ` Richard Stallman
2016-03-12  3:28                 ` Stefan Monnier
2016-03-12 19:28                   ` Richard Stallman
2016-03-09 17:51         ` Clément Pit--Claudel
2016-03-10 21:20           ` Richard Stallman
2016-03-10 21:38             ` Clément Pit--Claudel
2016-03-12  1:53               ` Richard Stallman
2016-03-10  7:14       ` Andreas Röhler

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=20160314122330.GC1894@acm.fritz.box \
    --to=acm@muc.de \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    /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).