From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Default lexical-binding to t Date: Fri, 08 Nov 2024 13:38:32 -0500 Message-ID: References: <86ttcnuppm.fsf@gnu.org> <86ttcksgsu.fsf@gnu.org> <86bjysscvr.fsf@gnu.org> <86v7x0w0l6.fsf@fastmail.fm> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="29255"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Joost Kremers , emacs-devel@gnu.org To: Alan Mackenzie Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Nov 08 19:39:50 2024 Return-path: Envelope-to: ged-emacs-devel@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 1t9Tte-0007Tv-CO for ged-emacs-devel@m.gmane-mx.org; Fri, 08 Nov 2024 19:39:50 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1t9Tsj-0000P6-CS; Fri, 08 Nov 2024 13:38:53 -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 1t9TsX-0000Op-P5 for emacs-devel@gnu.org; Fri, 08 Nov 2024 13:38:42 -0500 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t9TsU-0006i6-Dk for emacs-devel@gnu.org; Fri, 08 Nov 2024 13:38:40 -0500 Original-Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id B5391444633; Fri, 8 Nov 2024 13:38:33 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1731091112; bh=7GqA/a9ldkz2TtzDS5xWyeLM6APFzivEJXw662iDv6E=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=dYR5TGs4FG9CqmRxqwqoAbFkiEknxERoXbfRQRonSFE8MJ4h637fdck/iH81puTMJ 4IjM4aiJkunm317j7UrfUFlIV1n+/mGRjLCHZJvbGJL7cEuhwGSG7HnVnprL4STZdr S82j/t7s3QSYALLnplFVMoK+ssl2/6wejnvJj6Fa312DByQgMcwmfvg4CmFO/96662 kQs3t1/qaRMRCV9V/sPKfQXrxN4/dZ3zlrPHQj1R8WKj7mgkMTOcVIGTlHkhEXpzD3 afjiolJ3jlmvs4jeVxAhUm8dkU2HUu8QIF48UQ+1oNSKbOz4y2QEtlSfcUbcaYXWw4 JRaeVvnCxtjiA== Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 895A4444630; Fri, 8 Nov 2024 13:38:32 -0500 (EST) Original-Received: from asado (bras-base-mtrlpq0776w-grc-08-184-145-223-228.dsl.bell.ca [184.145.223.228]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 7A9DE1202C5; Fri, 8 Nov 2024 13:38:32 -0500 (EST) In-Reply-To: (Alan Mackenzie's message of "Wed, 6 Nov 2024 22:50:57 +0000") Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:325303 Archived-At: >> | Note that when code using Dynamic Binding is native compiled the >> | native compiler will not perform any Lisp specific optimization. > This looks like a choice not to support dynamic binding as well as > lexical binding. As Andrea mentions, it's not quite so simple: by its very nature, dynamic scoping makes static understanding of the code's behavior is harder. To take an example from, my PL course: =F0=9F=99=82 (let ((x 3)) (+ (f y) x)) with static scoping, the compiler can trivially rewrite this: (let ((x 3)) (+ (f y) x)) =3D> (constant propagation) (let ((x 3)) (+ (f y) 3)) =3D> (dead variable elimination) (+ (f y) 3) but with dynamic scoping, both steps require the compiler to convince itself that no code reachable from `f` can refer to or modify `x`. Our compiler is very far from performing enough code analysis to know anything about `f` when we compile the above code, so it gives up on the optimization right away. Of course, this doesn't affect only compilers but also humans. It's part of the reason why static scoping is used by virtually all programming languages, whereas dynamic scoping is supported only by a select few programming languages and is virtually never the default. Stefan