From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: How to make agenda generation faster Date: Tue, 09 Oct 2018 18:11:54 +0200 Message-ID: <877eirdrqt.fsf@nicolasgoaziou.fr> References: <87h8hy1ho5.fsf@mbork.pl> <87o9c34ocl.fsf@alphapapa.net> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55112) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g9uc5-0007Ky-Pe for emacs-orgmode@gnu.org; Tue, 09 Oct 2018 12:12:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g9uc2-0006iZ-IN for emacs-orgmode@gnu.org; Tue, 09 Oct 2018 12:12:01 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:33387) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1g9uc2-0006hm-9c for emacs-orgmode@gnu.org; Tue, 09 Oct 2018 12:11:58 -0400 In-Reply-To: <87o9c34ocl.fsf@alphapapa.net> (Adam Porter's message of "Tue, 09 Oct 2018 01:37:46 -0500") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Adam Porter Cc: emacs-orgmode@gnu.org Hello, Adam Porter writes: > My feedback is: there be dragons. ;) The Agenda code is very > complicated and hard to follow, and it's hard to optimize something that > is hard to understand. And hard to maintain. We should really do something about it. > In the long run, to get significant speed improvements, I think it may > be necessary to reimplement the Agenda. Agreed. > However, due to the nature of it (i.e. regexp searches through buffers > to find entries), I don't know how much faster it can be made. I don't > mean that I doubt it can be--I mean that, truly, I don't know, because > it's hard to understand the flow of the code. > > I think that it is already fairly well optimized, given its limitations. > However, an example of a potential improvement would be to refactor it > to work with lexical-binding enabled (which didn't exist when it was > first created); I can't say how much of an improvement it would make, > but my understanding is that code that runs with lexical-binding enabled > is generally faster. Not really. But it's certainly easier to understand since it removes one class of problems. > But doing that would be a non-trivial project, I > think, requiring the fixing of many inevitable regressions in the > process. > > If you haven't seen them already, you may find my org-ql and > org-ql-agenda code useful. org-ql-agenda presents an Agenda-like > buffer. N.B. It does *not* implement most of the Agenda features, but > it does emulate an Org Agenda buffer by setting the appropriate text > properties on entries and formatting them in a similar way. Instead of re-inventing the wheel, or putting efforts into a wheel-like invention, wouldn't it make sense to actually work on Org Agenda itself? I didn't look closely at org-ql, but I had the idea of splitting the Agenda in two distinct parts. One would be responsible for collecting, possibly asynchronously, and caching data from Org documents. The other one would provide a DSL to query and display the results extracted from the output of the first part. The second part could even be made generic enough to be extracted from Org and become some part of Emacs. Displaying filtered data, maybe in a timeline, could be useful for other packages. Unfortunately, I don't have time to work on this. Ah well. So again, wouldn't it be nice to think about Org Agenda-ng? Regards, -- Nicolas Goaziou