From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#15294: 24.3.50; js2-mode parser is several times slower in lexical-binding mode Date: Sun, 15 Sep 2013 01:04:22 -0400 Message-ID: References: <871u51ll93.fsf@yandex.ru> <5233E40D.4000102@yandex.ru> <5234FB3D.40209@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1379221520 16640 80.91.229.3 (15 Sep 2013 05:05:20 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 15 Sep 2013 05:05:20 +0000 (UTC) Cc: 15294@debbugs.gnu.org To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Sep 15 07:05:22 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VL4WP-0006L0-Gx for geb-bug-gnu-emacs@m.gmane.org; Sun, 15 Sep 2013 07:05:21 +0200 Original-Received: from localhost ([::1]:55406 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VL4WO-00069a-WE for geb-bug-gnu-emacs@m.gmane.org; Sun, 15 Sep 2013 01:05:21 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42190) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VL4WE-000693-J6 for bug-gnu-emacs@gnu.org; Sun, 15 Sep 2013 01:05:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VL4W7-0001Ml-4P for bug-gnu-emacs@gnu.org; Sun, 15 Sep 2013 01:05:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:57664) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VL4W7-0001Kj-15 for bug-gnu-emacs@gnu.org; Sun, 15 Sep 2013 01:05:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VL4W5-0004H1-W5 for bug-gnu-emacs@gnu.org; Sun, 15 Sep 2013 01:05:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 15 Sep 2013 05:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15294 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 15294-submit@debbugs.gnu.org id=B15294.137922146416383 (code B ref 15294); Sun, 15 Sep 2013 05:05:01 +0000 Original-Received: (at 15294) by debbugs.gnu.org; 15 Sep 2013 05:04:24 +0000 Original-Received: from localhost ([127.0.0.1]:37723 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VL4VT-0004G9-If for submit@debbugs.gnu.org; Sun, 15 Sep 2013 01:04:23 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.182]:42120) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VL4VR-0004Ft-9t for 15294@debbugs.gnu.org; Sun, 15 Sep 2013 01:04:21 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av8EABK/CFG4rxBo/2dsb2JhbABEuzWDWRdzgh4BAQQBViMFCwsOJhIUGA0kiB4GwS2RCgOkeoFegxM X-IPAS-Result: Av8EABK/CFG4rxBo/2dsb2JhbABEuzWDWRdzgh4BAQQBViMFCwsOJhIUGA0kiB4GwS2RCgOkeoFegxM X-IronPort-AV: E=Sophos;i="4.84,565,1355115600"; d="scan'208";a="27848534" Original-Received: from 184-175-16-104.dsl.teksavvy.com (HELO fmsmemgm.homelinux.net) ([184.175.16.104]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 15 Sep 2013 01:00:36 -0400 Original-Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id AE5BFAE29B; Sun, 15 Sep 2013 01:04:22 -0400 (EDT) In-Reply-To: <5234FB3D.40209@yandex.ru> (Dmitry Gutov's message of "Sun, 15 Sep 2013 03:11:41 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:78414 Archived-At: > Can the fact that `dotimes', `dolist' and `loop' are advised with > cl--wrap-in-nil-block', which expands into `catch' form, make much > of a difference? No, these only expand to `catch' if there's a `return' inside. > `js2-get-token' has 13 local variables (*). Which is, while not a little, > far from 100. Most of the other functions have fewer than that. I don't know how many it takes to be significantly slower than `symbol-value'. > Are you counting the global variables, too? No. But arguments, yes, and every (defvar ) between point and BOB as well. > The dynamic-binding interpreter has to work with them, too. How is it > that much faster? Dynamic binding lookup is done by `symbol-value' which is just a field access (plus checking that the var is not special (e.g. buffer-local or a predefined C variable). >>> But 2.6 vs 2.1, it still a noticeable regression. Do you suppose the usage >>> of `setq' is the main contributor? >> The problem goes as follows: ... > Thank you for the detailed explanation. > There are a few `catch' forms left there, for tags `continue' and `break', > used for control flow. So, most of the 0.5s difference left is likely due to > them, right? The problem is not just the use of catch, but the combination of "catch" with all those vars let-bound outside of catch, used inside, and mutated: - make a variable immutable (i.e. remove the setqs on it) and that variable becomes more efficient again. - move the let binding inside the catch, and the var becomes efficient again. - don't use the variable inside the catch, and it becomes efficient again. Stefan