From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id oAC9FdNSq17zHwAA0tVLHw (envelope-from ) for ; Thu, 30 Apr 2020 22:36:03 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id aKPVAN1Sq16tFgAAbx9fmQ (envelope-from ) for ; Thu, 30 Apr 2020 22:36:13 +0000 Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:470:142::17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 2E971942CFE for ; Thu, 30 Apr 2020 22:36:11 +0000 (UTC) Received: from localhost ([::1]:48064 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUHmr-0001NN-PM for larch@yhetil.org; Thu, 30 Apr 2020 18:36:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45260) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUHmN-0001Mn-Aq for emacs-orgmode@gnu.org; Thu, 30 Apr 2020 18:35:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUHmE-0002Oh-FA for emacs-orgmode@gnu.org; Thu, 30 Apr 2020 18:35:37 -0400 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:63697) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jUHmD-0002FB-2U for emacs-orgmode@gnu.org; Thu, 30 Apr 2020 18:35:29 -0400 X-Originating-IP: 185.131.40.67 Received: from localhost (40-67.ipv4.commingeshautdebit.fr [185.131.40.67]) (Authenticated sender: admin@nicolasgoaziou.fr) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id DA8C8240004; Thu, 30 Apr 2020 22:35:25 +0000 (UTC) From: Nicolas Goaziou To: tbanelwebmin Subject: Re: [ANN] faster org-table-to-lisp References: <820681a6-4973-f016-6425-4afb9c9486a7@free.fr> <87wo5xcs3p.fsf@nicolasgoaziou.fr> <0166c38e-e1f2-9cbc-4cf8-1b287600368d@free.fr> Mail-Followup-To: tbanelwebmin , emacs-orgmode@gnu.org Date: Fri, 01 May 2020 00:35:25 +0200 In-Reply-To: <0166c38e-e1f2-9cbc-4cf8-1b287600368d@free.fr> (tbanelwebmin@free.fr's message of "Thu, 30 Apr 2020 22:28:58 +0200") Message-ID: <878sica9g2.fsf@nicolasgoaziou.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=217.70.183.193; envelope-from=mail@nicolasgoaziou.fr; helo=relay1-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/04/30 18:35:26 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Received-From: 217.70.183.193 X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: emacs-orgmode@gnu.org Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 X-Spam-Score: -1.01 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 2001:470:142::17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Scan-Result: default: False [-1.01 / 13.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; GENERIC_REPUTATION(0.00)[-0.49477580903609]; HAS_XOIP(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2001:470:142::/48:c]; IP_REPUTATION_HAM(0.00)[asn: 22989(0.17), country: US(-0.00), ip: 2001:470:142::17(-0.49)]; DWL_DNSWL_FAIL(0.00)[2001:470:142::17:server fail]; MX_GOOD(-0.50)[cached: eggs.gnu.org]; RCPT_COUNT_TWO(0.00)[2]; MAILLIST(-0.20)[mailman]; FREEMAIL_TO(0.00)[free.fr]; RCVD_IN_DNSWL_FAIL(0.00)[2001:470:142::17:server fail]; RCVD_TLS_LAST(0.00)[]; R_DKIM_NA(0.00)[]; ASN(0.00)[asn:22989, ipnet:2001:470:142::/48, country:US]; MID_RHS_MATCH_FROM(0.00)[]; TAGGED_FROM(0.00)[larch=yhetil.org]; ARC_NA(0.00)[]; RCVD_COUNT_FIVE(0.00)[6]; FROM_NEQ_ENVFROM(0.00)[mail@nicolasgoaziou.fr,emacs-orgmode-bounces@gnu.org]; FROM_HAS_DN(0.00)[]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; MIME_GOOD(-0.10)[text/plain]; MIME_TRACE(0.00)[0:+]; DMARC_NA(0.00)[nicolasgoaziou.fr]; HAS_LIST_UNSUB(-0.01)[]; FORGED_SENDER_MAILLIST(0.00)[] X-TUID: mVHqDJeTxGAg tbanelwebmin writes: > I found a way to ensure full backward compatibility. I keep the same > signature. When a table is given as a string parameter, it is inserted > into a temporary buffer, which is then parsed. Overall, the resulting > speed is quite satisfactory. Awwww, you didn't like my ELEMENT suggestion. > I also made the function more tolerant to ill-formed tables: missing > "|" or excess of spaces at the end of a row are now gracefully > accepted. Great! > (while (not (re-search-forward "\\=\\s-*\n" end t)) (re-search-forward "\\=..." ...) -> (looking-at "..." ...) Note that Org does not use \\s- but the simpler [ \t]. Also, the regexp assumes the table end with a newline character, which may not be the case. > (unless (re-search-forward "\\=\\s-*\\([^|\n]*\\)\\(|?\\)" end t) > (user-error "Malformed table at char %s" (point))) This cannot happen. The regexp above matches anything, i.e., the empty string. > (goto-char (match-end 1)) > (skip-chars-backward " \t" (match-beginning 1)) > (push > (buffer-substring-no-properties (match-beginning 1) (point)) > row) > (goto-char (match-end 2))) > (push (nreverse row) table))) > (nreverse table))))) I applied your suggestion, with a few simplifications. Hopefully, it squeezed a bit more the execution time. Let me know! > The new implementation can be more than 100 times faster. This enhances > responsiveness of Babel or Gnuplot blocks handling thousands long > tables. Looks good. However, we didn't change the signature, so I didn't add this to ORG-NEWS. It is in the commit message, tho. Thank you!