From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#58950: [PATCH] * lisp/subr.el (buffer-match-p): Optimise performance Date: Mon, 7 Nov 2022 03:04:35 +0200 Message-ID: References: <875yfyebi0.fsf@posteo.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="15823"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 To: Philip Kaludercic , 58950@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Nov 07 02:05:16 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1orqZf-0003ub-FY for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 07 Nov 2022 02:05:15 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1orqZU-0000gA-CZ; Sun, 06 Nov 2022 20:05:04 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1orqZS-0000fw-Ed for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 20:05:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1orqZS-0003kQ-3y for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 20:05:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1orqZR-0007eM-L2 for bug-gnu-emacs@gnu.org; Sun, 06 Nov 2022 20:05:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 07 Nov 2022 01:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 58950 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 58950-submit@debbugs.gnu.org id=B58950.166778309029383 (code B ref 58950); Mon, 07 Nov 2022 01:05:01 +0000 Original-Received: (at 58950) by debbugs.gnu.org; 7 Nov 2022 01:04:50 +0000 Original-Received: from localhost ([127.0.0.1]:60944 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1orqZG-0007dr-4v for submit@debbugs.gnu.org; Sun, 06 Nov 2022 20:04:50 -0500 Original-Received: from mail-wr1-f52.google.com ([209.85.221.52]:34551) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1orqZA-0007db-Lj for 58950@debbugs.gnu.org; Sun, 06 Nov 2022 20:04:48 -0500 Original-Received: by mail-wr1-f52.google.com with SMTP id k8so14142958wrh.1 for <58950@debbugs.gnu.org>; Sun, 06 Nov 2022 17:04:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=qzu3dA7mFWJmo4aSwSsRj/PbqS+lVjQKUWXRVGrx3Vo=; b=TpFtkLICGd8YMmLdKztdpEFaNU84sxwM7vcv/qblfQ2zVvy//BDedOu2ZrQ7SRz9cA Vh7hP3YY2dAkhPuODb9Lql/MSRnCwnONOy6QmQAnC8+HXzZafc0PIb5oPMc52oxoN/Dn isBLcfO8xLPBR7agmISTjyJlQcNHewCznSDjqZOSem7HybF4cGjT1QXup0Rb4SSLHRpW B8ggVScYzM+dpXvnUhCmXlW7E2YvNJRDqj7wexC+L/bDU1l816H5BTvlH3XWV1bjrwHd lUWfvqgmuNFJ7G9zjjZN4jfZbA4rhKzgoSJ9keYoriSAjiig6lwPGutbNbeXtTFnCIwg F4Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qzu3dA7mFWJmo4aSwSsRj/PbqS+lVjQKUWXRVGrx3Vo=; b=wL0BzF2Xr7sHDtR9+oTp1uy1SddS2hqb5WsHqpR7FgnrlAG3vP5aWjawijH/UJTlaE JVO6tglpmYOkirmKTTR5un44798GHqRD1x+UGVG14lM3reQcgKoMmQJsvm2Xh00cBlwf D/w2PxaOzbeZBn+BjtF4Joj2gVTDtHA3FgfRk0RAX1UU2WB2SgPzvxmVFDhvjWyND3g4 l4ZwIM/u0xGgy+TS6AbmXFau2yhQOvhV9aapfoaJ17WwL1xQmJTZudXszFJGJLdskHLp iF0wgmWrpx/J33ga2RCnwDl3RFvGDYM8h9gbsLrRygKWcyQX4d0EGMVxujMBJ6QdqfQa WsRw== X-Gm-Message-State: ACrzQf2hnT02N+EIxXrQZhNOK57RVVX2uMDI+cZF6G09pyZUdc1pU5Qc WYMVoH0H46TjMJRjY65Ha74= X-Google-Smtp-Source: AMsMyM6WsAkgMm+chpw2U428mLPwOIdqpm/GL38uXyNgyvyfQXE61Oy/3BQV9llRCayMrzdpsJ1p+A== X-Received: by 2002:a5d:4711:0:b0:236:48b6:cb89 with SMTP id y17-20020a5d4711000000b0023648b6cb89mr30364336wrq.246.1667783078710; Sun, 06 Nov 2022 17:04:38 -0800 (PST) Original-Received: from [192.168.0.6] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id j7-20020a05600c190700b003b477532e66sm27918395wmq.2.2022.11.06.17.04.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 06 Nov 2022 17:04:38 -0800 (PST) Content-Language: en-US In-Reply-To: <875yfyebi0.fsf@posteo.net> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:247247 Archived-At: On 01.11.2022 21:11, Philip Kaludercic wrote: > 1. Style. I wrap the defun in a let (or rather letrec) block to avoid > littering the global namespace. It isn't necessary, and one could > argue it makes debugging more difficult. > > 2. Caching policy. Caching is critical to this optimisation. Just > using byte-compilation would cause the above test to slow down to > (76.323692627 656 57.088315405). The question is if the hash map > will collect too much garbage over time, and if there is a better > approach that could be taken? I'd like to let our language-level specialists to take the deeper look. This approach looks the most straightforward, but there could be others, just like "compiling" the form inside defcustom setter (for project-kill-buffer-conditions, and every similar option), doing precompilation closer to where the rules are used (similar to font-lock-compile-keywords), or not doing any of that. All depending on how long a typical compilation takes, and how many buffers the user has to have, to see any noticeable benefit. On the last note, I'm curious how many buffers would it take to see a 50ms improvement in match-buffers' runtime when using the current project-kill-buffer-conditions's value, for example.