From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: speeding up Babel Gnuplot Date: Tue, 03 Jan 2017 22:55:16 +0100 Message-ID: <87wpebbygr.fsf@nicolasgoaziou.fr> References: <5864217C.7060001@free.fr> <586963CB.1000006@free.fr> <87d1g6qrqh.fsf@nicolasgoaziou.fr> <586AB3DB.6070702@free.fr> <586C1A53.90601@free.fr> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:49394) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cOX3C-0001qg-Ux for emacs-orgmode@gnu.org; Tue, 03 Jan 2017 16:55:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cOX39-00058O-T7 for emacs-orgmode@gnu.org; Tue, 03 Jan 2017 16:55:23 -0500 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:53020) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cOX39-00057s-MZ for emacs-orgmode@gnu.org; Tue, 03 Jan 2017 16:55:19 -0500 In-Reply-To: <586C1A53.90601@free.fr> (Thierry Banel's message of "Tue, 03 Jan 2017 22:40:35 +0100") 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: Thierry Banel Cc: emacs-orgmode@gnu.org Hello, Thierry Banel writes: > Here is a patch to avoid generating temporary files multiple times. > > There is no way to ensure a single call to > (org-babel-gnuplot-process-vars) without modifying ob-core.el. I don't > want to do that because I would have to change a lot of babel backends. > Thus, I come back to my first light patch. > > A 'param' list is passed around. It reflects the #+BEGIN_SRC header. My > patch changes it in-place from: > (((:var data (3000) (2999) (2998) (2997) ... > to: > (((:var data . "/tmp/babel-16991kSr/gnuplot-16991YBq") ... > > The 'param' list behaves as a cache. There is nothing wrong with that. > The worst thing that can happen is the caching no longer working in case > 'param' would be copied some day. Results would stay correct. Thank you. What is the benefit of this patch? I mean, `org-babel-gnuplot-process-vars' is already quite fast here. Do you have some benchmark for that? > (car pair) ;; variable name > - (let* ((val (cdr pair)) ;; variable value > - (lp (listp val))) > - (if lp > + (let ((val (cdr pair))) ;; variable value > + (if (not (listp val)) > + val > + (let ((temp-file (org-babel-temp-file "gnuplot-")) > + (first (car val))) > + (setcdr pair temp-file) ;; <------ caching here It would be nice to expunge the comment a bit. > (org-babel-gnuplot-table-to-data > - (let* ((first (car val)) > - (tablep (or (listp first) (symbolp first)))) > - (if tablep val (mapcar 'list val))) > - (org-babel-temp-file "gnuplot-") params) > - val)))) > + (if (or (listp first) (symbolp first)) > + val > + (mapcar 'list val)) > + temp-file params)))))) > (org-babel--get-vars params)))) > > (defun org-babel-expand-body:gnuplot (body params) Another option would be to generate a file according to the hash of contents so `org-babel-gnuplot-process-vars' knows when to create a new file. Regards, -- Nicolas Goaziou